device
全局内存是GPU中最大,延迟最高但是最常使用的内存。一个全局内存变量可以被静态声明。修饰符为__device__
静态变量使用例程
#include <stdio.h>
#include <cuda_runtime.h>
#include <sys/time.h>
__device__ float devData;
__global__ void testStaticDev(){
printf("Data in Device:%f \n",devData);
devData += 2.0f;
}
int main(int argc,char ** argv){
float tmp = 2.0f;
cudaMemcpyToSymbol(devData,&tmp,sizeof(float));//从主机端向设备内存中复制数据
testStaticDev<<<1,1>>>();
cudaMemcpyFromSymbol(&tmp,devData,sizeof(float));//从设备中复制到主机端
printf("Data after changing in Device:%f \n",tmp);
cudaDeviceReset();
return 0;
}
使用如下方法
无法给devData赋值,因为在主机端的设备变量devData仅仅是一个在GPU上的表示位置的物理符号。我们可以通过如下的方法获取devData的地址。
所以,也可以用如下的方法进行赋值:
固定内存可以简单的通过指针直接访问。