Skip to content

Commit 579cc0c

Browse files
committed
add modern cuda
1 parent b9af162 commit 579cc0c

File tree

12 files changed

+19
-3
lines changed

12 files changed

+19
-3
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@ __pycache__/
44
node_modules/
55
package.json
66
package-lock.json
7+
.cache/
78
*.pdf
89
*.o

cuda/moderncuda/README.md renamed to cudaguide/1_moderncuda/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
- https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html
66
- https://www.cs.sfu.ca/~ashriram/Courses/CS431/assets/lectures/Part8/GPU1.pdf
7+
- https://developer.nvidia.com/gpugems/gpugems/contributors
78

89
## 配置 CUDA 开发环境
910

@@ -19,6 +20,8 @@ WSL 用户要注意,WSL 环境和真正的 Linux 相差甚远。很多 Linux
1920

2021
Ubuntu 用户可能考虑卸载 Ubuntu,因为 Ubuntu 源中的版本永不更新。想要安装新出的软件都非常困难,基本只能安装到五六年前的古董软件,要么只能从网上下 deb 包,和 Wendous 一个软耸样。所有官方 apt 源中包的版本从 Ubuntu 发布那一天就定死了,永远不会更新了。这是为了起夜级服务器安全稳定的需要,对于个人电脑而言却只是白白阻碍我们学习,Arch Linux 这样的滚动更新的发行版才更适合个人桌面用户。
2122

23+
> {{ icon.tip }} 我使用的 CUDA / C++ 开发环境为 [小彭老师 vimrc 整合包](https://github.com/archibate/vimrc),你也可以用其他支持 CUDA 的 IDE。
24+
2225
### 安装 NVIDIA 驱动
2326

2427
首先确保你安装了 NVIDIA 最新驱动:
File renamed without changes.
File renamed without changes.

cuda/moderncuda/main.cu renamed to cudaguide/1_moderncuda/main.cu

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include <cuda_runtime.h>
22
#include <nvfunctional>
3-
#include "cudapp.cuh"
3+
#include "cudapp.cuh" // 小彭老师现代 CUDA 框架,更符合现代 C++ 风格,减少官方 C 风格接口的繁琐
44

55
using namespace cudapp;
66

@@ -10,12 +10,16 @@ __global__ void kernel(int x) {
1010
}
1111

1212
int main() {
13+
// 启动内核的3种方式
14+
// 1. 三箭头语法糖(常用)
1315
int x = 42;
1416
kernel<<<3, 4, 0, 0>>>(x);
1517

18+
// 2. cudaLaunchKernel
1619
void *args[] = {&x};
17-
CHECK_CUDA(cudaLaunchKernel((const void *)kernel, dim3(3), dim3(4), args, 0, 0));
20+
CHECK_CUDA(cudaLaunchKernel(kernel, dim3(3), dim3(4), args, 0, 0));
1821

22+
// 3. cudaLaunchKernelEx
1923
cudaLaunchConfig_t cfg{};
2024
cfg.blockDim = dim3(3);
2125
cfg.gridDim = dim3(4);
@@ -26,9 +30,17 @@ int main() {
2630
CHECK_CUDA(cudaLaunchKernelEx(&cfg, kernel, x));
2731

2832
const char *name;
29-
CHECK_CUDA(cudaFuncGetName(&name, (const void *)kernel));
33+
CHECK_CUDA(cudaFuncGetName(&name, kernel));
3034
printf("内核名字:%s\n", name);
3135

36+
// 1. 强制同步:等待此前启动过的所有内核执行完成
37+
CHECK_CUDA(cudaDeviceSynchronize());
38+
39+
// 2. 仅同步 0 号流(null-stream)
40+
CHECK_CUDA(cudaStreamSynchronize(0));
41+
42+
// 3. 仅同步 0 号流,但使用小彭老师现代 CUDA 框架
3243
CudaStream::nullStream().join();
44+
3345
return 0;
3446
}

0 commit comments

Comments
 (0)