CUDA 5.5 cudaMemcpyToSymbol,__constant__和超出范围的错误 [英] CUDA 5.5 cudaMemcpyToSymbol, __constant__ and out of scope error

查看:133
本文介绍了CUDA 5.5 cudaMemcpyToSymbol,__constant__和超出范围的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试编译一个CUDA示例,它具有:



cuda.cu:

  __ constant__ unsigned VERTICES; 
__constant__ unsigned TRIANGLES;

和main.cpp中的相应代码;

  cudaMemcpyToSymbol(VERTICES,& verticesNo,sizeof(int)); 
cudaMemcpyToSymbol(TRIANGLES,& trianglesNo,sizeof(int));

如何避免编译main.cpp时出现VERTICES未在此范围内声明错误? p>

TIA。



干杯,

解决方案

CUDA __ constant __ 变量具有文件范围链接。这意味着 cudaMemcpyToSymbol 必须在定义 __ constant __ 变量的相同.cu文件中。



您可以向.cu文件添加包装器函数,并从.cpp文件中调用此函数。



cuda.cu:

  __ constant__ unsigned VERTICES; 
__constant__ unsigned TRIANGLES;

void wrapper_fn(unsigned * verticesNo,unsigned * trianglesNo)
{
cudaMemcpyToSymbol(VERTICES,verticesNo,sizeof(unsigned));
cudaMemcpyToSymbol(TRIANGLES,trianglesNo,sizeof(unsigned));
}

然后只调用 wrapper_fn 在您的main.cpp。


I'm trying to compile a CUDA example which has;

cuda.cu:

__constant__ unsigned VERTICES;
__constant__ unsigned TRIANGLES;

and the corresponding code in main.cpp;

cudaMemcpyToSymbol(VERTICES, &verticesNo, sizeof(int));
cudaMemcpyToSymbol(TRIANGLES, &trianglesNo, sizeof(int));

How to avoid "VERTICES not declared in this scope" error when compiling the main.cpp?

TIA.

cheers,

解决方案

CUDA __constant__ variables have a file scope linkage. That means that the cudaMemcpyToSymbol have to be in the same .cu file where the __constant__ variable is defined.

You can add a wrapper function to the .cu file and call this one from your .cpp file.

sample for cuda.cu:

__constant__ unsigned VERTICES;
__constant__ unsigned TRIANGLES;

void wrapper_fn(unsigned *verticesNo, unsigned *trianglesNo)
{
  cudaMemcpyToSymbol(VERTICES, verticesNo, sizeof(unsigned));
  cudaMemcpyToSymbol(TRIANGLES, trianglesNo, sizeof(unsigned));
}

Then only call wrapper_fn in your main.cpp.

这篇关于CUDA 5.5 cudaMemcpyToSymbol,__constant__和超出范围的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆