- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在同一个问题上看到了很多答案,但从未找到解决方案。只有一些建议在 cudaMemcpyToSymbol(...) 等中使用 char simbol。
我使用来自 cudaMemcpyToSymbol using or not using string 的 100% 工作代码创建了新的 CUDA 项目 (VS2012+CUDA 6.0)
//file: main.cu
#include <stdio.h>
#include <stdlib.h>
#include <cuda.h>
__constant__ float constData[256];
__device__ float devData;
__device__ float* devPointer;
int main(int argc, char **argv)
{
cudaFree(0);
float data[256];
/**>>>>>>>**/ data[0] = 1.0f;
cudaError_t err = cudaMemcpyToSymbol(constData, data, sizeof(data));
printf("Err id: %d, str: %s\n", err, cudaGetErrorString(err));
/**>>>>>>>**/ printf("constData[0]: %f ", constData[0]);
float value = 3.14f;
err = cudaMemcpyToSymbol(devData, &value, sizeof(float));
printf("Err id: %d, str: %s\n", err, cudaGetErrorString(err));
/**>>>>>>>**/ printf("devData: %f ", devData);
float* ptr;
cudaMalloc(&ptr, 256 * sizeof(float));
err = cudaMemcpyToSymbol(devPointer, &ptr, sizeof(ptr));
printf("Err id: %d, str: %s\n", err, cudaGetErrorString(err));
cudaFree(ptr);
return EXIT_SUCCESS;
}
还有两个 Unresolved 问题:
请给我一些意见,有什么问题吗?
最佳答案
当我编译这段代码时,我收到了 2 条警告:
t481.cu(20): warning: a __constant__ variable "constData" cannot be directly read in a host function
t481.cu(26): warning: a __device__ variable "devData" cannot be directly read in a host function
您不应忽略这些警告。尽管它们是“警告”,但它们代表代码中的重大问题。第 20 行看起来像这样:
/**>>>>>>>**/ printf("constData[0]: %f ", constData[0]);
constData
是一个存在于设备上的变量。您不能在普通主机代码中访问这样的变量(例如将它传递给 printf
)。这是 CUDA 中的一般规则:设备变量不能在普通主机代码中使用,主机变量也不能在普通设备代码中使用。
第 26 行类似。无论如何,这些行对我们来说并没有多大用处,所以让我们摆脱它们。如果要打印第 20 和 26 行的值,则需要在打印之前将这些值复制回主机(例如使用 cudaMemcpyFromSymbol()
)。
除此之外,如果我针对正确的 GPU 架构进行编译,您的程序可以毫无错误地运行。您看到的无效设备符号错误是由于您的设备是 cc1.0 设备,它需要 compute_10, sm_10
代码生成。如果您为另一个(更高)架构编译,您的内核将不会加载,因为设备代码与您的架构不匹配。由于没有匹配的设备代码,静态设备变量,包括您的 __constant__
变量,不会被实例化。因为它们没有实例化,所以符号无效,这是您的程序中出现问题的第一个迹象。
因此您需要针对与您的设备相匹配的 GPU 架构进行编译。
关于c++ - cudaMemcpyToSymbol : zero value in __constant__ variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24770509/
正如其他问题和链接所述,您不能再为此函数使用符号名称。现在这个功能已经消失了,什么时候想要在 cudaMemCpy 上使用它? ?你什么时候想要使用它?什么是权衡或好处? https://docs.n
我想使用 __constant__ 内存,所有内核中的所有线程都可以访问它。 声明是这样的 extern __constant__ float smooth [8 * 1024]; 我正在使用将数据复
我正在尝试复制到常量内存。但是我不能因为我对 cudaMemcpyToSymbol 函数的用法有误解。我正在尝试关注 this 代码如下 __device__ __constant__ double
我试图以这种方式将结构复制到常量内存: struct Foo { int a, b, c; }; __constant__ Foo cData; int main() { Foo hD
这是在 sync_and_check("cudaMemcpyToSymbol") 处抛出 cudaInvalidSymbol 的最小示例,使用 Cuda 编译工具编译,版本 6.5,V6.5.12:
我很确定答案是否定的,但我只是想确认一下,因为我不希望内存泄漏。 我正在使用下面的代码 __constant__ void* VERTEX_NO_CONSTANT_PARAMETER; HANDLE_
我正在编写代码并使用 cudaMemcpyToSymbol 将一些 cudaPitchedPtrs 复制到(每个进程多个)GPU 设备,以便我可以方便地访问一些主机复制的内存。但是,我发现了一个非常奇
我正在使用 pycuda,我想知道是否有与函数 cudaMemcpyToSymbol 等效的函数 我想将一个常量从主机复制到设备,如下所示 import pycuda.driver as cuda i
调用函数时cudaMemcpyToSymbol , 我收到无效值错误 ( cudaErrorInvalidValue )。发生错误的代码是这样的。 __constant__ int c_queryLe
CUDA C 编程指南中的示例代码有问题吗? __device__ float devData; float value = 3.14f; cudaMemcpyToSymbol(devData, &v
我在同一个问题上看到了很多答案,但从未找到解决方案。只有一些建议在 cudaMemcpyToSymbol(...) 等中使用 char simbol。 我使用来自 cudaMemcpyToSymbol
我正在尝试编译一个 CUDA 示例; cuda.cu: __constant__ unsigned VERTICES; __constant__ unsigned TRIANGLES; 以及main.
问题 我已经准备了一个使用常量内存的示例 CUDA 代码。我可以在 cuda 4.2 中成功运行它,但是当我使用 CUDA 5 进行编译时,我得到了 "invalid device symbol"。我
问题 我试图将 int 数组复制到设备的常量内存中,但我不断收到以下错误: [ERROR] 'invalid argument' (11) in 'main.cu' at line '386' 代码
我是一名优秀的程序员,十分优秀!