Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
禁用GCC中函数中特定循环的自动矢量化_Gcc_Auto Vectorization - Fatal编程技术网

禁用GCC中函数中特定循环的自动矢量化

禁用GCC中函数中特定循环的自动矢量化,gcc,auto-vectorization,Gcc,Auto Vectorization,我想关闭函数中特定循环的自动矢量化。如何使用GCC实现这一点?我知道我可以使用\uuuu属性((优化(“无树向量”))关闭整个函数的自动向量化,但如何对函数中的单个循环执行此操作(使用MSVC,我可以使用add\pragma循环(无向量)) void dot\u int(int*\u restrict a,int*\u restrict b,int*\u restrict c){ 对于(int i=0;i,如果有人关心,我想出了一个解决方案。事实恰恰相反。它不是为某些循环禁用自动矢量化,而是只为

我想关闭函数中特定循环的自动矢量化。如何使用GCC实现这一点?我知道我可以使用
\uuuu属性((优化(“无树向量”))
关闭整个函数的自动向量化,但如何对函数中的单个循环执行此操作(使用MSVC,我可以使用add
\pragma循环(无向量)

void dot\u int(int*\u restrict a,int*\u restrict b,int*\u restrict c){

对于(int i=0;i,如果有人关心,我想出了一个解决方案。事实恰恰相反。它不是为某些循环禁用自动矢量化,而是只为某些循环启用它

要执行此操作,请使用
-O2
编译并像这样使用
#pragma omp simd

void dot_int(int * __restrict a, int * __restrict b, int * __restrict c) {
    #pragma omp simd 
    for(int i=0; i<1024; i++) {        
        c[i] = a[i] + b[i];
    }

    for(int i=0; i<1024; i++) {        
        c[i] = a[i] + b[i];
    }
}
void dot\u int(int*\u restrict a,int*\u restrict b,int*\u restrict c){
#pragma-omp-simd

对于(int i=0;i)我想问你为什么要这样做?我正在尝试将向量化循环分为向量化和非向量化部分。现在的方式是,我只能得到一个。我尝试使用单独的内联函数,但没有成功。
void dot_int(int * __restrict a, int * __restrict b, int * __restrict c) {
    #pragma omp simd 
    for(int i=0; i<1024; i++) {        
        c[i] = a[i] + b[i];
    }

    for(int i=0; i<1024; i++) {        
        c[i] = a[i] + b[i];
    }
}