CMSIS-DSP: Added support for Helium.
Only arm_dot_prod_f32 is currently providing an Helium implementation.
diff --git a/CMSIS/DSP/Testing/CMakeLists.txt b/CMSIS/DSP/Testing/CMakeLists.txt
index de00fe2..be96fef 100644
--- a/CMSIS/DSP/Testing/CMakeLists.txt
+++ b/CMSIS/DSP/Testing/CMakeLists.txt
@@ -7,7 +7,7 @@
function(writeConfig path)
set(output "")
- list(APPEND output "OPTIMIZED,HARDFP,FASTMATH,NEON,UNROLL,ROUNDING,PLATFORM,CORE,COMPILER,VERSION\n")
+ list(APPEND output "OPTIMIZED,HARDFP,FASTMATH,NEON,HELIUM,UNROLL,ROUNDING,PLATFORM,CORE,COMPILER,VERSION\n")
if (OPTIMIZED)
list(APPEND output "1")
@@ -33,6 +33,12 @@
list(APPEND output ",0")
endif()
+ if (HELIUM)
+ list(APPEND output ",1")
+ else()
+ list(APPEND output ",0")
+ endif()
+
if (LOOPUNROLL)
list(APPEND output ",1")
else()
diff --git a/CMSIS/DSP/Testing/addToDB.py b/CMSIS/DSP/Testing/addToDB.py
index 514df54..bdf570a 100755
--- a/CMSIS/DSP/Testing/addToDB.py
+++ b/CMSIS/DSP/Testing/addToDB.py
@@ -19,7 +19,7 @@
# For table creation
MKSTRFIELD=['NAME']
-MKBOOLFIELD=['HARDFP', 'FASTMATH', 'NEON', 'UNROLL', 'ROUNDING','OPTIMIZED']
+MKBOOLFIELD=['HARDFP', 'FASTMATH', 'NEON', 'HELIUM','UNROLL', 'ROUNDING','OPTIMIZED']
MKINTFIELD=['ID', 'CYCLES']
MKDATEFIELD=['DATE']
MKKEYFIELD=['CATEGORY', 'PLATFORM', 'CORE', 'COMPILER','TYPE']
@@ -31,7 +31,7 @@
# For table value extraction
VALSTRFIELD=['NAME','VERSION']
-VALBOOLFIELD=['HARDFP', 'FASTMATH', 'NEON', 'UNROLL', 'ROUNDING','OPTIMIZED']
+VALBOOLFIELD=['HARDFP', 'FASTMATH', 'NEON', 'HELIUM','UNROLL', 'ROUNDING','OPTIMIZED']
VALINTFIELD=['ID', 'CYCLES']
VALDATEFIELD=['DATE']
VALKEYFIELD=['CATEGORY', 'PLATFORM', 'CORE', 'COMPILER','TYPE']
@@ -246,16 +246,17 @@
conn.commit()
def addOneBenchmark(elem,fullPath,db,group):
- full=pd.read_csv(fullPath,dtype={'OLDID': str} ,keep_default_na = False)
- full['DATE'] = datetime.datetime.now()
- if group:
- tableName = group
- else:
- tableName = elem.data["class"]
- conn = sqlite3.connect(db)
- createTableIfMissing(conn,elem,tableName,full)
- addRows(conn,elem,tableName,full)
- conn.close()
+ if os.path.isfile(fullPath):
+ full=pd.read_csv(fullPath,dtype={'OLDID': str} ,keep_default_na = False)
+ full['DATE'] = datetime.datetime.now()
+ if group:
+ tableName = group
+ else:
+ tableName = elem.data["class"]
+ conn = sqlite3.connect(db)
+ createTableIfMissing(conn,elem,tableName,full)
+ addRows(conn,elem,tableName,full)
+ conn.close()
def addToDB(benchmark,dbpath,elem,group):
diff --git a/CMSIS/DSP/Testing/addToRegDB.py b/CMSIS/DSP/Testing/addToRegDB.py
index 50c3e76..acbf3fd 100755
--- a/CMSIS/DSP/Testing/addToRegDB.py
+++ b/CMSIS/DSP/Testing/addToRegDB.py
@@ -19,7 +19,7 @@
# For table creation
MKSTRFIELD=['NAME','Regression']
-MKBOOLFIELD=['HARDFP', 'FASTMATH', 'NEON', 'UNROLL', 'ROUNDING','OPTIMIZED']
+MKBOOLFIELD=['HARDFP', 'FASTMATH', 'NEON', 'HELIUM','UNROLL', 'ROUNDING','OPTIMIZED']
MKINTFIELD=['ID','MAX']
MKREALFIELD=['MAXREGCOEF']
MKDATEFIELD=['DATE']
@@ -32,7 +32,7 @@
# For table value extraction
VALSTRFIELD=['NAME','VERSION','Regression']
-VALBOOLFIELD=['HARDFP', 'FASTMATH', 'NEON', 'UNROLL', 'ROUNDING','OPTIMIZED']
+VALBOOLFIELD=['HARDFP', 'FASTMATH', 'NEON', 'HELIUM','UNROLL', 'ROUNDING','OPTIMIZED']
VALINTFIELD=['ID', 'MAX']
VALREALFIELD=['MAXREGCOEF']
VALDATEFIELD=['DATE']
@@ -257,16 +257,17 @@
conn.commit()
def addOneBenchmark(elem,fullPath,db,group):
- full=pd.read_csv(fullPath,dtype={'OLDID': str} ,keep_default_na = False)
- full['DATE'] = datetime.datetime.now()
- if group:
- tableName = group
- else:
- tableName = elem.data["class"]
- conn = sqlite3.connect(db)
- createTableIfMissing(conn,elem,tableName,full)
- addRows(conn,elem,tableName,full)
- conn.close()
+ if os.path.isfile(fullPath):
+ full=pd.read_csv(fullPath,dtype={'OLDID': str} ,keep_default_na = False)
+ full['DATE'] = datetime.datetime.now()
+ if group:
+ tableName = group
+ else:
+ tableName = elem.data["class"]
+ conn = sqlite3.connect(db)
+ createTableIfMissing(conn,elem,tableName,full)
+ addRows(conn,elem,tableName,full)
+ conn.close()
def addToDB(benchmark,dbpath,elem,group):
diff --git a/CMSIS/DSP/Testing/createDb.sql b/CMSIS/DSP/Testing/createDb.sql
index 64737b3..2c9b161 100755
--- a/CMSIS/DSP/Testing/createDb.sql
+++ b/CMSIS/DSP/Testing/createDb.sql
@@ -70,3 +70,4 @@
INSERT INTO CORE VALUES(10,"a7","ARMCA7");
INSERT INTO CORE VALUES(11,"a9","ARMCA9");
INSERT INTO CORE VALUES(12,"a15","ARMCA15");
+INSERT INTO CORE VALUES(13,"helium","ARMv81MML_DSP_DP_MVE_FP");
diff --git a/CMSIS/DSP/Testing/summaryBench.py b/CMSIS/DSP/Testing/summaryBench.py
index 14cb2be..ff758bc 100644
--- a/CMSIS/DSP/Testing/summaryBench.py
+++ b/CMSIS/DSP/Testing/summaryBench.py
@@ -57,38 +57,40 @@
def summaryBenchmark(resultPath,elem,path):
regressionPath=os.path.join(os.path.dirname(path),"regression.csv")
- print(" Generating %s" % regressionPath)
- full=pd.read_csv(path,dtype={'OLDID': str} ,keep_default_na = False)
- #print(full)
-
- csvheaders = []
- with open(os.path.join(resultPath,'currentConfig.csv'), 'r') as f:
- reader = csv.reader(f)
- csvheaders = next(reader, None)
- groupList = list(set(elem.params.full) - set(elem.params.summary))
- #grouped=full.groupby(list(elem.params.summary) + ['ID','CATEGORY']).max()
- #grouped.reset_index(level=grouped.index.names, inplace=True)
- #print(grouped)
- #print(grouped.columns)
+ if os.path.isfile(path):
+ print(" Generating %s" % regressionPath)
+ full=pd.read_csv(path,dtype={'OLDID': str} ,keep_default_na = False)
+ #print(full)
+
+ csvheaders = []
+ with open(os.path.join(resultPath,'currentConfig.csv'), 'r') as f:
+ reader = csv.reader(f)
+ csvheaders = next(reader, None)
+
+ groupList = list(set(elem.params.full) - set(elem.params.summary))
+ #grouped=full.groupby(list(elem.params.summary) + ['ID','CATEGORY']).max()
+ #grouped.reset_index(level=grouped.index.names, inplace=True)
+ #print(grouped)
+ #print(grouped.columns)
- def reg(d):
- m=d["CYCLES"].max()
- results = smf.ols('CYCLES ~ ' + elem.params.formula, data=d).fit()
- f=joinit([formatProd(a,b) for (a,b) in zip(results.params.index,results.params.values)]," + ")
- f="".join(f)
- f = re.sub(r':','*',f)
- #print(results.summary())
- return(pd.Series({'Regression':"%s" % f,'MAX' : m,'MAXREGCOEF' : results.params.values[-1]}))
-
- regList = ['ID','OLDID','CATEGORY','NAME'] + csvheaders + groupList
+ def reg(d):
+ m=d["CYCLES"].max()
+ results = smf.ols('CYCLES ~ ' + elem.params.formula, data=d).fit()
+ f=joinit([formatProd(a,b) for (a,b) in zip(results.params.index,results.params.values)]," + ")
+ f="".join(f)
+ f = re.sub(r':','*',f)
+ #print(results.summary())
+ return(pd.Series({'Regression':"%s" % f,'MAX' : m,'MAXREGCOEF' : results.params.values[-1]}))
- regression=full.groupby(regList).apply(reg)
- regression.reset_index(level=regression.index.names, inplace=True)
- renamingDict = { a : b for (a,b) in zip(elem.params.full,elem.params.paramNames)}
- regression = regression.rename(columns=renamingDict)
- regression.to_csv(regressionPath,index=False,quoting=csv.QUOTE_NONNUMERIC)
+ regList = ['ID','OLDID','CATEGORY','NAME'] + csvheaders + groupList
+
+ regression=full.groupby(regList).apply(reg)
+ regression.reset_index(level=regression.index.names, inplace=True)
+ renamingDict = { a : b for (a,b) in zip(elem.params.full,elem.params.paramNames)}
+ regression = regression.rename(columns=renamingDict)
+ regression.to_csv(regressionPath,index=False,quoting=csv.QUOTE_NONNUMERIC)
def extractBenchmarks(resultPath,benchmark,elem):
diff --git a/CMSIS/DSP/Testing/testmain.cpp b/CMSIS/DSP/Testing/testmain.cpp
index eb5014a..51d7dd1 100644
--- a/CMSIS/DSP/Testing/testmain.cpp
+++ b/CMSIS/DSP/Testing/testmain.cpp
@@ -18,9 +18,13 @@
#include "Patterns.h"
+
int testmain()
{
char *memoryBuf=NULL;
+
+
+
memoryBuf = (char*)malloc(MEMSIZE);
if (memoryBuf !=NULL)