gpt4 book ai didi

c++ - 将数组的所有元素相加的 SSE 指令

转载 作者:可可西里 更新时间:2023-11-01 18:09:21 25 4
gpt4 key购买 nike

<分区>

我是 SSE2 指令的新手。我找到了一条指令 _mm_add_epi8 可以添加两个数组元素。但是我想要一个可以添加数组所有元素的 SSE 指令。

我试图使用这段代码来发展这个概念:

#include <iostream>
#include <conio.h>
#include <emmintrin.h>

void sse(unsigned char* a,unsigned char* b);

void main()
{
/*unsigned char *arr;
arr=(unsigned char *)malloc(50);*/

unsigned char arr[]={'a','b','c','d','e','f','i','j','k','l','m','n','o','p','q','r','a','b','c','d','e','f','i','j','k','l','m','n','o','p','q','r'};
unsigned char *next_arr=arr+16;
for(int i=0;i<16;i++)
printf("%d,%c ",next_arr[i],next_arr[i]);
sse(arr,next_arr);

getch();
}

void sse(unsigned char* a,unsigned char* b)
{
__m128i* l = (__m128i*)a;
__m128i* r = (__m128i*)b;
__m128i result;

result= _mm_add_epi8(*l, *r);

unsigned char *p;
p=(unsigned char *)&result;

for(int i=0;i<16;i++)
printf("%d ",p[i]);

printf("\n");
l=(__m128i*)p;
r=(__m128i*)(p+8);
result=_mm_add_epi8(*l, *r);
p=(unsigned char *)&result;
printf("%d ",p[0]);

l=(__m128i*)p;
r=(__m128i*)(p+4);
result=_mm_add_epi8(*l, *r);
p=(unsigned char *)&result;
l=(__m128i*)p;
r=(__m128i*)(p+2);
result=_mm_add_epi8(*l, *r);
p=(unsigned char *)&result;
l=(__m128i*)p;
r=(__m128i*)(p+1);
result=_mm_add_epi8(*l, *r);
p=(unsigned char *)&result;
printf("result =%d ",p[0]);
}

那么有人能告诉我如何使用 SSE2 指令添加数组的所有元素吗?

我们将不胜感激。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com