summaryrefslogtreecommitdiff
path: root/volk/lib/qa_16s_max_star_horizontal_aligned16.cc
diff options
context:
space:
mode:
authorTom Rondeau2010-12-07 18:50:28 -0500
committerTom Rondeau2010-12-07 18:50:28 -0500
commit239144659b29c0a5ecd83a34e0e57387a1060ed7 (patch)
tree3476e1c123da4696c64cc1756ddec5d971bcf9f2 /volk/lib/qa_16s_max_star_horizontal_aligned16.cc
parente13783aeb84a2c3656c3344a8d52fa2c9ee38a00 (diff)
downloadgnuradio-239144659b29c0a5ecd83a34e0e57387a1060ed7.tar.gz
gnuradio-239144659b29c0a5ecd83a34e0e57387a1060ed7.tar.bz2
gnuradio-239144659b29c0a5ecd83a34e0e57387a1060ed7.zip
Initial checkin for VOLK - Vector-Optimized Library of Kernels. This is a new SIMD library.
It currently stands by itself under the GNU Radio tree and can be used separately. We will integrate the build process into GNU Raio and start building off of its functionality over time.
Diffstat (limited to 'volk/lib/qa_16s_max_star_horizontal_aligned16.cc')
-rw-r--r--volk/lib/qa_16s_max_star_horizontal_aligned16.cc79
1 files changed, 79 insertions, 0 deletions
diff --git a/volk/lib/qa_16s_max_star_horizontal_aligned16.cc b/volk/lib/qa_16s_max_star_horizontal_aligned16.cc
new file mode 100644
index 000000000..4d44735df
--- /dev/null
+++ b/volk/lib/qa_16s_max_star_horizontal_aligned16.cc
@@ -0,0 +1,79 @@
+#include <volk/volk_runtime.h>
+#include <volk/volk.h>
+#include <qa_16s_max_star_horizontal_aligned16.h>
+#include <volk/volk_16s_max_star_horizontal_aligned16.h>
+#include <cstdlib>
+#include <time.h>
+//test for ssse3
+
+#ifndef LV_HAVE_SSSE3
+
+void qa_16s_max_star_horizontal_aligned16::t1() {
+ printf("ssse3 not available... no test performed\n");
+}
+
+#else
+
+
+void qa_16s_max_star_horizontal_aligned16::t1() {
+
+
+ volk_runtime_init();
+
+ volk_environment_init();
+ clock_t start, end;
+ double total;
+ const int vlen = 32;
+ const int ITERS = 1;
+ short input0[vlen] __attribute__ ((aligned (16)));
+ short output0[vlen>>1] __attribute__ ((aligned (16)));
+
+ short output1[vlen>>1] __attribute__ ((aligned (16)));
+
+ for(int i = 0; i < vlen; ++i) {
+ short plus0 = ((short) (rand() - (RAND_MAX/2)));
+
+ short minus0 = ((short) (rand() - (RAND_MAX/2)));
+
+ input0[i] = plus0 - minus0;
+
+ }
+ printf("16s_max_star_horizontal_aligned\n");
+
+ start = clock();
+ for(int count = 0; count < ITERS; ++count) {
+ volk_16s_max_star_horizontal_aligned16_manual(output0, input0, 2*vlen, "generic");
+ volk_16s_max_star_horizontal_aligned16_manual(output0, output0, vlen, "generic");
+ volk_16s_max_star_horizontal_aligned16_manual(output0, output0, vlen/2, "generic");
+ }
+ end = clock();
+ total = (double)(end-start)/(double)CLOCKS_PER_SEC;
+ printf("generic_time: %f\n", total);
+ start = clock();
+ for(int count = 0; count < ITERS; ++count) {
+
+ get_volk_runtime()->volk_16s_max_star_horizontal_aligned16(output1, input0, 2*vlen);
+ get_volk_runtime()->volk_16s_max_star_horizontal_aligned16(output1, output1, vlen);
+ get_volk_runtime()->volk_16s_max_star_horizontal_aligned16(output1, output1, vlen);
+ /* volk_16s_max_star_horizontal_aligned16(output1, input0, 2*vlen, "ssse3");
+ volk_16s_max_star_horizontal_aligned16(output1, output1, vlen, "ssse3");
+ volk_16s_max_star_horizontal_aligned16(output1, output1, vlen, "ssse3");*/
+ }
+ end = clock();
+ total = (double)(end-start)/(double)CLOCKS_PER_SEC;
+ printf("ssse3_time: %f\n", total);
+
+ for(int i = 0; i < (vlen >> 1); ++i) {
+ // printf("inputs: %d, %d\n", input0[i*2], input0[i*2 + 1]);
+ //printf("generic... %d, ssse3... %d\n", output0[i], output1[i]);
+
+ }
+ for(int i = 0; i < (vlen >> 1); ++i) {
+
+ CPPUNIT_ASSERT_EQUAL(output0[i], output1[i]);
+ }
+ }
+
+
+#endif
+