gpt4 book ai didi

c++ - cudaMemcpyToSymbol 使用或不使用字符串

转载 作者:太空狗 更新时间:2023-10-29 19:44:04 26 4
gpt4 key购买 nike

我试图以这种方式将结构复制到常量内存:

struct Foo {
int a, b, c;
};

__constant__ Foo cData;

int main() {
Foo hData = {1, 2, 3};
cudaMemcpyToSymbol(cData, &hData, sizeof(Foo));
// ...
}

这很好用,在我的内核中我可以直接访问常量数据:

__global__ void kernel() {
printf("Data is: %d %d %d\n", cData.a, cData.b, cData.c); // 1 2 3
}

但后来我尝试使用 const char * 作为符号名称,但事情停止了:

cudaMemcpyToSymbol("cData", &hData, sizeof(Foo)); // prints 0 0 0

我以为两个版本很相似,但看来我错了。

发生了什么事?

编辑:我想用 cudaGetSymbolAddress 报告同样的行为,如果没有使用 const char *,它对我有用:

__constant__ int someData[10];
__constant__ int *ptrToData;

int *dataPosition;
cudaGetSymbolAddress((void **)&dataPosition, someData); // Works
// cudaGetSymbolAddress((void **)&dataPosition, "someData"); // Do not work
cudaMemcpyToSymbol(ptrToData, &dataPosition, sizeof(int *));

最佳答案

从 CUDA 5 开始,不再支持使用字符串作为符号名称。这包含在 CUDA 5 发行说明中 here

•The use of a character string to indicate a device symbol, which was possible with certain API functions, is no longer supported. Instead, the symbol should be used directly.

其中一个原因与启用真正的设备链接器有关,这是 CUDA 5 中的新功能。

关于c++ - cudaMemcpyToSymbol 使用或不使用字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15435880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com