有没有什么方法或者工具可以把GPU加速用在用GCC编译器编译的程序上?现在,我已经创建了一个程序来迭代地编译给定的程序列表。这需要几分钟。我知道有几个像Pyrit这样的程序,它可以帮助将GPU加速应用于预先计算的哈希值。
如果没有这样的工具,请建议是否使用OpenCL或任何其他工具来重新编写我的代码。
发布于 2012-05-04 18:56:39
A.在命令式编程语言中,语句是按顺序执行的,每条语句都可能改变程序的状态。因此,分析翻译单元本质上是连续的。
例如:检查常量传播是如何工作的-
a = 5;
b = a + 7;
c = a + b + 9;
在确定分配给b
和c
的值是编译时的常量之前,需要按顺序检查这些语句。
B.最重要的是,不同的过程也需要按顺序执行,并且相互影响。
例如:根据指令调度,分配寄存器,然后发现需要将寄存器溢出到内存,因此需要生成新指令。这将再次更改计划。
所以你也不能并行地执行“传递”,比如“寄存器分配”和“调度”(实际上,我认为有一些文章是计算机科学家/数学家试图同时解决这两个问题的,但我们就不谈这个了)。
(同样,我们可以通过管道传递来实现一定程度的并行性。)
此外,GPU尤其不适合,因为:
编译器不需要或不经常使用的东西(除了在程序中优化浮点运算时)
因此,除了并行编译基本块和流水线遍之外,在“C文件的编译范围内”的级别上没有太多的并行性。但是并行是可能的,很容易实现,并且经常在更高的级别上使用。例如,GNU Make
有-j=N
参数。这基本上意味着:只要它找到独立于N
的作业(通常,编译一堆文件是GNU Make
的用途),它就会产生N
进程(或并行编译不同文件的gcc
的N
实例)。
发布于 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之外的任何对象兼容,您必须做更多的工作。
https://stackoverflow.com/questions/8417053
复制相似问题