我对Sycl/DPC++语言很陌生。我使用统一共享内存(USM)编写了一个向量加法代码示例:
#include<CL/sycl.hpp>
#include<iostream>
#include<chrono>
using namespace sycl;
int main()
{
int n=100;
int i;
queue q{ };
range<1>(n);
int *a=malloc_shared<int>(n,q);
int *b=malloc_shared<int>(n,q);
int *c=malloc_shared<int>(n,q);
for(i=0;i<n;i++)
{
a[i]=i;
b[i]=n-i;
}
q.parallel_for(n,[=](auto &i){
c[i]=a[i]+b[i];
}).wait();
for(i=0;i<n;i++){
std::cout<<c[i]<<std::endl;
}
free(a,q);
free(b,q);
free(c,q);
return 0;
}当我编译它时,我会得到以下错误:
warning: parentheses were disambiguated as redundant parentheses around declaration of variable named 'n' [-Wvexing-parse]
range<1>(n);
^~~
vec_add.cpp:11:1: note: add enclosing parentheses to perform a function-style cast
range<1>(n);
^
( )
vec_add.cpp:11:9: note: remove parentheses to silence this warning
range<1>(n);
^ ~
vec_add.cpp:11:10: error: redefinition of 'n' with a different type: 'range<1>' vs 'int'
range<1>(n);
^
vec_add.cpp:8:5: note: previous definition is here
int n=100;
^
1 warning and 1 error generated.如何修复此错误?
发布于 2021-11-03 10:53:18
错误:用不同类型重新定义“n”:'range<1>‘vs 'int’
在同一个作用域中有两个同名的变量会给编译器造成混乱,所以这可能是您所得到的错误的原因。您可以尝试在全局范围内定义n的值,比如例如:#define N 100,在本例中,set
range<1>(n);至
range<1> (N);并在你的代码中使用。
如果要在本地声明大小,则将另一个变量(r)赋值为
range<1> r (n);现在,您可以将'r‘变量作为参数直接传递给parallel_for。
https://stackoverflow.com/questions/69723008
复制相似问题