【问题标题】:Init GPU's single variable from CPU before kernel call在内核调用之前从 CPU 初始化 GPU 的单个变量
【发布时间】:2013-02-01 07:18:23
【问题描述】:
在我的应用程序中,我在 GPU 的内存 (bool isBoardReady) 中有 bool 类型的变量,我需要在调用 kernel 之前对其进行初始化,然后在内核完成后取回值,所以我的问题是
如何从 CPU 初始化 GPU 内存中的单个变量(int, bool , double 等)?
内核调用结束后如何获取该变量的值
提前致谢
【问题讨论】:
标签:
variables
cuda
initialization
cpu
gpu
【解决方案1】:
函数cudaMemcpyToSymbol 和cudaMemcpyFromSymbol 用于从主机访问全局设备变量。以下是如何实现此目的的示例:
#include <iostream>
#include <cuda_runtime.h>
__device__ bool isBoardReady;
__global__ void kernel()
{
isBoardReady = true;
}
int main()
{
bool isBoardReady_Host = false;
std::cout<<"Before = "<<isBoardReady_Host<<std::endl;
cudaMemcpyToSymbol(isBoardReady,&isBoardReady_Host,sizeof(bool),0,cudaMemcpyHostToDevice);
kernel<<<1,1>>>();
cudaMemcpyFromSymbol(&isBoardReady_Host,isBoardReady,sizeof(bool),0,cudaMemcpyDeviceToHost);
std::cout<<"After = "<<isBoardReady_Host<<std::endl;
return 0;
}