前言
最近在学习linux环境下的CUDA编程,力求实现AI算法加速应用,整理些许笔记如下,代码经过调试,可以跑通。基础环境为mac本地,通过vscode远程控制ubuntu的开发板。
1 CUDA开发环境
环境配置
- Mac
检查clang,检查所使用的mac是否自带了clang,敲命令行:
clang -v // or clang --version
MacOS为了照顾用户习惯,也可以执行gcc命令,但MacOS10.12以后系统不自带gcc。
如果没有的话则去安装,敲命令行:
xcode-select --install
按照步骤安装完成
- Linux
gcc
C++环境配置与测试
打开VS Code按快捷键 shift+command+X ,并搜索C++
安装Code Runner
创建一个demo文件
新建一个C文件(文件后缀为.c)并保存至文件夹。
/* 文件hello.c */
#include <stdio.h>
int main()
{
printf("hello world");
return 0;
}
点击打开.c文件
点击IDE上方菜单,Run -> Start Debugging -> 选择C/C++: clang build active file 得到 launch.json
点击IDE上方菜单,Terminal-> Configure Tasks-> 选择 C/C++:gcc build active file 得到 tasks.json
Run Code ,终端会输出Hello World
CUDA环境配置与测试
使用代码
必须保存为.cu扩展名
#include <iostream>
#include <stdio.h>
__global__ void myfirstkernel (void) {
// 内核调用,在主机程序中运行设备代码
}
int main (void) {
myfirstkernel << < 1, 1>> >();
printf( "Hello, CUDA!\n" );
return 0;
}
命令行输入
编译 nvcc filename.cu -o filename (-o后面是可执行文件名)。
执行 sudo ./filename
2 使用CUDA C进行编程
2.1 CUDA程序结构
- 算术逻辑单元(ALU)
- 可以将GPU看作多个块(Block)的组合,每个块可以执行多个线程。每个块绑定到GPU上的不同流多处理器。来自同一块的线程可以相互通信。
- CUDA C程序的开发步骤如下:
1)为主机和设备显存中的数据分配内存。
2)将数据从主机内存复制到设备显存。
3)通过指定并行度来启动内核。
4)所有线程完成后,将数据从设备显存复制回主机内存。
5)释放主机和设备上使用的所有内存。 - 主机代码是由标准C编译器编译的,设备代码是由NVIDIA GPU编译器来执行。
- 使用ANSI C关键字和CUDA扩展关键字编写的设备代码称为内核。它是主机代码(Host Code)通过内核调用的方式来启动的。简单地说,内核调用的含义是我们从主机代码启动设备代码。
- 内核调用通常会生成大量的块(Block)和线程(Thread)来在GPU上并行地处理数据。
- 作为参数传递给内核的指针应该仅指向设备显存。
- 每个块在流多处理器上运行,一个块中的线程可以通过共享内存(Shared Memory)彼此通信。程序员无法选定哪个流多处理器将执行特定的块,也无法选定块和线程以何种顺序执行。
- 使用设备指针从设备函数中读取和写入设备显存,并且应该使用主机指针从主机函数中读取和写入主机内存。
- 双值相加代码:
#include <iostream>
#include <cuda.h>
#include <cuda_runtime.h>
#include <stdio.h>
//Definition of kernel function to add two variables
__global__ void gpuAdd(int d_a, int d_b, int *d_c) {
*d_c = d_a + d_b;
}
//main function
int main(void) {
//Defining host variable to store answer
int h_c;
//Defining device pointer
int *d_c;
//Allocating memory for device pointer
cudaMalloc((void**)&d_c, sizeof(int));<

本文介绍了如何在Mac和Linux环境下配置CUDA开发环境,包括C/C++环境和CUDA环境的设置,以及CUDA编程的基本概念、内核调用和内存管理。通过实例演示了双值相加和GPU加速计算,适合初学者理解CUDA在AI中的应用。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



