当前位置:首页 > 科技  > 软件

厉害,美国人又搞了一个垄断的生态系统

来源: 责编: 时间:2024-01-22 17:25:34 341观看
导读去年AIGC大火,程序员都把注意力放在了最上层,而忽略了提供算力的最底层:GPU。不过这也正常,就像很少人直接针对CPU编程一样,直接针对GPU编程的人也不多。但是了解一下GPU编程,绝对大有好处。今天先聊聊GPU编程,然后再聊聊一

去年AIGC大火,程序员都把注意力放在了最上层,而忽略了提供算力的最底层:GPU。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

不过这也正常,就像很少人直接针对CPU编程一样,直接针对GPU编程的人也不多。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

但是了解一下GPU编程,绝对大有好处。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

今天先聊聊GPU编程,然后再聊聊一个CUDA这个新的生态系统,对编程细节不感兴趣的可以直接拉到最后。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

对了,文末还有免费送书的福利。x5U28资讯网——每日最新资讯28at.com

CPU vs GPU

x5U28资讯网——每日最新资讯28at.com

图片图片x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

CPU的设计目标是“尽可能地降低延时”x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

(1) 强大的ALU(算术逻辑单元),可以在很少的时钟周期内完成算术运算。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

(2) 巨大的Cache:加快指令和数据的存取速度x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

(3) 复杂的逻辑控制:当程序员有多个分支,它可以通过分支预测来降低延时。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

GPU的目标是:“尽可能地实现大吞吐量”x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

(1) ALU 简单,但是超级多x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

(2) Cache很小x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

(3) 逻辑控制简单。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

如果把GPU的单个核心比作小学生,那一个CPU的核心就是老教授。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

如果要做微积分,几千个小学生也比如上老教授。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

但是,如果只是100以内的加减法,几千个小学生同时做(并行计算),那效率肯定要比老教授高。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

老教授处理复杂任务的能力是碾压小学生的,但是对于没有那么复杂的任务,还是顶不住人多。x5U28资讯网——每日最新资讯28at.com

把串行改成并行

x5U28资讯网——每日最新资讯28at.com

我们用一个例子来展示一下:x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

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;}

x5U28资讯网——每日最新资讯28at.com

这段简单的代码大家都能看懂,CPU在执行时会做一个循环,然后把两个数组对应的元素进行相加,结果存到数组c中。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

由于是顺序处理的,如果数组非常大,就会比较耗时。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

如何把它改成并行计算呢?x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

数组中有10个元素,我们可以创建10个线程,把每个线程扔到一个GPU核心中去运行。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

图片图片x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

程序员该怎么写代码,来表达这个想法呢?x5U28资讯网——每日最新资讯28at.com

CUDA

x5U28资讯网——每日最新资讯28at.com

英伟达的CUDA是一个并行计算平台,可以让程序员可以通过C、C++等语言在GPU上并行执行代码。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

图片图片x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

在CUDA中,把CPU所在的部分叫做Host,GPU称为Device,它们之间通过总线相连。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

图片图片x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

对于之前的例子,CUDA代码是这样的:x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

__global__ void vectorAdd(int* a, int* b, int* c){    int i = threadIdx.x;    c[i] = a[i] + b[i];    return;}

x5U28资讯网——每日最新资讯28at.com

估计大部分小伙伴都能猜出来这段代码的含义。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

a,b分别是两个要想加的数组,c用来保存结果。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

__global__应该是个指示符,表示这段代码是个“内核函数”,要被放到GPU上来执行。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

threadIdx是个什么东西?x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

似乎是个线程的索引,找到这个线程的index以后,取出a,b中index对应的值,加起来放到c中。例如index是0,那就取出a[0],b[0]加起来,放到c[0]中,这就实现了我们之前的想法。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

值得注意的是,这里的a,b,c不是Host的内存,而是Device(GPU)的内存,所以我们得把原始的数据复制到GPU中。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

1. 先在GPU中分配内存x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

int* cudaA = 0;int* cudaB = 0;int* cudaC = 0;// 使用cudaMalloc在GPU中分配内存cudaMalloc(&cudaA,sizeof(a));cudaMalloc(&cudaB,sizeof(b));cudaMalloc(&cudaC,sizeof(c));

x5U28资讯网——每日最新资讯28at.com

2.然后把原始数据从Host复制到Device(即GPU)中x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

//注意第4个参数,是从Host 到 DevicecudaMemcpy(cudaA, a, sizeof(a), cudaMemcpyHostToDevice);cudaMemcpy(cudaB, b, sizeof(b), cudaMemcpyHostToDevice);

x5U28资讯网——每日最新资讯28at.com

3. 调用内核函数x5U28资讯网——每日最新资讯28at.com

vectorAdd <<<1, sizeof(a) / sizeof(a[0])>>> (cudaA, cudaB, cudaC);

x5U28资讯网——每日最新资讯28at.com

调用vectorAdd的时候,被<<< >>>包围起来的部分是配置参数,这里指定了一组10个线程(数组长度为10)。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

这10个线程会被放到10个GPU核心中去执行,他们的索引是从0到9。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

所以在vectorAdd函数中可以通过threadIdx.x引用到当前线程的索引,例如9 , 那就知道当前线程要做的事情:把a[9]和b[9]加起来,放到c[9]中。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

这样10个GPU核心就是同时执行10次加法,速度飞快。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

4. 把结果复制回Host

x5U28资讯网——每日最新资讯28at.com

// 注意第4个参数,是从Device 到 HostcudaMemcpy(c, cudaC, sizeof(c), cudaMemcpyDeviceToHost);

x5U28资讯网——每日最新资讯28at.com

小伙伴们肯定已经意识到了,这里边有个核心的概念:Thread(线程),每个线程都会被映射到一个GPU核心去执行。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

图片图片x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

多个Thread可以组成一个块(Block),被映射到多个核心x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

图片图片x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

多个Block又形成一个Grid,被映射到整个CPUx5U28资讯网——每日最新资讯28at.com

图片图片x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

在启动内核函数的时候,需要指定配置参数,它的格式是:x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

kenerl_function<<<grid_size,block_size>>>x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

就是告诉CUDA,这次运行的grid的size和block的size,在我们的例子中vectorAdd<<<1,10>>>表示的意思是:Grid中只有一个block,这个block中有10个Thread。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

Grid和Block都可以是1维,2维,3维的,这里就不详细描述了。x5U28资讯网——每日最新资讯28at.com

CUDA生态

x5U28资讯网——每日最新资讯28at.com

前面介绍的是CUDA的冰山一角,希望小伙伴们对CUDA,对GPU编程有个初步认识。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

大家也肯定意识到了上面很多cuda开头的各种函数,上层的应用一旦开始使用它们,基本上就和英伟达的CUDA生态绑定了。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

图片图片x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

在CUDA发展过程中,一个斯坦福的博士生起到了关键作用。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

1999年,Nvidia发布了一块叫GeForce的显卡,它的图形处理性能非常出色,非常适合《雷神之锤》游戏。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

这时候,斯坦福博士Ian Buck出场了,他疯狂地将32块GeForce显卡连接在一起,再加上8台投影仪,实现了8K分辨率的《雷神之锤》。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

玩归玩,他还研究了一下GeForce显卡自带的一个非常原始的编程工具,随后在DARPA的资助下,实现了在GPU上进行通用并行编程。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

随后他便加入了英伟达,负责英伟达超级计算包(就是CUDA)的开发。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

英伟达的黄教主认为超级计算在未来必将平民化,英伟达要通过CUDA成为领先者。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

CUDA的软硬件开发耗资巨大,当2006年正式推出的时候,科技界反应冷淡,认为英伟达瞄准了一个小众的市场,数十亿美元投资有可能打水漂。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

英伟达为了推销CUDA,在金融、石油勘探、分子生物等方面孜孜不倦地寻找客户,但都没有起色。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

CUDA发展艰难,没有关键应用,缺少重要客户支持。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

2008年底,英伟达的股票下跌了70%。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

转折点出现在2012年,Hinton团队仅用4个GTX580显卡,利用CUDA技术进行训练出的神经网络,获得了ImageNet比赛的第一名!x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

机器学习,深度学习彻底被引爆了。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

黄仁勋的“赌注”成功了,他在一封邮件中说道:....我们不在是一家GPU公司了,我们是一家AI公司.....x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

英伟达开始和Google,Facebook等公司合作,推广开源AI框架TensorFlow、PyTorch,当然,它们都构建在CUDA之上。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

图片图片x5U28资讯网——每日最新资讯28at.com

CUDA彻底统治了AI市场,随后CUDA又发力机器人,自动驾驶等领域。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

2023年,以ChatGPT为代表的大模型爆火,英伟达的GPU供不应求,被抢爆了,GPU和CUDA一起攻城掠地,无人可挡。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

经过17年的发展,继Windows+Intel , Android + ARM之后,又一个庞大的生态形成了。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

这个生态的厉害之处在于:它牢牢占据了软件和硬件的结合之处,CUDA的设计基本就是英伟达硬件形态的抽象。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

如果其他GPU厂商想兼容CUDA,就得跟随英伟达的硬件路线,亦步亦趋,相当难受。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

如果想重建一套新的生态和API,就会遇到那个老大难问题:软件生态。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

英伟达开发了世界上性能最强的GPU,又有着CUDA这个宽广的护城河,照理说,国内厂商是没啥办法的,不用也得用。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

但是美国政府送上了神助攻,继A100及H100,连中国专供的“阉割版”A800和H800也不让卖了,禁令甚至波及到了消费级的4090。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

原来大家都用英伟达,根本看不上国内产品,现在好了,不得不选国内GPU,比如华为昇腾。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

虽然性能差一些,编程接口难用一些,但有总比没有强。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

去年11月,百度已经下令将“文心一言”使用的芯片,改向华为芯片,并且为200台服务器购买了1600颗华为昇腾910B AI芯片。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

360也表示,采购了华为1,000片左右的AI芯片,和华为合作将AI框架移植到华为昇腾910B的AI芯片。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

在实际应用中不断反馈、改善,国产的人工智能芯片肯定会越来越好。x5U28资讯网——每日最新资讯28at.com

x5U28资讯网——每日最新资讯28at.com

这么发展下去,国内肯定会建立起自己的GPU生态,也会有自己的CUDA。x5U28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-66202-0.html厉害,美国人又搞了一个垄断的生态系统

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 在实际项目中如何评估数据库的实际需求?

下一篇: CSS 滚动驱动动画实现圆弧滚动条

标签:
  • 热门焦点
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 5月iOS设备好评榜:iPhone 14仅排第43?

    来到新的一月,安兔兔的各个榜单又重新汇总了数据,像安卓阵营的榜单都有着比较大的变动,不过iOS由于设备的更新换代并没有那么快,所以相对来说变化并不大,特别是iOS好评榜,老款设
  • K6:面向开发人员的现代负载测试工具

    K6 是一个开源负载测试工具,可以轻松编写、运行和分析性能测试。它建立在 Go 和 JavaScript 之上,它被设计为功能强大、可扩展且易于使用。k6 可用于测试各种应用程序,包括 Web
  • 小红书1周涨粉49W+,我总结了小白可以用的N条涨粉笔记

    作者:黄河懂运营一条性教育视频,被54万人&ldquo;珍藏&rdquo;是什么体验?最近,情感博主@公主是用鲜花做的,火了!仅仅凭借一条视频,光小红书就有超过128万人,为她疯狂点赞!更疯狂的是,这
  • 破圈是B站头上的紧箍咒

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之每年的暑期档都少不了瞄准追剧女孩们的古偶剧集,2021年有优酷的《山河令》,2022年有爱奇艺的《苍兰诀》,今年却轮到小破站抓住了追
  • 2天涨粉255万,又一赛道在抖音爆火

    来源:运营研究社作者 | 张知白编辑 | 杨佩汶设计 | 晏谈梦洁这个暑期,旅游赛道彻底火了:有的「地方」火了&mdash;&mdash;贵州村超旅游收入 1 个月超过 12 亿;有的「博主」火了&m
  • 造车两年股价跌六成,小米的估值逻辑变了吗?

    如果从小米官宣造车后的首个交易日起持有小米集团的股票,那么截至2023年上半年最后一个交易日,投资者将浮亏59.16%,同区间的恒生科技指数跌幅为52.78%
  • iQOO Neo8系列今日官宣:首发天玑9200+ 全球安卓最强芯!

    在昨日举行的的联发科新一代旗舰芯片天玑9200+的发布会上,iQOO官方也正式宣布,全新的iQOO Neo8系列新品将全球首发搭载这款当前性能最强大的移动平台
  • 北京:科技教育体验基地开始登记

      北京“科技馆之城”科技教育体验基地登记和认证工作日前启动。首批北京科技教育体验基地拟于2023年全国科普日期间挂牌,后续还将开展常态化登记。  北京科技教育体验基
Top