免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: send_linux
打印 上一主题 下一主题

CPU+GPU计算模式与单纯的CPU计算模式相比,有何优势?(获奖名单公布!) [复制链接]

论坛徽章:
0
61 [报告]
发表于 2012-03-09 23:30 |只看该作者
gamebus 发表于 2012-03-09 22:48
这个真不是为了减轻CPU的计算负担,在某些方面来说,GPGPU的承担的计算量将是计算过程中挑大梁的,CP ...


你还真别说,这当初就是打酱油的,NV当初做GPU就是为了游戏,GPU只是为了给CPU分担负担的,只是一不小心最后做大了,而且在他的道路上,只能这么和intel和AMD干了,不革了他们的命,NV就永远翻不了身。
intel08年左右的时候,也看到了这个GPU的机会,也推出了他的独立GPU机会,可惜没有成功,2010年的时候宣布破产。只有AMD现在同时在做GPU和CPU的计算架构,而且不同于CUDA,他们自己推出了OpenCL,另外还有微软的Direct Compute等,其实大家都是各怀鬼胎了,但是他们做这个,都是副业,只有NV把这个当自己的事业在拓展,可想而知,最后如果有获胜者的话,那么只能是NVIDIA了。

论坛徽章:
6
CU大牛徽章
日期:2013-03-14 14:14:08CU大牛徽章
日期:2013-03-14 14:14:26CU大牛徽章
日期:2013-03-14 14:14:29处女座
日期:2014-04-21 11:51:59辰龙
日期:2014-05-12 09:15:10NBA常规赛纪念章
日期:2015-05-04 22:32:03
62 [报告]
发表于 2012-03-09 23:31 |只看该作者
回复 61# youjiafa

没有吧,微软貌似在win7的时候,就开始大力提倡GPU计算了啊



   

论坛徽章:
0
63 [报告]
发表于 2012-03-09 23:44 |只看该作者
lemoncandy 发表于 2012-03-09 22:52
其实微软在这方面做了不少的贡献呢

微软的DirectCompute是一种全新GPU计算应用程序接口(API),运行 ...


是的,相对来说,微软在这方面的工作做的也挺多的,微软的DirectCompute和Khronos旗下的OpenGL,都对CUDA的架构有很大的推动作用。

论坛徽章:
0
64 [报告]
发表于 2012-03-09 23:49 |只看该作者
youjiafa 发表于 2012-03-09 23:30
你还真别说,这当初就是打酱油的,NV当初做GPU就是为了游戏,GPU只是为了给CPU分担负担的,只是一不小心 ...


微软的DirectCompute和开放组织的OpenGL,和CUDA并不冲突,前两者主要是为了提供API接口,而后者不仅仅是编程接口,还更多的有架构和平台的规范。

下面是科普文,不了解的同学可以学习一下:)

OpenCL是由苹果公司发起,业界众多著名厂商共同制作的面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境。便于软件开发人员为高性能计算服务器、桌面计算系统、手持设备编写高效轻便的代码,而且广泛适用于多核心处理器(CPU)、图形处理器(GPU)、Cell类型架构以及数字信号处理器(DSP)等其他并行处理器,在游戏、娱乐、科研、医疗等各种领域都有广阔的发展前景。而Khronos有很多厂商组成,OpenCL工作组同时也是OpenCL的一个协调机构,来负责制定OpenCL的规格、架构等等各方面。业界最主要的和图形或者和计算相关的厂商都是Khronos的成员。


Directcompute是一种用于GPU通用计算的应用程序接口,由Microsoft(微软)开发和推广,集成在Microsoft DirectX内。其中DirectX 10内集成Directcompute 4.0;DirectX 10.1内集成Directcompute 4.1;DirectX 11内集成Directcompute 5.0 。与Directcompute起到相同作用的还有OpenCL和CUDA。其中Directcompute和OpenCL是开放标准,CUDA是基于nVIDIA CUDA架构的私有标准。


论坛徽章:
0
65 [报告]
发表于 2012-03-09 23:55 |只看该作者
回复 64# Mysql2009


    学习了,谢谢!{:3_196:}

论坛徽章:
0
66 [报告]
发表于 2012-03-10 02:03 |只看该作者
本帖最后由 7kbird 于 2012-03-10 02:25 编辑

1.结合您的经验和体会,基于GPGPU的高性能计算主要应用于哪些学科应用?
既然是结合自己的经验,我就只说一下自己接触到的。
医疗领域:我遇到过的一个做快速三维CT建模的,因为CT扫描出的数据非常庞大,如果使用常规的工作站跑一次需要一个非常离谱的时间,而利用GPU再加上一个并行算法,即使在一台普通PC上,大概一天就可以了
加密领域:现在有了GPU的辅助,暴力破解也是一个比较可行的方案了
图形处理领域:GPGPU并不是专门处理图像的,但是因为图像处理的特征非常符合GPGPU的特色(可以参考第二个问题的分享),所以GPGPU常常会用于图像处理。另一方面,由于GPGPU的运算基于显存,可以直接处理图像输出,所以很多实时图像处理都用到这个技术,比如 OpenGL Shading Language

只要能够使用并行算法的领域都可能用到GPU编程的,还有GPU版的快速傅里叶变换,排序算法等,都是非常快速的,与这些相关的领域都可能用到GPGPU,只不过因为缺乏相关培训而普及比较慢,实际上现在的使用情况我也不太清楚。

2.CPU+GPU计算模式与单纯的CPU计算模式相比,有哪些优势又有哪些障碍?(可从硬件和软件两个方面来讨论,比如GPU在图形处理方面具有优势,但是要求使用图形编程语言来对 GPU(图形处理器)进行编程。)

nviDIA显卡的晶体管的数量不知从那一代开始就远超所有cpu了,现在更是不用说,如果只是让她来处理平常的显示太屈才了,所以大家都希望尽可能利用GPU的计算能力。
GPU是一种类似单指令多数据流的处理模式,如果同时满足下面几条,CPU+GPU计算优势会非常明显:
1.大量数据
2.并行算法
3.并行算法中每个线程的运行相互独立,并有一定的运算量

对于1,如果是小数据量的计算,把内存数据转移到显存以及CPU和GPU的通信开销,可能只用cpu的话早已计算完毕。对于小规模运算,CPU更占优势
对于2,如果让GPU去跑快速排序,我保证跑不过CPU,因为无法利用多核的优势。但是你用2路归并算法就不同了,nlog2n的算法复杂度,如果你有n个核,理论上可以让这个算法复杂度变成log2n,虽然达不到,但是加速效果是非常明显的。这是GPU加速的优势,同时也是劣势,因为你不得不想出一个并行算法来满足GPU要求,包括3里面的要求。
对于3,每个线程如果不相互独立,比如要通信一下,这是GPU极不擅长的,又或者同时读写显存的数据,如果是同一个数据,互斥处理会严重降低性能,即使不是同一个数据,如果多个线程同时访问显存,性能也会下降,因为显存的访问是有带宽限制的。为什么说每个线程要有一定的计算量呢?因为分配每个核的工作是有开销的,如果分配好后只是做了一个加法,那还不如CPU

另外GPU比较擅长处浮点加减乘除,如果你让她去if else判断一下,,性能会明显下降,因为她并不能真正的实现跳转,所以逻辑判断尽可呢少出现在GPU的算法中,包括for,while的循环,里面同样带有大量逻辑判断的

内存和显存的传输,cpu和GPU的通信是现在GPU编程的一大瓶颈,所以在算法中要尽量减少出现这两个情况的出现,这也是为什么现在都要把cpu和GPU塞到一块去

综上,GPU对并行算法的要求还是非常苛刻的,这也对开发者提出一定的要求,算是劣势吧

在开发方面,GPU的debug是个大问题,开发过cuda的人应该知道,单显卡是无法设置断点的,多个核的临时数据也是无法监控的,这对于测试是非常痛苦的。

似乎这里提到的大部分都是些GPU的劣势,实际上是因为GPU优势太过明显,可惜要完全发挥优势,需要经过不少的努力

论坛徽章:
6
CU大牛徽章
日期:2013-03-14 14:14:08CU大牛徽章
日期:2013-03-14 14:14:26CU大牛徽章
日期:2013-03-14 14:14:29处女座
日期:2014-04-21 11:51:59辰龙
日期:2014-05-12 09:15:10NBA常规赛纪念章
日期:2015-05-04 22:32:03
67 [报告]
发表于 2012-03-10 10:22 |只看该作者
7kbird 发表于 2012-03-10 02:03
1.结合您的经验和体会,基于GPGPU的高性能计算主要应用于哪些学科应用?
既然是结合自己的经验,我就只说一 ...


这个厉害,您是在使用cuda编程么?

论坛徽章:
6
CU大牛徽章
日期:2013-03-14 14:14:08CU大牛徽章
日期:2013-03-14 14:14:26CU大牛徽章
日期:2013-03-14 14:14:29处女座
日期:2014-04-21 11:51:59辰龙
日期:2014-05-12 09:15:10NBA常规赛纪念章
日期:2015-05-04 22:32:03
68 [报告]
发表于 2012-03-10 10:24 |只看该作者
本帖最后由 wang290 于 2012-03-10 10:30 编辑
Mysql2009 发表于 2012-03-09 23:49
微软的DirectCompute和开放组织的OpenGL,和CUDA并不冲突,前两者主要是为了提供API接口,而后者不仅仅 ...


CUDA明显是一个整体的平台解决方案,不仅仅是一个编程接口,这点在cuda一开始建立的时候就已经很明确了。

但是要最大的发挥CUDA编程的效果,则软硬件都必须是NV的,否则够呛。

  Nvidia CUDA技术是当今世界上唯一针对Nvidia GPU(图形处理器)的C语言环境,该技术充分挖掘出Nvidia GPU巨大的计算能力。凭借CUDA技术,开发人员能够利用Nvidia GPU攻克极其复杂的密集型计算难题。现在,世界各地已经部署了数以百万计的支持CUDA 的GPU,数以千计的软件开发人员正在使用免费的CUDA软件工具来加快视频、音频编码、石油天然气勘探、产品设计、医学成像和科学研究等应用。

  说了CUDA这么多,我们深入一点探讨CUDA到底是什么。它是我们需要的新颖的硬件和编程模型,能够让GPU的强大计算能力发挥,并将GPU暴露为一种真正通用的数据并行计算设备。

  CUDA(Compute Unified Device Architecture)用于GPU计算的开发环境,它是一个全新的软硬件架构,这个架构可以使用GPU来解决商业、工业以及科学方面的复杂计算问题。是NVIDIA为自家的GPU编写了一套编译器及相关的库文件。它是一个完整的GPGPU解决方案,提供了硬件的直接访问接口,而不必像传统方式一样必须依赖图形API(OpenGL和Direct 3D)接口来实现GPU的访问。因此对于开发者来说,CUDA的开发门槛大大降低了。CUDA的GPU编程语言基于标准的C语言,因此任何有C语言基础的用户都很容易的开发CUDA应用程序。

CUDA是业界的首款并行运算语言,而且其非常普及化,目前有高达8千万的PC用户可以支持该语言。

  CUDA在执行的时候是让host里面的一个一个的kernel按照线程网格(Grid)的概念在显卡硬件(GPU)上执行。每一个线程网格又可以包含多个线程块(block),每一个线程块中又可以包含多个线程(thread)。

  用马路上的汽车来比喻,马路上面有很多辆汽车,但是如果同时开的话,那么肯定会出现塞车现象的。CUDA就好比一个指挥马路的警察。每一个汽车分成不同的路线kernel_1,kernel_2……kernel_M),然后每个子任务的司机(Grid),就负责自己的路线(Block),最后才是汽车(Thread)去执行完成。

  通过CUDA编程时,将GPU看作可以并行执行非常多个线程的计算设备(compute device)。它作为主CPU的协处理器或者主机(host)来运作:换句话说,在主机上运行的应用程序中数据并行的、计算密集的部分卸载到此设备上。

  经过了CUDA对线程、线程块的定义和管理,在支持CUDA的GPU内部实际上已经成为了一个迷你网格计算系统。在内存访问方面,整个GPU可以支配的存储空间被分成了寄存器(Register)、全局内存(External DRAM)、共享内存(Parallel Data Cache)三大部分。其中寄存器和共享内存集成在GPU内部,拥有极高的速度,但容量很小。共享内存可以被同个线程块内的线程所共享,而全局内存则是我们熟知的显存,它在GPU外部,容量很大但速度较慢。经过多个级别的内存访问结构设计,CUDA已经可以提供让人满意的内存访问机制,而不是像传统GPGPU那样需要开发者自行定义。

  在CUDA的帮助下普通程序员只要学习一点点额外的GPU架构知识,就能立刻用熟悉的C语言释放GPU恐怖的浮点运算能力,通过CUDA所能调度的运算力已经非常逼近万亿次浮点运算(GeForce 280GTX单卡浮点运算能力为933GF LOPS)。而在此之前要获得万亿次的计算能力至少需要购买价值几十万元的小型机。

  基于CUDA开发的程序代码在实际执行中分为两种,一种是运行在CPU上的宿主代码(Host Code),一种是运行在GPU上的设备代码(Device Code)。

  CUDA其实是CPU和GPU协作运算数据,所有CUDA也会看到CPU和GPU的部分,比较串行的部分放到CPU上面,比较并行的部分放到GPU上面运算。

采用CUDA技术相比传统的GPGPU计算的优势:
1、CUDA的编程接口采用了标准的C语言程序进行扩展,有利于CUDA的学习
2、每个线程之间CUDA为他们提供了16kb的共享内存,可用于设置缓存,同时还拥有更高的带宽纹理
3、系统内存和显存之间更有效地进行数据传输
4、无需图形API接口进行连接
5、现行内存寻址、聚集和驱散,写入任意地址
6、硬件支持整数和bit操作

劣势就是上文老兄说到的,硬件优势明显,但是软件劣势不小,关于GPU程序设计方面的工具链,上下游产业貌似现在都不玩呗,要大量的商用存在不小的困难。

论坛徽章:
0
69 [报告]
发表于 2012-03-10 11:22 |只看该作者
回复 66# 7kbird


    非常不错的分享,我从我系统管理员的角度来说说。

1、可能有应用前景的行业,不用说,是对浮点计算需求很高的行业计算,比如算法与数值计算技术、航空航天、生物信息学、气候气象模型、集群管理、计算流体动力学(CFD)、计算物理学、结构和机械计算、数据库,数据挖掘和商业情报、数字内容创作与电影、电路设计与分析、能源勘探、生命科学、并行计算语言和超级计算等等。

2、要推动计算的革命,不是一件简单的事情,我们已经看的很清楚,GPGPU计算或者GPU+CPU计算,已经在很多地方大显身手了,比如当年的中国的天河一号,靠着GPU+CPU的模式闯进了世界超算的Top5,确实是很牛逼,但是仅在科研领域,要是在商用领域,比如各个大的服务器供应商的商业计算解决方案中,CPU+GPU模式的方案还不是主流的推荐,但是我们也看到了一些解决方案,比如HP和Dell都有类似的,但不是他们主推的解决方案,要是哪天这些成为主推的解决方案,那么真正的GPGPU时代就将到来。

论坛徽章:
0
70 [报告]
发表于 2012-03-10 12:37 |只看该作者
回复 67# wang290


目前只会用cuda,opencl没有具体用过,只是知道个大概。
虽然cuda只适用于n卡,但据我一位研究GPU架构的前辈说,cuda和opencl在汇编层面上是可以互相转化的。
不过我还是很希望去体验一下opencl的,毕竟一个不依赖特殊硬件厂家的语言更受青睐,要看以后有没有时间了~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP