私は最近、GT430でMathematicaのCUDALinkを使い始め、CUDADotを使って150000x1038行列(encs)に1038x1行列(プローブ)を掛けています。encsとprobeの両方がメモリマネージャに登録されています。
mmEncs = CUDAMemoryLoad[encs];
mmProbe = CUDAMemoryLoad[probe];
これらの内積はGT430を最大限に活用できると考えたので、次のようにテストしました。
For[i = 0, i < 10, i++,
CUDADot[mmEncs, mmProbe];
]
実行中は、MSIの「Afterburner」ユーティリティを使用してGPUの使用状況を監視します。次のスクリーンショットは結果を示しています。
CUDADotの操作ごとに明確なピークがあり、全体として、この図は、GPU容量の1/4未満しか使用していないことを示していると思います。2つの質問:
Q1:ピークが50%で最大になるのはなぜですか?低いようです。
Q2:ピークの間にこのような重要な非アクティブ期間があるのはなぜですか?
ヒントを事前に感謝します!Q1の手がかりはありませんが、Q2は、ホストとデバイス間の意図しないメモリ転送が原因である可能性がありますか?
元の投稿以降の追加情報:CUDAInformation[]は「コア数->64」を報告しますが、NVIDIAコントロールパネルは「CUDAコア:96」を報告します。64コアがあるという誤った仮定に基づいて動作している場合、CUDALinkがGT430を十分に活用しない可能性はありますか?