CUDA编程模型之内存管理
2018-06-18 03:49:35来源:未知 阅读 ()
CUDA编程模型假设系统是由一个主机和一个设备组成的,而且各自拥有独立的内存。
主机:CPU及其内存(主机内存),主机内存中的变量名以h_为前缀,主机代码按照ANSI C标准进行编写
设备:GPU及其内存(设备内存),设备内存中的变量名以d_为前缀,设备代码使用CUDA C标准进行编写
一个典型的CUDA程序实现流程:
1.把数据从CPU内存拷贝到GPU内存
- 在CPU上申请内存:float *h_A;
h_A=(float*)malloc(nBytes);
- 在GPU上申请内存:float *d_A;
cudaMalloc((float**)&d_A,nBytes);
- 数据传输:cudaMemcpy(d_A,h_A,nBytes,cudaMemcpyHostToDevice);
2.调用核函数对存储在GPU内存中的数据进行操作
3.将数据从GPU内存传送回到CPU内存
- 数据传输:cudaMemcpy(h_C,d_C,nBytes,cudaMemcpyDeviceToHost);
- 释放GPU内存:cudaFree(d_A);
- 释放CPU内存:free(h_A);
说明:
1.GPU内存分配:cudaMalloc函数
函数原型:cudaError_t cudaMalloc(void** devPtr, size_t size)
该函数负责向设备分配一定字节的线性内存,并以devPtr的形式返回指向所分配内存的指针。
2.主机和设备之间的数据传输:cudaMemcpy函数
函数原型:cudaError_t cudaMemcpy(void* dst, const void* src, size_t count, cudaMemcpyKind kind)
该函数以同步方式执行,从src指向的源存储区复制一定数量的字节到dst指向的目标存储区。复制方向由kind指定。
kind有四种选择:cudaMemcpyHostToHost、cudaMemcpyHostToDevice、cudaMemcpyDeviceToHost、cudaMemcpyDeviceToDevice
如果GPU内存分配成功,函数返回cudaSuccess;否则返回cudaErrorMemoryAllocation
可以使用CUDA运行时函数将错误代码转化为可读的错误信息:char* cudaGetErrorString(cudaError_t error)
3.释放GPU内存:cudaFree函数
函数原型:cudaError_t cudaFree(void* devPtr)
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:链接器做了什么?
- 生产者与消费者模型-有界缓冲区 2020-04-29
- C代做 C++代做 C++编程代做 C++程序代做 2020-04-29
- 第七章 2.泛型编程(模板) 2020-04-04
- linux环境下的时间编程 2020-03-27
- C、C++ 标准输入重定向 & 万能头 - 编程技巧 2020-03-20
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash