4

近年、64ビットプロジェクトの多くでタイムクリティカルなタスクにCUDAを使用しています。数日前、開発システムのnvidiaドライバーを更新し、CUDAに関連するアルゴリズムの悲惨な速度低下を発見しました。いくつか掘り下げた後、cudaMallocの多くの連続した呼び出しが(次の呼び出しごとに)レイテンシーの増加につながることが明らかになりました:

void *p[65000];
for (int n = 0; 65000 > n; n++)
   cudaMalloc(&p[n], 256);

このコードは、バージョン285までのnvidiaドライバーで約4秒間実行されますが、ドライバーバージョン285以降、このコードの実行には8分以上かかります(120倍遅くなります)。さまざまなx64システムのGeForceGTX560Ti、GeForce GTX 460、およびQuadroFX4600でテストされています。

さて、質問は:それは新しいドライバーのバグですか?それとも、(より複雑な割り当てを通じて)CUDAの断片化とメモリ管理の改善に対処するための何らかの試みですか?または、他の何か?

更新:私はこの問題をnvidiaに報告し、彼らはそれを再現することができ、調査のために割り当てたと答えました。

4

1 に答える 1

3

OPのバグレポートに基づいてこれを追跡しました。すでに報告されている既知の問題であり、CUDA5.0で修正されていることがわかりました。CUDA5.0をダウンロードした場合プレビュー(登録済みのCUDA開発者が利用可能)リリース候補以降、改善が見られるはずです。

編集:修正はプレビューではなく、CUDA5RCにあります。したがって、この編集(2012年5月31日)の時点では、修正はまだ利用できません。

于 2012-05-30T00:23:07.507 に答える