9

GPU の能力を利用するために、Mathematica の外部線形ソルバーとして CUSP を使用しようとしています。CUSP プロジェクトの Web ページは次のとおりです。CUSP を Mathematica と統合する方法について、いくつかの提案を求めています。ここにいる皆さんの多くは、これについて議論することに興味を持っていると確信しています。入力行列を書き、それを CUSP プログラムに入力するのは適切ではないと思います。Mathematica を使用LibrarayFunctionLoadすると、入力行列をその場で GPU ベースのソルバーにパイプライン処理するためのより良い方法になります。Mathematica から行列と右辺の行列を直接供給するにはどうすればよいでしょうか?

ここにいくつかの CUSP コード スニペットがあります。

#include <cusp/hyb_matrix.h>
#include <cusp/io/matrix_market.h>
#include <cusp/krylov/cg.h>

int main(void)
{
// create an empty sparse matrix structure (HYB format)
cusp::hyb_matrix<int, float, cusp::device_memory> A;

// load a matrix stored in MatrixMarket format
cusp::io::read_matrix_market_file(A, "5pt_10x10.mtx");

// allocate storage for solution (x) and right hand side (b)
cusp::array1d<float, cusp::device_memory> x(A.num_rows, 0);
cusp::array1d<float, cusp::device_memory> b(A.num_rows, 1);

// solve the linear system A * x = b with the Conjugate Gradient method
cusp::krylov::cg(A, x, b);

return 0;
}

この質問により、Mathematica 8 のコンパイル機能について議論することができます。また、MMA の mathlink インターフェイスのトピックを呼び出すこともできます。ここにいる人々が、この問題を熟考する価値があり、興味深いものであると感じてくれることを願っています。

ブラジル

4

1 に答える 1

1

LibraryLink (LibraryFunctionLoad を使用して Mathematica の downvalue として動的ライブラリ関数にアクセスする) を使用する場合、実際には議論の余地はあまりありません.LibraryFunctions は機械倍精度または機械整数の Mathematica テンソルを受け取ることができます.

Mathematica の MTensor 形式は、C で自然に使用するのと同じように密な配列です。そのため、CUSP で他の形式を使用する場合は、表現間で変換するためのグルー コードを記述する必要があります。

詳細については、LibraryLink チュートリアルを参照してください。

Interaction with Mathematicaページの「MTensor のメモリ管理」セクションに特に注意し、「共有」モードを選択して Mathematica tensor を参照渡しするだけにしてください。

于 2011-10-24T20:04:04.577 に答える