首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GPGPU和多核?

GPGPU和多核?
EN

Stack Overflow用户
提问于 2011-05-07 04:45:46
回答 2查看 10.2K关注 0票数 38

从程序员的角度来看,GPGPU和常规的多核/多线程CPU编程之间的主要实际区别是什么?具体地说:

哪种类型的问题更适合于常规多核,哪些类型更适合GPGPU? GPU的主要区别是什么?D's std.parallelism

  • If

  • 有哪些关键的底层硬件差异需要在编程模型中出现任何差异?

  • 哪种问题通常更容易使用,由多少来决定?从长远来看,为GPU实现高级并行性库,例如Microsoft's task parallel library或GPU计算是非常有效的,为什么GPU的设计不更像GPU?<代码>H 214F 215
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-09 23:49:04

有趣的问题。我研究过这个问题,所以我的回答是基于一些参考资料和个人经验。

哪些类型的问题更适合常规多核,哪些类型更适合GPGPU?

就像贾里德提到的那样。GPGPU是为非常规则的吞吐量工作负载而设计的,例如图形、密集矩阵-矩阵乘法、简单的photoshop滤波器等。它们擅长于容忍长延迟,因为它们本身就是为了容忍纹理采样( 1000+循环操作)而设计的。GPU内核有很多线程:当一个线程触发长延迟操作(例如内存访问)时,该线程将进入休眠状态(其他线程继续工作),直到长延迟操作结束。这使得GPU能够使它们的执行单元比传统的内核更加繁忙。

GPU不擅长处理分支,因为GPU喜欢将“线程”(如果您不是nVidia)批处理为翘曲,并将它们一起发送到管道上,以节省取/解码指令的能力。如果线程遇到一个分支,它们可能会发散,例如,8螺纹翘曲中的2个线程可能会占用分支,而其他6个线程可能不接受它。如果你的核心有8个SIMD通道(这就是为什么原来的翘曲有8个线程),那么你的两个新形成的翘曲就会运行效率低下。2螺纹翘曲将以25%的效率运行,6螺纹的经纱将以75%的效率运行。您可以想象,如果一个GPU继续遇到嵌套的分支,它的效率就会变得非常低。因此,GPU不擅长处理分支,因此不应该在GPU上运行带有分支的代码。

GPU也是不好的合作线程。如果线程需要相互对话,那么GPU就不能正常工作,因为GPU上不支持同步(但是nVidia在它上)。

因此,GPU最糟糕的代码是并行性较低的代码或具有大量分支或同步的代码。

编程模型的主要区别是什么?

GPU不支持中断和异常。对我来说,这是最大的区别。除此之外,CUDA与C没有太大的不同。您可以编写一个CUDA程序,将代码发送到GPU并在那里运行。您在CUDA中访问内存的方式有点不同,但这也不是我们讨论的基础。

有哪些关键的底层硬件差异需要在编程模型上有任何差异?

我已经提过了。最大的是GPU的SIMD特性,它要求代码以非常正常的方式编写,没有分支和线程间的通信。这就是为什么,例如,CUDA限制代码中嵌套分支的数量。

哪一种更容易使用,用多少钱?

这取决于你在编码什么以及你的目标是什么。

易于矢量化的代码: CPU更容易编写代码,但性能不高。GPU稍难编码,但提供了大爆炸的成本。对于所有其他人来说,CPU更容易,而且性能也更好。

从长远来看,为GPU实现高级并行库(如微软的任务并行库或D的std.parallelism? )是否实用?

任务--按照定义,并行性需要线程通信,并且也有分支。任务的思想是不同的线程做不同的事情。GPU是为许多执行相同任务的线程设计的。我不会为GPU构建任务并行库。

如果GPU计算如此高效,为什么CPU的设计不更像GPU?

世界上许多问题都是支离破碎和不规则的。1000个例子。图形搜索算法,操作系统,网络浏览器等等。仅仅为了增加--甚至图形也变得越来越分支化和通用化--就像每一代一样,所以GPU将变得越来越像CPU。我不是说他们会变得像CPU,但他们会变得更可编程。正确的模式介于电源效率低下的CPU和非常专门的GPU之间.

票数 40
EN

Stack Overflow用户

发布于 2011-05-07 05:07:03

即使在多核CPU中,您的工作单元也将比CPU大得多。for适用于规模很好的问题,每一块工作都越来越小。GPGPU的延迟要高得多,因为在访问数据之前,必须将数据移动到GPU的内存系统。但是,一旦数据存在,如果问题具有适当的可伸缩性,使用GPGPU,您的吞吐量就会高得多。根据我的经验,GPGPU编程的问题是从普通内存获取数据到GPGPU的延迟。

此外,如果辅助进程没有本地路由范围,GPGPU很难在工作进程之间进行通信。如果你一直想通过GPGPU进行交流,你会很痛苦的。因此,标准MPI库不适合GPGPU编程。

所有的计算机都不是像GPU那样设计的,因为GPU在高延迟、高吞吐量的计算中非常出色,这些计算本身就是并行的,并且可以很容易地被分解。CPU所做的大部分工作本质上并不是并行的,而且不能非常有效地扩展到数千或数百万同时工作人员。幸运的是,图形编程确实如此,这就是为什么所有这些都是在GPU中开始的。人们越来越多地发现了他们可以使图形问题看起来像图形问题的问题,这导致了GPGPU编程的兴起。但是,只有当GPGPU适合您的问题域时,GPGPU编程才真正值得您花时间。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5919172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档