#include <stdio.h>
#include <time.h>
#include <emmintrin.h>
#define SIZE 24
void addArrays(int* arr1, int* arr2, int* arr3, int* arr4, int* result)
{
int i;
for(i = 0;i < SIZE;i++)
{
result[i] = (arr1[i] + arr2[i] + arr3[i] + arr4[i]) / 4;
}
}
void addArraysSIMD(int* arr1, int* arr2, int* arr3, int* arr4, int* result)
{
__m128i* ptr1;
ptr1 = (__m128i*)arr1;
__m128i* ptr2 = (__m128i*)arr2;
__m128i* ptr3 = (__m128i*)arr3;
__m128i* ptr4 = (__m128i*)arr4;
__m128i* ptrResult = (__m128i*)result;
int i;
for ( i = 0; i <SIZE / 4; i++) {
__m128i vec1 = _mm_load_si128(ptr1 + i);
__m128i vec2 = _mm_load_si128(ptr2 + i);
__m128i vec3 = _mm_load_si128(ptr3 + i);
__m128i vec4 = _mm_load_si128(ptr4 + i);
__m128i sum = _mm_add_epi16(_mm_add_epi16(vec1, vec2), _mm_add_epi16(vec3, vec4));
__m128i avg = _mm_srli_epi16(sum, 2);
_mm_store_si128(ptrResult + i, avg);
}
}
int main() {
int arr1[SIZE] = { 1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10 };
int arr2[SIZE] = { 1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10 };
int arr3[SIZE] = { 1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10 };
int arr4[SIZE] = { 1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10 };
int result[SIZE];
clock_t start, end;
double cpu_time_used;
// 测量版本1的执行时间
start = clock();
addArrays(arr1, arr2, arr3, arr4, result);
end = clock();
cpu_time_used = ((double)(end - start)) / CLOCKS_PER_SEC;
printf("版本1的执行时间: %f 秒\n", cpu_time_used);
// 测量版本2的执行时间
start = clock();
addArraysSIMD(arr1, arr2, arr3, arr4, result);
end = clock();
cpu_time_used = ((double)(end - start)) / CLOCKS_PER_SEC;
printf("版本2的执行时间: %f 秒\n", cpu_time_used);
printf("gg");
return 0;
}
--------------------Configuration: mingw5 - CUI Debug, Builder Type: MinGW--------------------
Checking file dependency...
Compiling C:\Users\123\Desktop\程序\jisuan.c...
[Error] C:\Users\123\Desktop\程序\jisuan.c:16: error: `__m128i' undeclared (first use in this function)
[Error] C:\Users\123\Desktop\程序\jisuan.c:16: error: (Each undeclared identifier is reported only once
[Error] C:\Users\123\Desktop\程序\jisuan.c:16: error: for each function it appears in.)
[Error] C:\Users\123\Desktop\程序\jisuan.c:16: error: `ptr1' undeclared (first use in this function)
[Error] C:\Users\123\Desktop\程序\jisuan.c:17: error: syntax error before ')' token
[Error] C:\Users\123\Desktop\程序\jisuan.c:18: error: `ptr2' undeclared (first use in this function)
[Error] C:\Users\123\Desktop\程序\jisuan.c:18: error: syntax error before ')' token
[Error] C:\Users\123\Desktop\程序\jisuan.c:19: error: `ptr3' undeclared (first use in this function)
[Error] C:\Users\123\Desktop\程序\jisuan.c:19: error: syntax error before ')' token
[Error] C:\Users\123\Desktop\程序\jisuan.c:20: error: `ptr4' undeclared (first use in this function)
[Error] C:\Users\123\Desktop\程序\jisuan.c:20: error: syntax error before ')' token
[Error] C:\Users\123\Desktop\程序\jisuan.c:21: error: `ptrResult' undeclared (first use in this function)
[Error] C:\Users\123\Desktop\程序\jisuan.c:21: error: syntax error before ')' token
[Error] C:\Users\123\Desktop\程序\jisuan.c:25: error: syntax error before "vec1"
[Error] C:\Users\123\Desktop\程序\jisuan.c:33: error: `avg' undeclared (first use in this function)
[Warning] C:\Users\123\Desktop\程序\jisuan.c:61:2: warning: no newline at end of file
[Error] gcc.exe: 5\mingw\include: No such file or directory
[Error] gcc.exe: 5\mingw\include\c++\3.4.5: No such file or directory
[Error] gcc.exe: 5\mingw\lib\gcc\mingw32\3.4.5\include: No such file or directory
[Error] gcc.exe: 5\mingw\bin\: No such file or directory
[Error] gcc.exe: 5\mingw\mingw32\bin\: No such file or directoryComplete Make jisuan: 20 error(s), 1 warning(s)
这样输出,最后得到这样的输出,兄弟们知道哪里出问题了吗