最简单的cuda程序
需要注意的是,最简单的cuda代码中也使用了一些通用模式:
- ·调用cudaMalloc()在设备上为三个数组分配内存:在其中两个数组(dev_a和dev_b)中包含了输入值,而在数组dev_c中包含了计算结果。·
- 为了避免内存泄露,在使用完GPU内存后通过cudaFree(O释放它们。·
- 通过cudaMemcpy()将输人数据复制到设备中,同时指定参数cudaMemcpyHostToDevice,在计算完成后,将计算结果通过参数cudaMemcpyDeviceToHost复制回主机。·
- 通过尖括号语法,在主机代码main()中执行add()中的设备代码。
1 #include "cuda_runtime.h" 2 #include "device_launch_parameters.h" 3 4 #include <stdio.h> 5 #include "book.h" 6 7 __global__ void addKernel(const int a, const int b, int *c) 8 { 9 *c = a + b; 10 } 11 12 void testSaclarAdd() { 13 int c; 14 int* dev_c; 15 HANDLE_ERROR(cudaMalloc((void**)&dev_c, sizeof(int))); 16 addKernel << <1, 1 >> > (2, 7, dev_c); 17 HANDLE_ERROR(cudaMemcpy(&c, dev_c, sizeof(int), cudaMemcpyDeviceToHost)); 18 printf("2+7=%d\n", c); 19 cudaFree(dev_c); 20 } 21 22 int main(){ 23 testScalarAdd(); 24 return 0; 25 }
这个最简单的cuda代码实现了整数相加,包括4个步骤
(1)在device上开辟内存空间
(2)调用kernel函数
(3)把计算结果传回host
(4)释放device上的内存
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具