に近づくにつれて悲惨な減速を遂げました。私たちは、64ビットプロジェクトの多くでタイムクリティカルなタスクにCUDAを使用しました。数日前、私は開発システム上のnvidiaドライバを更新し、CUDAに関連するアルゴリズムの悲惨な減速を発見しました。このコードはnvidiaドライバのcudaMallocがバージョン285
void *p[65000];
for (int n = 0; 65000 > n; n++)
cudaMalloc(&p[n], 256);
バージョン285までのNVIDIAドライバで約4秒間実行されますが、開始:いくつかの掘削した後、それは(次の各呼び出しで)待ち時間の増加にcudaMallocリードの多くの連続的な通話をすることが明らかになりましたこのコードのドライババージョン285の実行には8分以上(120倍遅く)かかります。 GeForce GTX 560Ti、GeForce GTX 460、およびQuadro FX4600を異なるx64システムでテストしました。
まあ、問題は:それは新しいドライバのバグですか? CUDAの断片化に対処してメモリ管理を改善しようとする試み(より複雑な割り当てを通じた)かもしれませんか?または、他の何か?
更新日: この問題はnvidiaに報告されており、再現でき、調査のために割り当てられていると回答しました。
私はそれがよりスマートな(オーバーヘッドの)メモリ管理によるものだと思います。 – Anycorn
@Anycornもしそうなら... ...しかし120回劣化する...地獄への道は良い意図で舗装されていますか? =)) – listar
メモリをcontとして割り当てることはできますか?バイト?私は小さな塊のためにそれをする傾向があります。 – Anycorn