1

次の方法で行列を処理する 4 つの CUDA カーネルがあります。

convolution<<<>>>(A,B);
multiplybyElement1<<<>>>(B);
multiplybyElement2<<<>>>(A);
multiplybyElement3<<<>>>(C);

// A + B + C with CUBLAS' cublasSaxpy

基本的にすべてのカーネル (最初の畳み込みを除く) は、定数メモリにハードコーディングされた固定値で行列の各要素の乗算を実行します (速度を上げるため)。

次のようなものを呼び出して、これらのカーネルを単一のカーネルに結合する必要がありますか

multiplyBbyX_AbyY_CbyZ<<<>>>(B,A,C)

?

グローバルメモリはすでにデバイス上にあるはずなので、おそらくそれは役に立たないでしょうが、完全にはわかりません

4

2 に答える 2

0

カーネルをマージすることで、メモリに対して1回のパスしか実行できない場合は、3倍の速度向上が見られる場合があります。

固定値を前もって乗算してから、単一のカーネルで単一の乗算を実行できますか?

于 2012-04-14T21:35:14.893 に答える
0

私が正しく理解していれば、3つの「multiplybyElement」カーネルを1つにマージする必要があるかどうかを尋ねています。ここで、これらのカーネルのそれぞれは、(異なる)行列全体を読み取り、各要素に定数を乗算し、新しいスケーリングされた行列を格納します。

これらのカーネルはメモリ帯域幅に制限されるため(実際には計算は行われず、要素ごとに1つの乗算のみ)、行列が小さい場合を除いて、カーネルをマージしてもメリットがない可能性があります。その場合、GPUを非効率的に使用することになります。カーネルは直列に実行されるため(同じストリーム)。

于 2012-04-14T20:15:47.057 に答える