gpt4 book ai didi

c++ - 如何将现有矢量化函数对应于英特尔编译器自动矢量化的现有标量函数

转载 作者:行者123 更新时间:2023-11-28 04:48:50 25 4
gpt4 key购买 nike

嗯,我在英特尔编译器优化 (ICC) 方面遇到了一些麻烦。一般我想使用 ICC 循环自动矢量化。早些时候,我使用了显式矢量化循环和函数。据我所知,英特尔编译器允许通过 _declspec(vector_variant()) 指令获得标量和相应的矢量化函数。但是我对此有一些问题。例如,现在我有两个版本的函数:

int plus(int a, int b)
{
return a + b;
}

__m256i plus_avx(__m256i a, __m256i b)
{
return _mm256_add_epi32(a, b);
}

int main()
{

int aa[1000] = { 2 };
int bb[1000] = { 4 };
int cc[1000] = { 0 };

for (int i = 0; i < 1000; ++i)
cc[i] = plus(aa[i], bb[i]);
}

我希望 ICC 使用函数的矢量化版本来实现自动矢量化循环。我尝试像这样使用 __declspec(vector_variant()):

_declspec(vector_variant(implements(plus(int a, int b)), vectorlength(8))) __m256i plus_avx(__m256i a, __m256i b)
{
return _mm256_add_epi32(a, b);
}

但我有错误:

1>error #15508: Incorrect return type of vector variant '?plus_avx@@YA?AT__m256i@@T1@0@Z' of function '?plus@@YAHJH@Z' at position 0.

1> The correct prototype is: '__m128i, __m128i ?plus_avx@@YA?AT__m256i@@T1@0@Z(__m128i v0_0, __m128i v0_1, __m128i v1_0, __m128i v1_1)'.

为什么编译器需要 __m128i 并且有没有办法使用 __m256i insted of __m128i

注意:它用于 ICC 的/QaxCORE-AVX2 标志。

最佳答案

终于解决了我的问题。也许其他人会感兴趣。

解决方案是使用处理器子句:

_declspec(vector_variant(implements(plus(int a, int b)), vectorlength(8), processor(core_4th_gen_avx)))

关于c++ - 如何将现有矢量化函数对应于英特尔编译器自动矢量化的现有标量函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48628101/

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