使用并行编译器编译以用于Ruby?

问题描述:

我有一个(半)理论问题。使用并行编译器编译以用于Ruby?

是否可以使用并行特定编译器(如OpenMP,CUDA等)编译C代码,以便为分布式机器运行更好(理论上)的Ruby语言编写C扩展?

+1

OpenMP和CUDA都不是编译器。它们大致都是对现有语言的扩展,以在程序中实现并行性。我认为你需要更清楚你的问题。 –

+0

我的错误,有一个upvote。 – noname

如果你的意思是,你可以编译并行C代码作为Ruby扩展,我认为你大多应该能够这样做。例如,Ruby的数字扩展可以进行英特尔MKL的DGEMM例程,并且MKL与OpenMP在内部是并行的。

您应该小心,不要在使用不同OpenMP运行时的相同程序扩展中混用。以GCC,Intel C/C++编译器和Oracle Solaris Studio为例。它们中的每一个都使用它自己的OpenMP运行时实现。这些实现大体上彼此不兼容,并将它们混合在同一个可执行文件中(无论是通过静态链接还是通过在运行时动态加载模块)都是对灾难的调用。

另一件需要注意的事情是Ruby运行时是否是线程安全的以及它是否可以从多线程代码中调用。如果没有从OpenMP parallel区域内部调用Ruby运行库,则此注释不相关。

由于只有一家CUDA供应商,因此只有在涉及启用CUDA的扩展时遇到版本不匹配问题。

+0

我相信Ruby的MRI实现目前不是线程安全的,但我必须仔细检查,谢谢你提供的信息丰富的答案! – noname