【error: `__m128i‘ undeclared (first use in this function】啥原因啊,脑瓜疼

本文介绍了一种使用IntelSSE2的SIMD指令对整数数组进行四数相加优化的方法,通过vectorization提高计算性能。并通过添加Arrays函数和SIMD版本的对比,展示了SIMD在C++编程中的应用及其性能提升。
摘要由CSDN通过智能技术生成
#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 directory

Complete Make jisuan: 20 error(s), 1 warning(s)

 这样输出,最后得到这样的输出,兄弟们知道哪里出问题了吗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值