我有一个(半)理论问题。
是否可以使用并行的特定编译器(如OpenMP,CUDA等)编译C代码,以便为Ruby语言编写C扩展,从而在分布式计算机上更好地(理论上)运行?
答案 0 :(得分:0)
如果你的意思是,你可以编译并行C代码作为Ruby扩展,我认为你大多数应该能够这样做。例如,执行矩阵乘法的Ruby的数字扩展可以调用英特尔MKL的DGEMM
例程,而MKL在内部与OpenMP并行化。
您应该注意不要混合使用不同OpenMP运行时的相同程序扩展。以GCC,Intel C / C ++编译器和Oracle Solaris Studio为例。它们中的每一个都有自己的OpenMP运行时实现。这些实现在很大程度上彼此不兼容,并且将它们混合在同一个可执行文件中(通过静态链接或通过在运行时动态加载模块)是对灾难的调用。
需要注意的另一件事是Ruby运行时是否是线程安全的,是否可以从多线程代码调用它。如果没有从OpenMP parallel
区域内调用Ruby运行时,则该注释无关紧要。
由于只有一个CUDA供应商,因此只关注支持CUDA的扩展时的版本不匹配。