如果有人可以帮助编写一个接收AVX向量的函数并检查它是否包含任何大于零的元素,我将感激不尽.
我编写了以下代码,但它不是最佳的,因为它存储元素然后操纵它.矢量应该作为一个整体进行检查.
int check(__m256 vector)
{
float * temp;
posix_memalign ((void **) &temp, 32, 8 * sizeof(float));
_mm256_store_ps( temp, vector );
int flag=0;
for(int k=0; k<8; k++)
{
flag= ( (temp[k]>0) ? 1 : 0 );
if (flag==1) return 1;
}
free( temp);
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我已经编写了一个具有AVX内在函数的程序,该程序可以在带有以下编译行的Ubuntu 12.4 LTS和GCC 4.6上正常运行:g ++ -g -Wall -mavx ProgramName.cc -o ProgramName
问题开始了当我将编译器更新到4.7和4.8.1版本以支持16位AVX2内部函数时,gcc 4.6不支持该内部函数
当前,更新的gcc版本可以正确编译AVX和AVX2程序。但是,当我运行程序时,它给了我以下错误:非法指令(核心转储),尽管它在gcc 4.6上运行
我的问题是:编译和运行AVX和AVX2内部函数的完美方法是什么?