私は次のような構造を持っています
struct Point
{
int x;
int y;
float val;
}
この構造体をスパース行列の表現に使用し(CUSPARSEとCUSPを認識していますが、推力を使用していくつかのテストを実行する予定です)、推力アルゴリズムを使用して操作を実行します。
私がCUDAプログラミングチュートリアルで学んだことから、より良いメモリ合体のために構造体の配列ではなく配列の構造体を使用することを常にお勧めします。
その場合、上記の構造体を使用してdevice_vector内にゼロ以外(数百万のオーダー)を格納すると、このdevice_vectorは推力アルゴリズムで作業しているときにGPU内で非整列メモリアクセスを使用しますか?
このdevice_vector内の不規則なストライドにアクセスし、複数の関数オブジェクトを渡すことによってアルゴリズム操作を実行する必要があるかもしれないので、これを尋ねます。
配列の構造体で動作するカスタムカーネルと同じくらい効率的でしょうか?
ありがとう。