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

在gcc编译器上编译多个程序时是否可以使用GPU加速?,gcc,compiler-construction,gpu,hardware-acceleration,Gcc,Compiler Construction,Gpu,Hardware Acceleration,是否有任何方法或工具可以在使用GCC编译器编译程序时应用GPU加速?现在我已经创建了一个程序来迭代编译给定的程序列表。这需要几分钟。我知道一些程序,比如Pyrit,它可以帮助应用GPU加速来预计算散列 如果没有此类工具可用,请建议是否使用OpenCL或其他任何工具来重新编程我的代码。A.在命令式编程语言中,语句按顺序执行,并且每条语句都可能更改程序的状态。因此,分析翻译单位本质上是顺序的 例如:查看常量传播是如何工作的- a = 5; b = a + 7; c = a + b + 9; 在确定

是否有任何方法或工具可以在使用GCC编译器编译程序时应用GPU加速?现在我已经创建了一个程序来迭代编译给定的程序列表。这需要几分钟。我知道一些程序,比如Pyrit,它可以帮助应用GPU加速来预计算散列


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

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

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

a = 5;
b = a + 7;
c = a + b + 9;
在确定分配给
b
c
的值是编译时的常量之前,需要按顺序检查这些语句

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

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

例如:根据指令计划,分配寄存器,然后发现需要将寄存器溢出到内存中,因此需要生成新指令。这又改变了日程安排

因此,您也不能并行执行“寄存器分配”和“调度”之类的“过程”(实际上,我认为有些文章中计算机科学家/数学家试图同时解决这两个问题,但我们不必深入讨论)

(同样,可以通过管道传递实现一些并行性。)

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

  • GPU擅长浮点运算。编译器不需要或使用太多的东西(在程序中优化浮点运算时除外)

  • GPU擅长SIMD。i、 e.对多个输入执行相同的操作。这同样不是编译器需要做的事情。如果编译器需要,比如说,优化几百个浮点运算,可能会有好处(一个简单的例子是:程序员定义了几个大的FP数组,给它们分配了常量,然后编写代码对它们进行操作。这的确是一个写得很糟糕的程序。)


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

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

    NVIDIA CUDA LLVM:

    谷歌GPUCC:

    如果您的问题是,“我可以使用GPU加速非CUDA通用代码编译吗?“目前的答案是否定的。GPU擅长某些事情,比如并行任务,而不擅长其他事情,比如编译器所关注的分支。好消息是,您可以使用带有CPU的PC网络来获得2-10倍的编译加速,这取决于您的代码已经优化的程度,并且您可以获得最快的多核CPU和高速SSD,以便在您使用网络构建之前,桌面可以以较少的麻烦获得收益

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

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

    有一些很好的文章介绍了IncredBuild与Distcc的实际使用,以及与本机编译器中的增量构建支持相比的折衷方法,即在不重新编译任何其他内容的情况下,对单个文件中的一行进行小的更改。需要考虑的要点:

    • 通过预编译头、使用多个DLL以及在一台计算机上使用增量构建,可以显著加快代码库的速度
    • 对于自动分发工作和保证与串行编译相同的结果而言,与使用distcc免费执行相比,creditbuild是一个更完整的解决方案,在distcc中,您必须为相同的结果做更多的工作,并且与gcc以外的任何东西兼容
    • 有关详细审查,请参阅

    不太清楚,至少对我来说是这样。你是在寻找一个能自动“GPU加速”你的代码的编译器,还是一个GPU加速的编译器?我很确定他指的是一个GPU加速的编译器。我很怀疑在GPU上运行编译是否会有好处。你能更具体地说明一下(1)你正在努力完成什么,以及(2)你已经做了什么来确定你现有流程中的瓶颈。但Acova的速度非常慢。我只是想知道是否有一种方法可以通过GPU加速来加速这个程序的性能。如果我说错话,我会生气的。我对GPU加速不太了解。在这种情况下,不是ACOVEA的速度慢,而是个人构建的速度慢。这并不奇怪,很多构建都是低效的,关于如何改进这一点,人们已经倾注了大量的笔墨,但这些都不在Acova的控制范围内,也不在您的控制范围内。我想你只是运气不好。这一过程能从中受益的是什么