与えられたn行m列の行列では、各行列行の最小値を含むnサイズのベクトルをCUDAで構築したいと考えています。CUDAの配列行の最小値
これまでのところ、私はこれを通じて来ている:私は、より最適化された何かが存在することができることを考えるしかし
OnMin<<<(n + TPB - 1)/TPB, TPB>>>(Mins, Matrix, n, m);
:で呼び出さ
__global__ void OnMin(float * Mins, const float * Matrix, const int n, const int m) {
int i = threadIdx.x + blockDim.x * blockIdx.x;
if (i < n) {
Mins[i] = Matrix[m * i];
for (int j = 1; j < m; ++j){
if (Matrix[m * i + j] < Mins[i])
Mins[i] = Matrix[m * i + j];
}
}
}
。
私はループでcublasIsamin
を呼び出そうとしましたが、速度が遅いです。
私も
(sm_35は、compute_35はコンパイルエラーを発生させます...私はGTX670を持っている)...成功せずOnMinカーネルからカーネル(グローバル)を起動任意のアイデアを試してみましたか?
ありがとうございます!
あなたの行列を先に入れ替えることで、あなたはそれを改善することができました(基本的には数学がないので、メモリに束縛されているはずです)。問題は、メモリアクセスパターンが合体していないことです(ワープ内のスレッドは連続した列のエントリを読み込み、メモリ内に連続していないことを示します)。また、あなたはnvvpの結果を見てみましたか? – leo
[CUDAで行列の行を減らす]の可能な複製(http://stackoverflow.com/questions/17862078/reduce-matrixrows-with-cuda) –