【发布时间】:2013-11-07 21:38:33
【问题描述】:
我正在尝试将数据结构从主机移动到 Tesla C1060(计算 1.3)上的常量内存。具有以下功能:
//mem.cu
#include "kernel.cuh"
int InitDCMem(SimuationStruct *sim)
{
SimParamGPU h_simparam;
h_simparam.na = sim->det.na;
h_simparam.nz = sim->det.nz;
h_simparam.nr = sim->det.nr;
cudaMemcpyToSymbol(d_simparam, &h_simparam, sizeof(SimParamGPU));
}
数据结构(在头文件中):
//kernel.cuh
typedef struct __align__(16)
{
int na;
int nz;
int nr;
} SimParamGPU;
__constant__ SimParamGPU d_simparam;
问题是这些值似乎没有被复制到 GPU 中的常量内存中。
我是否需要像cudaMemcpyToSymbol do not copy data 中所述在\\mem.cu 上重新声明__constant__。
我应该在某处使用extern 吗?
没有错误,值始终设置为 0。
【问题讨论】:
-
你确定你可以编译你的代码吗?
cudaMemcpyToSymbol()您使用的语法似乎不正确。看看here。 -
好吧,因为我的计算能力为 1.3,所以编译单元必须是
__constant__的一个。我正在寻求解决该限制的方法,并且......更重要的是......如果这可能是我看到寄存器上的值等于 0 而这些值在主机端正确设置的原因。 -
Example 可能的解决方案。在 Nsight 中如何配置 Generate Relocatable Device Code 选项?显然我不能,因为我的计算能力是 1.3
-
@mrei Nsight Eclipse 版在您选中 Build/Settings 项目属性页面上的“单独编译”时启用 Generate Relocatable Device Code。
标签: eclipse cuda memcpy nsight tesla