我有一个(半)理论问题。
有没有可能用并行的专用编译器编译C代码,比如OpenMP,CUDA,等等,为Ruby语言写一个C扩展,在分布式机器上运行得更好(理论上)?
发布于 2013-01-25 21:48:19
如果你的意思是,你能把并行C代码编译成Ruby扩展吗,我想你基本上应该能做到。例如,执行矩阵乘法的Ruby的数值扩展可以调用英特尔MKL的DGEMM例程,而MKL在内部与OpenMP并行化。
您应该注意的是,不要混入使用不同OpenMP运行时的相同程序扩展。以英特尔C/C++编译器和Oracle的Solaris Studio为例。它们中的每一个都有自己的OpenMP运行时实现。这些实现在很大程度上彼此不兼容,将它们混合在同一个可执行文件中(通过静态链接或在运行时动态加载模块)是对灾难的召唤。
另一件需要注意的事情是Ruby运行时是否是线程安全的,以及是否可以从多线程代码中调用它。如果不从OpenMP parallel区域内部调用Ruby运行时,那么这句话就不重要了。
由于只有一家CUDA供应商,因此当涉及到启用CUDA的扩展时,人们应该只关心版本不匹配。
https://stackoverflow.com/questions/14514883
复制相似问题