Late on a Saturday night and I’m working on my monitor tan. It’s spring, can’t be too early to prepare for summer of course!
I’ve taken the following sql queries and run them both with the traditional sqlite c apis as well as with my OpenCL accelerated APIs. These queries are the same that Bakkum et all used in their cuda accelerated sqlite paper.
char *sql11 ="SELECT SUM(normalf20) FROM test"; char *sql12 ="SELECT AVG(uniformi) FROM test WHERE uniformi > 0"; char *sql13 ="SELECT MAX(normali5), MIN(normali5) FROM test";
Straight sqlite with my A15 based Samsung Chromebook yields:
sql11 took 95399 microseconds sql12 took 86576 microseconds sql13 took 121898 microseconds
My OpenCL APIs yields the following for the same queries:
OpenCL sql11 took 46098 microseconds OpenCL sql12 took 55524 microseconds OpenCL sql13 took 64802 microseconds
The data is the same for both straight C sqlite apis and OpenCL apis 100,000 rows to process from one database with one table. The time measured is the time to perform the query across all selected data and for the end user API to obtain the data. For OpenCL this includes the copying out of the data. For the straight c apis this includes the time accessing the one row.
I’m not applying any sort of statistical process or test to these results. That’ll be a later step to assert a confidence interval based on a distribution of collected results.
All in all I don’t think the results are too bad but I’d like to think OpenCL should be able do better. Time to spend a little time with perf as well as do a little digging to see what might be available from Mali developer to analyze performance on the GPU.
These microbenchmarks are important to me. They give a guide as far as what might be accomplished with a general purpose solution which is yet to be written. They also are helping me to form opinions about how to best approach it.