首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在一个gcc编译器上,可以使用GPU加速编译多个程序吗?

在一个gcc编译器上,可以使用GPU加速编译多个程序吗?
EN

Stack Overflow用户
提问于 2011-12-07 22:36:31
回答 2查看 50.4K关注 0票数 66

有没有什么方法或者工具可以把GPU加速用在用GCC编译器编译的程序上?现在,我已经创建了一个程序来迭代地编译给定的程序列表。这需要几分钟。我知道有几个像Pyrit这样的程序,它可以帮助将GPU加速应用于预先计算的哈希值。

如果没有这样的工具,请建议是否使用OpenCL或任何其他工具来重新编写我的代码。

EN

回答 2

Stack Overflow用户

发布于 2012-05-04 18:56:39

A.在命令式编程语言中,语句是按顺序执行的,每条语句都可能改变程序的状态。因此,分析翻译单元本质上是连续的。

例如:检查常量传播是如何工作的-

代码语言:javascript
运行
复制
a = 5;
b = a + 7;
c = a + b + 9;

在确定分配给bc的值是编译时的常量之前,需要按顺序检查这些语句。

B.最重要的是,不同的过程也需要按顺序执行,并且相互影响。

例如:根据指令调度,分配寄存器,然后发现需要将寄存器溢出到内存,因此需要生成新指令。这将再次更改计划。

所以你也不能并行地执行“传递”,比如“寄存器分配”和“调度”(实际上,我认为有一些文章是计算机科学家/数学家试图同时解决这两个问题的,但我们就不谈这个了)。

(同样,我们可以通过管道传递来实现一定程度的并行性。)

此外,GPU尤其不适合,因为:

编译器不需要或不经常使用的东西(除了在程序中优化浮点运算时)

  • GPU擅长单指令多路复用。即对多个输入执行相同的操作。如果编译器需要,比如说,优化几百个浮点运算,这可能是一个好处(一个疯狂的例子是:程序员定义了几个大型FP数组,为它们分配常量,然后编写代码对这些数组进行操作。

因此,除了并行编译基本块和流水线遍之外,在“C文件的编译范围内”的级别上没有太多的并行性。但是并行是可能的,很容易实现,并且经常在更高的级别上使用。例如,GNU Make-j=N参数。这基本上意味着:只要它找到独立于N的作业(通常,编译一堆文件是GNU Make的用途),它就会产生N进程(或并行编译不同文件的gccN实例)。

票数 40
EN

Stack Overflow用户

发布于 2016-09-01 10:34:14

如果你问的是,“你能自动写GPU加速的代码给GCC和LLVM使用吗?”答案是肯定的。NVIDIA和Google开发了基于LLVM的开源编译器项目:

NVIDIA CUDA LLVM:

GOOGLE GPUCC:

如果您的问题是“我能否使用GPU来加速非CUDA通用代码编译?”答案目前是否定的。GPU擅长某些事情,如并行任务,但不擅长编译器所涉及的分支等其他方面。好消息是,您可以使用具有CPU的PC网络获得2-10倍的编译加速,这取决于您的代码已经进行了多大程度的优化,并且您可以为您的台式机获得最快的多核CPU和高速SSD,从而在您求助于网络构建之前以更少的麻烦获得收益。

有一些工具可以将C/C++/ObjC编译器任务分发到像Distcc这样的计算机网络。它包含在旧版本的XCode中,但已被删除,并且不支持在Swift中使用它。

有一个类似于Distcc的商业工具叫做Incredibuild,它支持Visual Studio C/C++和Linux开发环境:

有一些很好的文章介绍了Incredibuild与Distcc在现实世界中的使用,以及与本机编译器中的增量构建支持相比的权衡,以便进行小的更改,如单个文件中的单个行,而无需重新编译其他所有内容。要考虑的几点:

通过预编译头文件、使用多个machine.

上使用增量构建,

免费进行相比,在自动分配工作并保证与串行编译相同的结果方面,DLL是一种更完整的解决方案。要获得相同的结果并与除gcc之外的任何对象兼容,您必须做更多的工作。

  • 有关详细的审查,请参阅DLL
票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8417053

复制
相关文章

相似问题

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