使用可能なメモリを超えていないにもかかわらず、デバイスメモリの割り当てに制限はありますか? 私は64メガバイトを割り当てることを試した後、エラーを以下の取得:cudaMallocと「メモリ不足」エラーの問題
cudaSafeCall() Runtime API error : out of memory.
はしかし、cuMemGetInfoに応じた200MBの左側の上にあります。
size_t size = 4096 * 4096 * sizeof (float);
cuMemGetInfo(&fr, &ttl); // fr indicates 284 MB
cutilSafeCall(cudaMalloc((void**) &tmp, size));
p1 = tmp;
cuMemGetInfo(&fr, &ttl); // fr indicates 220 MB
cutilSafeCall(cudaMalloc((void**) &tmp, size)); // this fails !!!
p2 = tmp;
私は何をしないのです。ここで
はシナリオですか?
私が使用しています:
Cuda compilation tools, release 3.2, V0.2.1221
NVidia Driver 260.19.26
Linux(Slackware) x86
更新:
この動作は非常に非決定的です。場合によっては上記のケースが成功し、何のエラーもなく正しい結果が得られます。
メモリの断片化? 32 MBの2つのブロック、または16 MBの4つのブロックを割り当てることができますか? – Thomas
あなたはおそらく正しいでしょう。私は8MBの空きメモリを300 * 1MBのブロックに割り当てることができました。私はそれを受け入れることができるようにあなたのコメントを答えに変換してください。 – Kylo