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