0

cuda コードでメモリ リークをデバッグしているときに、いくつかのテストを実行していて、要求したもの以外に GPU に何が割り当てられているのか疑問に思いました。

ここに私が実行しているテストがあります:

__HOST__ __forceinline__
double memoryUsage()
{
    size_t free_byte = 0;
    size_t total_byte = 1;
    cudaMemGetInfo(&free_byte, &total_byte);
    return free_byte;
}

...
double mem = memoryUsage();
cudaMallocPitch((float**)&device_ptr, &pitch, width * sizeof(T), height);
ASSERT(mem - memoryUsage() == pitch * height);
...

もちろん、ここでのアサーションは失敗します。コードを少し簡略化しましたが、 からのエラーをチェックしていることに注意してくださいcudaMallocPitch

誰かがこれについて説明していますか?GPU のメモリ管理システム (malloc) はこのメモリを使用できますか? それとも、単に何かを誤解したのでしょうか?

400 x 400 x sizeof(uint16_t)それが役立つ場合は、配列のいくつかの割り当てに対して得られる値を次に示します。

pitch= 1024; mem-memoryUsage()= 0; pitch*height= 409600
pitch= 1024; mem-memoryUsage()= 1.04858e+006; pitch*height= 501760
pitch= 1536; mem-memoryUsage()= 1.04858e+006; pitch*height= 838656

ご協力いただきありがとうございます。

4

1 に答える 1

1

私は自分自身の質問に答えるつもりです。

この質問 ( CudaFree がメモリを解放しないように見えるのはなぜですか? ) に対する答えは、明らかに何が起こっているかです。1.04858e+006私の場合、GPU にメモリを割り当てるために使用されるページ サイズです。

于 2013-06-24T15:56:19.080 に答える