gpu和cpu区别

GPU的功耗远远超过CPU
Cache, local memory: CPU > GPU
Threads(线程数): GPU > CPU
Registers: GPU > CPU 多寄存器可以支持非常多的Thread,thread需要用到register,thread数目大,register也必须得跟着很大才行。
SIMD Unit(单指令多数据流,以同步方式,在同一时间内执行同一条指令): GPU > CPU。

在计算机上运行的程序从性能的角度来说大致可分为三类:
(1) I/O intensive;
(2) Memory intensive
(3) Compute-intensive。
  (1)I/O intensive的程序其性能瓶颈是I/O,也就是说程序运行的大部分时间花在了硬盘读写/网络通信上,而I/O处在计算机体系结构金字塔的最底层,速度非常慢。最近炒的很火的big data 讨论的就是这一类应用程序。几百TB 甚至到PB级别的数据往哪搁,只能放在硬盘上。一台机器容量太小CPU太少怎么办,搞几百台甚至上千台机器用网线连起来分布处理。所以这块全是I/O, 现在大的互联网公司不多搞几个上千节点的集群肯定撑不住。
  (2)Memory intensive的程序其性能瓶颈在内存访问,程序中有大量的随机访问内存的操作,但是基本没有I/O, 这类程序已经比第一类程序快一个数量级了,但是和寄存器的速度还是没法比。目前大部分应用程序都属于这类。个人电脑里装的的各种软件基本就是这类,如果有点I/O, 立刻就会非常得卡。
以上提到的这两类程序的应用最广泛,涵盖了大部分有用的计算机软件,但遗憾的是GPU在这两块毫无用处, GPU只有在计算密集型的程序有些作用。I/O是瓶颈的程序,花在计算的时间可以忽略不计,再怎么用GPU加速也没用。 含有大量内存随机访问的程序也不适合在GPU上执行,大量的随机访问甚至可以使GPU的行为由并行变为串行。
什么类型的程序适合在GPU上运行?
  (1)计算密集型的程序。所谓计算密集型(Compute-intensive)的程序,就是其大部分运行时间花在了寄存器运算上,寄存器的速度和处理器的速度相当,从寄存器读写数据几乎没有延时。可以做一下对比,读内存的延迟大概是几百个时钟周期;读硬盘的速度就不说了,即便是SSD, 也实在是太慢了。
  (2)易于并行的程序。GPU其实是一种SIMD(Single Instruction Multiple Data)架构, 他有成百上千个核,每一个核在同一时间最好能做同样的事情。
  满足以上两点,就可以用GPU做运算了。 不过你还得先用CUDA或者Open CL 把能在GPU上运行的程序写出来, 这也是很麻烦的,写一下就知道了。 而且GPU的架构比较特殊,要想写出高效率的程序,要花很多很多时间。笔者想说写GPU程序是一件很蛋疼的事情。
  GPU在某些地方很有用,但应用面比较窄,远远没有某公司声称的那么有用。当今还是Intel的天下, 现在计算机的速度已经很快了,计算其实已经不是什么大问题。I/O才是最需要解决的问题。 记得曾经看过N家的GTC峰会,黄某人吹得神乎其神,连笔者都被感动了,多少多少T FLOPS的计算速度。 程序运行时间从100 秒 变成 1秒 其实没多重要,你倒杯水的功夫就100秒了。运行时间从100天缩短到1天才是大贡献。 前者就是GPU做的事情,后者才是我们真正需要的。

gpu:数量大,计算简单,重复多次
cpu :数量不那么大,计算复杂,重复性低

原文地址:https://www.cnblogs.com/timxgb/p/9578169.html

时间: 2024-08-29 22:11:23

gpu和cpu区别的相关文章

[linuxeden] 程序员的野心:让GPU像CPU一样运行

GPU代表的是图形处理单元,但是,这些小小芯片除了处理图形功能,还有其它用处.比如,Google使用GPU来为人脑建模,Salesforce则依赖GPU分析Twitter微博数据流.GPU很适合并行处理运算,也就是同时执行成千上万个任务.怎么做呢?你得开发一个新软件,让它挖掘GPU芯片的潜力.最近美国印第安纳大学计算机博士埃里克-浩克(Eric Holk)就作出尝试,他开发了一个应用程序来运行GPU.浩克说:“GPU编程仍然需要程序员管理许多低层细节,这些细节是与GPU执行的主要任务分离 的.我

GPU 与CPU的作用协调,工作流程、GPU整合到CPU得好处

http://blog.csdn.net/maopig/article/details/6803141 在不少人的心目中,显卡最大的用途可能就只有两点--玩游戏.看电影,除此之外,GPU并没有其他的作用了.但是随着微软IE9的正式发布,不少人突然发现,微软一直提到一个名词:GPU硬件加速,从而也让不少人开始关注GPU硬件加速.那么GPU硬件加速到底是什么?能干些什么呢?下面让我们一起走进GPU硬件加速的世界去看看吧. GPU硬件加速就是显卡辅助CPU进行图形运算 要说起GPU硬件加速,我们首先要

[深度学习] Pytorch(三)—— 多/单GPU、CPU,训练保存、加载模型参数问题

[深度学习] Pytorch(三)-- 多/单GPU.CPU,训练保存.加载预测模型问题 上一篇实践学习中,遇到了在多/单个GPU.GPU与CPU的不同环境下训练保存.加载使用使用模型的问题,如果保存.加载的上述三类环境不同,加载时会出错.就去研究了一下,做了实验,得出以下结论: 多/单GPU训练保存模型参数.CPU加载使用模型 #保存 PATH = 'cifar_net.pth' torch.save(net.module.state_dict(), PATH) #加载 net = Net()

[科普] CPU, GPU, TPU的区别

Google Cloud 原文链接:https://cloud.google.com/blog/products/ai-machine-learning/what-makes-tpus-fine-tuned-for-deep-learning 机器之心翻译链接:https://baijiahao.baidu.com/s?id=1610560990129941099&wfr=spider&for=pc 张量处理单元(TPU)是一种定制化的 ASIC 芯片,它由谷歌从头设计,并专门用于机器学习

1.2CPU和GPU的设计区别

CPU和GPU之所以大不相同,是由于其设计目标的不同,它们分别针对了两种不同的应用场景.CPU需要很强的通用性来处理各种不同的数据类型,同时又要逻辑判断又会引入大量的分支跳转和中断的处理.这些都使得CPU的内部结构异常复杂.而GPU面对的则是类型高度统一的.相互无依赖的大规模数据和不需要被打断的纯净的计算环境. 于是CPU和GPU就呈现出非常不同的架构(示意图): 图片来自nVidia CUDA文档.其中绿色的是计算单元,橙红色的是存储单元,橙黄色的是控制单元. GPU采用了数量众多的计算单元和

GPU和CPU耗时统计方法

GPU端耗时统计 1 cudaEvent_t start, stop; 2 checkCudaErrors(cudaEventCreate(&start)); 3 checkCudaErrors(cudaEventCreate(&stop)); 4 checkCudaErrors(cudaDeviceSynchronize()); 5 6 float gpu_time = 0.0f; 7 cudaEventRecord(start, 0);//cuda context中的操作完毕事件被记录

Unity运用GPU代替CPU处理和计算简单测试

http://www.manew.com/thread-110502-1-1.html 随着游戏玩法的增强,计算的多量化,我们的CPU并不足以迅速的处理这些问题,而Unity给我们开放了一个接口,我们需要用它来处理大量的运算: 我们可以把大量的处理运算的逻辑放入这个Shader中,用GPU的并行能力来计算,这里简单的说一说他的使用方式和如何把参数传入和传出.让我们像一个方法一样调用. 首先:在Unity中我们可以创建一个ComputeShader: <ignore_js_op> 打开之后会发现

iOS GPU、cpu、显示器的协作

在 iOS 系统中,图像内容展示到屏幕的过程需要 CPU 和 GPU 共同参与. CPU 负责计算显示内容,比如视图的创建.布局计算.图片解码.文本绘制等. 随后 CPU 会将计算好的内容提交到 GPU 去,由 GPU 进行变换.合成.渲染. 之后 GPU 会把渲染结果提交到帧缓冲区去,等待下一次 VSync 信号到来时显示到屏幕上. 由于垂直同步的机制,如果在一个 VSync 时间内,CPU 或者 GPU 没有完成内容提交,则那一帧就会被丢弃,等待下一次机会再显示,而这时显示屏会保留之前的内容

[深度学习] Pytorch学习(二)—— torch.nn 实践:训练分类器(含多GPU训练CPU加载预测的使用方法)

Learn From: Pytroch 官方Tutorials Pytorch 官方文档 环境:python3.6 CUDA10 pytorch1.3 vscode+jupyter扩展 #%% #%% # 1.Loading and normalizing CIFAR10 import torch import torchvision import torchvision.transforms as transforms batch_size = 16 transform = transform