首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DPC++中range函数的误差分析

DPC++中range函数的误差分析
EN

Stack Overflow用户
提问于 2021-10-26 12:19:50
回答 1查看 142关注 0票数 0

我对Sycl/DPC++语言很陌生。我使用统一共享内存(USM)编写了一个向量加法代码示例:

代码语言:javascript
复制
#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;
}

当我编译它时,我会得到以下错误:

代码语言:javascript
复制
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.

如何修复此错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-03 10:53:18

错误:用不同类型重新定义“n”:'range<1>‘vs 'int’

在同一个作用域中有两个同名的变量会给编译器造成混乱,所以这可能是您所得到的错误的原因。您可以尝试在全局范围内定义n的值,比如例如:#define N 100,在本例中,set

代码语言:javascript
复制
range<1>(n);

代码语言:javascript
复制
range<1> (N);

并在你的代码中使用。

如果要在本地声明大小,则将另一个变量(r)赋值为

代码语言:javascript
复制
range<1> r (n);

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69723008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档