最简单的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上的内存

posted @   Oliver2022  阅读(274)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示