合作机构:阿里云 / 腾讯云 / 亚马逊云 / DreamHost / NameSilo / INWX / GODADDY / 百度统计
去年AIGC大火,程序员都把注意力放在了最上层,而忽略了提供算力的最底层:GPU。
不过这也正常,就像很少人直接针对CPU编程一样,直接针对GPU编程的人也不多。
但是了解一下GPU编程,绝对大有好处。
今天先聊聊GPU编程,然后再聊聊一个CUDA这个新的生态系统,对编程细节不感兴趣的可以直接拉到最后。
对了,文末还有免费送书的福利。
图片
CPU的设计目标是“尽可能地降低延时”
(1) 强大的ALU(算术逻辑单元),可以在很少的时钟周期内完成算术运算。
(2) 巨大的Cache:加快指令和数据的存取速度
(3) 复杂的逻辑控制:当程序员有多个分支,它可以通过分支预测来降低延时。
GPU的目标是:“尽可能地实现大吞吐量”
(1) ALU 简单,但是超级多
(2) Cache很小
(3) 逻辑控制简单。
如果把GPU的单个核心比作小学生,那一个CPU的核心就是老教授。
如果要做微积分,几千个小学生也比如上老教授。
但是,如果只是100以内的加减法,几千个小学生同时做(并行计算),那效率肯定要比老教授高。
老教授处理复杂任务的能力是碾压小学生的,但是对于没有那么复杂的任务,还是顶不住人多。
我们用一个例子来展示一下:
int a[] = {1,2,3,4,5,6,8,9,10};
int b[] = {11,12,13,14,15,16,17,18,19,20};
int c[10];
int main() {
int N = 10; // Number of elements
for (int i = 0; i < N; i++) {
c[i] = a[i] + b[i];
}
return 0;
}
TOP