(半)理論的な質問があります。
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 ランタイムの独自の実装があります。これらの実装は概して相互に互換性がなく、同じ実行可能ファイルに (静的リンクまたは実行時にモジュールを動的にロードすることによって) それらを混在させることは災害への呼び出しです。
もう 1 つの注目すべき点は、Ruby ランタイムがスレッドセーフかどうか、およびマルチスレッド コードから呼び出すことができるかどうかです。parallel
OpenMP領域内から Ruby ランタイムを呼び出さない場合、この注意事項は関係ありません。
単一の CUDA ベンダーがあるため、CUDA 対応の拡張機能に関しては、バージョンの不一致のみを考慮する必要があります。