在 DPC++ 中使用范围函数时出错
Error facing with range function in DPC++
我是 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.
如何解决这个错误?
error: redefinition of 'n' with a different type: 'range<1>' vs 'int'
同一范围内的两个同名变量会给编译器造成混淆,因此这可能是您收到错误的原因。您可以尝试在全局范围内定义 n 的值,例如:#define N 100
在这种情况下,set
range<1>(n);
至
range<1> (N);
并在您的代码中使用它。
如果您想在本地声明大小,则将另一个变量 (r) 分配给范围
range<1> r (n);
现在您可以直接将 'r' 变量作为参数传递给 parallel_for。
我是 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.
如何解决这个错误?
error: redefinition of 'n' with a different type: 'range<1>' vs 'int'
同一范围内的两个同名变量会给编译器造成混淆,因此这可能是您收到错误的原因。您可以尝试在全局范围内定义 n 的值,例如:#define N 100
在这种情况下,set
range<1>(n);
至
range<1> (N);
并在您的代码中使用它。
如果您想在本地声明大小,则将另一个变量 (r) 分配给范围
range<1> r (n);
现在您可以直接将 'r' 变量作为参数传递给 parallel_for。