在gcc编译器上编译多个程序时是否可以使用GPU加速?
是否有任何方法或工具可以在使用GCC编译器编译程序时应用GPU加速?现在我已经创建了一个程序来迭代编译给定的程序列表。这需要几分钟。我知道一些程序,比如Pyrit,它可以帮助应用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; 在确定
如果没有此类工具可用,请建议是否使用OpenCL或其他任何工具来重新编程我的代码。A.在命令式编程语言中,语句按顺序执行,并且每条语句都可能更改程序的状态。因此,分析翻译单位本质上是顺序的 例如:查看常量传播是如何工作的-
a = 5;
b = a + 7;
c = a + b + 9;
在确定分配给b
和c
的值是编译时的常量之前,需要按顺序检查这些语句
(但是,可能会并行编译和优化单独的基本块。)
B.除此之外,不同的过程也需要顺序执行,并相互影响
例如:根据指令计划,分配寄存器,然后发现需要将寄存器溢出到内存中,因此需要生成新指令。这又改变了日程安排
因此,您也不能并行执行“寄存器分配”和“调度”之类的“过程”(实际上,我认为有些文章中计算机科学家/数学家试图同时解决这两个问题,但我们不必深入讨论)
(同样,可以通过管道传递实现一些并行性。)
此外,GPU尤其不适合,因为:
因此,除了并行编译基本块和流水线过程外,在“C文件编译内”级别上没有多少并行性。但是并行是可能的,易于实现,并且经常在更高的级别上使用<例如,code>gnumake具有
-j=N
参数。这基本上意味着:只要它找到N
独立的作业(通常,编译一堆文件就是GNU Make的用途),它就会产生N
进程(或者N
并行编译不同文件的gcc
实例)。如果你问的是,“您能自动编写GPU加速代码以与GCC和LLVM一起使用吗?”答案是肯定的。NVIDIA和Google开发基于LLVM的开源编译器项目:
NVIDIA CUDA LLVM:
- 通过预编译头、使用多个DLL以及在一台计算机上使用增量构建,可以显著加快代码库的速度
- 对于自动分发工作和保证与串行编译相同的结果而言,与使用distcc免费执行相比,creditbuild是一个更完整的解决方案,在distcc中,您必须为相同的结果做更多的工作,并且与gcc以外的任何东西兼容
- 有关详细审查,请参阅