![]() System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, Directory : /usr/share/emscripten/tests/core/ |
Upload File : |
#include <stdio.h> #include <xmmintrin.h> static __inline__ __m128 __attribute__((__always_inline__)) _mm_load_ps(const float *__p) { return *(__m128*)__p; } float simdAverage(float *src, int len) { __m128 sumx4 = _mm_setzero_ps(); for (int i = 0; i < len; i += 4) { __m128 v = _mm_load_ps(src); sumx4 = _mm_add_ps(sumx4, v); src += 4; } float sumx4_mem[4]; float *sumx4_ptr = sumx4_mem; _mm_store_ps(sumx4_ptr, sumx4); return (sumx4_mem[0] + sumx4_mem[1] + sumx4_mem[2] + sumx4_mem[3])/len; } void initArray(float *src, int len) { for (int i = 0; i < len; ++i) { src[i] = 0.1 * i; } } int main() { const int len = 100000; float src[len]; float result = 0.0; initArray(src, len); result = simdAverage(src, len); printf("averagex4 result: %.1f\n", result); }