近年、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に報告し、彼らはそれを再現することができ、調査のために割り当てたと答えました。