【发布时间】:2016-05-04 06:00:36
【问题描述】:
我正在使用 Fiddle 调用外部 C 函数以进行一些繁重的 linear algebra 计算 (Mac OSX)。
模块定义看起来像
module BLAS
extend Fiddle::Importer
dlload $BLAS_PATH
extern 'void cblas_dgemm(int, int, int, int, int, int, double, double*, int, double*, int, double, double*, int)'
extern 'void cblas_dgemv(int, int, int, int, double, double*, int, double*, int, double, double*, int)'
.......
这些库已经针对 mac osx 进行了优化,可以使用所有可用的内核。不幸的是,当我使用 Fiddle 从 Ruby 调用这些函数时,只使用了一个核心,我的理解是,这是因为 GIL。
有没有办法在外部函数执行过程中释放锁?
我正在使用ruby 2.0.0-p247(不是系统 Ruby)。
【问题讨论】:
-
我刚刚注意到 Fiddle 在 ruby 2.3 中发布了 gil - 如果您可以更新 ruby,这可能是最简单的解决方案