是否可以在gcc编译器上编译多个程序时使用GPU加速?

clu*_*ess 48 compiler-construction gcc gpu hardware-acceleration

有没有办法或工具在使用GCC编译器编译程序时应用GPU加速?现在我已经创建了一个程序来迭代地编译给定的程序列表.这需要几分钟.我知道像Pyrit这样的一些程序有助于将GPU加速应用于预计算哈希.

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

Arj*_*kar 30

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

一个例子:查看常量传播可能如何工作 -

a = 5;
b = a + 7;
c = a + b + 9;
Run Code Online (Sandbox Code Playgroud)

在确定在编译时分配给b和的值c是常量之前,您需要按顺序查看这些语句.

(但是,可能会相互并行地编译和优化单独的基本块.)

B.除此之外,不同的传递也需要顺序执行,并相互影响.

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

所以你不能同时执行"寄存器分配"和"调度"之类的"传递"(实际上,我认为有些文章中计算机科学家/数学家一起试图将这两个问题一起解决,但不要赘述) .

(同样,通过流水线传递可以实现一些并行性.)

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

  1. GPU擅长浮点数学运算.某些编译器不需要或使用太多(除非在程序中优化浮点运算)

  2. GPU擅长SIMD.即对多个输入执行相同的操作.这也是编译器需要做的事情.有可能是一个好处,如果编译器需要,比如说,优化几百个浮点运算远(一种野生的例子是:程序员定义的几大FP阵列,分配常量给他们,然后写代码来对这些操作.写得非常糟糕的节目.)

因此,从并行基本块和流水线通行证汇编分开,没有太多的并行将不得不在"C文件编制内"的水平.但并行性是可能的,易于实现,并且在更高级别上不断使用.GNU Make例如,有这个-j=N论点.这基本上意味着:只要它找到N独立的工作(通常,编译一堆文件就是GNU Make用于任何方式),它会产生N进程(或并行编译不同文件的N实例gcc).

  • @FrankFarmer - 我不确定你是否阅读了我的全部答案.我没有使用`distcc`,但是只看一眼[*this*](http://distcc.googlecode.com/svn/trunk/doc/web/index.html)就会向我展示`distcc`在*文件*粒度.它预处理主机上的东西,并将整个文件发送给主机进行处理.即每个文件本身仍然是串行编译的.这与GNU Make与`-j`选项完全相同*粒度级别*. (6认同)
  • 您似乎建议编译不能并行化; 像[distcc](http://en.wikipedia.org/wiki/Distcc)这样的项目似乎是相反的明确证据.如今,并行编译是标准做法.无论如何,我不怀疑GPU加速编译可能仍然不可行 - 有许多限制因素,如总线吞吐量等. (4认同)

小智 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 vs Distcc和权衡的好文章与本机编译器中的增量构建支持相比,它可以在单个文件中进行类似单行的小改动,而无需重新编译其他所有内容.需要考虑的要点:

  • 通过预编译标头,使用多个DLL以及在单个计算机上使用增量构建,可以显着加快代码库的速度.
  • Incredibuild是一个更完整的解决方案,用于自动分配工作并保证与串行编译相同的结果相比,使用distcc免费执行,其中您必须为相同的结果和与gcc以外的任何其他内容的兼容性做更多的工作.
  • 有关详细信息,请参阅http://gamesfromwithin.com/how-incredible-is-incredibuild