2011-09-28 9 views
9

Mathematicaの外部リニアソルバーとしてCUSPを使用して、GPUの機能を使用しようとしています。 こちらはCUSP Project webpageです。私は、CUSPとMathematicaをどのように統合できるかについていくつかの提案を求めています。私はあなたの多くがここでこれについて議論することに興味があると確信しています。私は、入力行列を書いて、それをCUSPプログラムに送るのは、行く方法ではないと思います。 Mathematicaのを使うと、入力行列をGPUベースのソルバーに素早くパイプライン化するのに適しています。 Mathematicaから直接行列と右辺行列を供給する方法は何でしょうか?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; 
} 

この質問は、私たちにMMAのはMathLinkインターフェースの話題を起動することも可能であるのMathematica 8のコンパイル機能を議論する可能性を与えます。私はここにいる人々がこの問題を価値があると思っていると思っています。

BR

+1

StackOverflowの形式は議論には適していないことにご注意ください。それはフォーラムではありません。できるだけQ&A形式にとどまるようにしてください。 –

+1

@belisarius私はあなたの意見を持っています。具体的な質問をする時間を与えてください。しかし、問題はこの問題をどのように攻撃するかでした。思い出してくれてありがとう.. – PlatoManiac

答えて

1

あなたは議論の余地が実際には存在しません(LibraryFunctionLoadはMathematicaのdownvalueとして動的ライブラリの機能にアクセスするために使用されている)LibraryLinkを使用したい場合は、LibraryFunctionsは機械ダブルスまたはマシンのMathematicaのテンソルを受け取ることができますあなたは完了です。

Mathematica MTensorフォーマットはCと同じように密に配列されているため、CUSPで他のフォーマットを使用する場合は、表現間の変換にグルーコードを書く必要があります。

詳しくはLibraryLink tutorialを参照してください。

Interaction with Mathematicaページの「MTensorsのメモリ管理」セクションを特に参考にして、「共有」モードを選択してMathematicaテンソルを参照渡しするだけでよいでしょう。

関連する問題