-1

我是 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.

如何修复此错误?

4

1 回答 1

0

错误:使用不同类型重新定义“n”:“range<1>”与“int”

在同一范围内具有相同名称的两个变量会给编译器造成混淆,因此这可能是您遇到错误的原因。您可以尝试在全局范围内定义n的值,例如:#define N 100在这种情况下,设置

range<1>(n);

range<1> (N);

并在您的代码中使用它。

如果要在本地声明大小,则将另一个变量 (r) 分配给范围

range<1> r (n);

现在您可以直接将“r”变量作为参数传递给parallel_for。

于 2021-11-03T10:53:18.543 回答