#include #include #include void try_proc_raw(void) { float b[1024]; pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; unsigned int ind; unsigned int jnd; for (ind = 0; ind < 1024; ++ind) { pthread_mutex_lock(&mtx); for (jnd = 0; jnd < 1024; ++jnd) b[jnd] *= jnd; pthread_mutex_unlock(&mtx); } } void try_proc_sse(void) { vector_16f buf[64]; float *f; pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER; unsigned int ind; unsigned int jnd; f = (float *) buf; for (ind = 0; ind < 1024; ++ind) { pthread_mutex_lock(&mtx); vec_multscNf(buf, (float) jnd, 1024); pthread_mutex_unlock(&mtx); } } void howlong(const char *fn, void (*func)(void)) { struct timespec t1; struct timespec t2; clock_gettime(CLOCK_REALTIME, &t1); func(); clock_gettime(CLOCK_REALTIME, &t2); printf("%s %lu\n", fn, t2.tv_nsec - t1.tv_nsec); } int main(void) { howlong("try_proc_raw", try_proc_raw); howlong("try_proc_sse", try_proc_sse); return 0; }