From 5117e7e647d2f380a883661571e441ce603220a9 Mon Sep 17 00:00:00 2001 From: Matt Turner Date: Mon, 12 May 2008 19:55:21 +0000 Subject: import testsuite git-svn-id: svn://mattst88.com/svn/alpha_mmintrin/trunk@3 f7d56953-e76f-4e43-a77e-20d50f6c004e --- testsuite/minuw4.c | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 testsuite/minuw4.c (limited to 'testsuite/minuw4.c') diff --git a/testsuite/minuw4.c b/testsuite/minuw4.c new file mode 100644 index 0000000..205d32e --- /dev/null +++ b/testsuite/minuw4.c @@ -0,0 +1,108 @@ +#include +#include +#include +#include + +#include "../alpha_mmintrin.h" +#include "minmax.h" + +#define ITERATIONS 10000 + +int main(int argc, char ** argv[]) { + static uint64_t a[512], b[512]; + static uint64_t c[512] = {0}, d[512] = {0}; + + uint64_t l64_0, l64_1, l64_2; + uint64_t *a64, *b64, *c64, *d64; + + uint64_t start, end, overhead; + uint64_t simd_total = 0, no_simd_total = 0; + + uint16_t l16_0, l16_1, l16_2, l16_3, l16_4, l16_5, l16_6, l16_7, l16_8, l16_9, l16_10, l16_11, l16_12; + uint16_t *a16, *b16, *c16; + + uint8_t l8_0, l8_1, l8_2; + uint8_t *a8, *b8, *c8; + + int i, j; + + start = __rpcc(); + end = __rpcc(); + overhead = end - start; + + srand(time(NULL)); + + a8 = (uint8_t *)a; + b8 = (uint8_t *)b; + + for (i = 0; i < 4096; i++) { + *a8 = rand() % 255; + *b8 = rand() % 255; + + a8++; + b8++; + } + + for (j = 0; j < ITERATIONS; j++) { + a16 = (uint16_t *)a; + b16 = (uint16_t *)b; + c16 = (uint16_t *)c; + + start = __rpcc(); + + for (i = 0; i < 2048; i++) { + l16_1 = *a16; + l16_2 = *b16; + l16_0 = MIN(l16_1, l16_2); + *c16 = l16_0; + a16++; + b16++; + c16++; + } + + end = __rpcc() - overhead; + no_simd_total += end - start; + + memset(c, 4096, 0); + } + + no_simd_total /= ITERATIONS; + + + for (j = 0; j < ITERATIONS; j++) { + a64 = a; + b64 = b; + d64 = d; + + start = __rpcc(); + + for (i = 0; i < 512; i++) { + l64_1 = *a64; + l64_2 = *b64; + + l64_0 = __minuw4(l64_1, l64_2); + + *d64 = l64_0; + + a64++; + b64++; + d64++; + } + + end = __rpcc() - overhead; + simd_total += end - start; + + memset(d, 4096, 0); + } + + simd_total /= ITERATIONS; + + if (memcmp(c, d, 4096) == 0) { + printf("%s:\n", argv[0]); + printf(" SIMD time: %9lu nanoseconds\nnon-SIMD time: %9lu nanoseconds\n", simd_total, no_simd_total); + } else { + puts("Final arrays are not equal. Something happened."); + } + + return 0; +} -- cgit v1.2.3