2012-04-25 11 views
4

に近づくにつれて悲惨な減速を遂げました。私たちは、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に報告されており、再現でき、調査のために割り当てられていると回答しました。

+0

私はそれがよりスマートな(オーバーヘッドの)メモリ管理によるものだと思います。 – Anycorn

+0

@Anycornもしそうなら... ...しかし120回劣化する...地獄への道は良い意図で舗装されていますか? =)) – listar

+1

メモリをcontとして割り当てることはできますか?バイト?私は小さな塊のためにそれをする傾向があります。 – Anycorn

答えて

3

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

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