2

たとえば、マトリックスを操作している場合、ほとんどの場合、およびカーネルm x nに渡す必要があります。mn

ポイントの総数も知る必要がある場合はN = m*nパラメーターとして渡すN(そして帯域幅を消費する) か、各スレッドのカーネルでローカルに計算するNN(実際には 1 回だけ計算する必要があるにもかかわらず、多くの重複操作の処理能力を消費する) 必要があります。 ?

ここでは、大規模なデータ セットのコレクションに対して何千回も起動されるカーネルについて話しているため、実際にパフォーマンスを向上させようとしています。

Stride も別の例です。カーネルを起動する前に TBP と BPG がわかっているため、事前に計算できます。

4

1 に答える 1

1

その質問に答えるためには、少なくとも 1 つのことを知る必要があります。

私の制限要因は何ですか?

基本的に、次の 2 つのオプションがあります。

  • カーネルはメモリバウンドです-つまり、グローバルメモリから/への読み取り/書き込みが多い、および/またはアクセスされたメモリと比較して計算数が少ないことを意味します->そのような最適化について心配する必要はありません

  • あなたのカーネルは計算バウンドです-つまり、r / wトラフィックは計算の数によって完全に隠されています->説明した最適化は役立つかもしれませんが、必ずしもそうとは限りません

どちらがプロファイラーを実行し、カーネル分析を実行するかを知るための最良のオプション。

于 2013-05-18T07:12:12.700 に答える