CUDA 编程系列之三:内存墙与分块(tiling)的诞生
一张 H100 显卡的纸面算力是 66.9 TFLOPS(FP32)。 现在请它跑一个最简单的程序——向量加法 C[i] = A[i] + B[i]——然后测量它实际达到了多少 TFLOPS。 你会得到一个让人怀疑人生的数字:个位数都不到。用直觉说,就是这张卡只发挥了百分之几的力气。 ...
一张 H100 显卡的纸面算力是 66.9 TFLOPS(FP32)。 现在请它跑一个最简单的程序——向量加法 C[i] = A[i] + B[i]——然后测量它实际达到了多少 TFLOPS。 你会得到一个让人怀疑人生的数字:个位数都不到。用直觉说,就是这张卡只发挥了百分之几的力气。 ...
当你写下这行代码: myKernel<<<1000, 256>>>(...); 你其实是在说:“给我 25.6 万个线程,去把这件事干了。” 问题来了:这 25.6 万个线程,具体在哪里跑?谁决定谁先谁后?有多少个是同时真的在跑的? ...
写 CUDA 的人,遇到的第一个真正意义上的门槛,往往不是语法,而是空间感。 CPU 上写循环写惯了,你的脑子里是一条线:for (int i = 0; i < n; i++),从头到尾,一件事接一件事。而 CUDA 要求你换一副眼镜:你要把一整个数组,一次性地摊开在几千、几万个执行单元面前,然后回答一个问题—— ...