1

関数 cuMemGetInfo() のおかげで、GPU デバイスの空きメモリと合計メモリを知りたいです。

// ----- Before any variable initialization -----
size_t free;
size_t total;
CUresult result=cuMemGetInfo(&free,&total);

私は結果を得ています:

Free memory : 4095 MB
Total memory : 4095 MB

64 ビットの Windows 7 で 6 GB のメモリを搭載した Tesla C2070 を使用しています。ただし、アプリケーションは 32 ビットで実行されています。私のコードは私に次のようなものを与えるはずです:

Free memory : 5376 MB
Total memory : 5376 MB // values given by the deviceQuery.exe example of CUDA

I 4095*1024*1024 = 4293918720 は約 2^32 (丸め後) です。実際、size_t は unsigned int (4 バイト) へのポインターです。

だからここに私の質問があります。たとえば、unsigned long を指すように size_t の定義を変更することは可能ですか?

ありがとう

4

1 に答える 1

2

size_t32 ビット ターゲット用にコンパイルする場合、通常は 32 ビットです。64 ビットを取得したい場合はsize_t、コンパイラを 64 ビット プラットフォームを対象とするように設定するだけです。

Visual Studio ビルド チェーンを使用している場合は、トピックに関するドキュメントを参照してください。Qt ビルド チェーンを使用している場合、それがどのように行われたかはわかりませんが、何らかの方法で確実に実行可能です。

あなたはコメントで言います:

Qt、CUDA、および Visual Studio の互換性のため、64 ビット アプリケーションを実行できません。それを回避する方法はありますか?

私の知る限り、それは不可能です。32 ビット用にビルドする場合は、32 ビットcuMemGetInfoで動作するの 32 ビット バージョンにリンクしますsize_t。それを回避することはできません。

ただし、メモリが機能する場合、VS2012、CUDA 6、および Qt 4.8 でビルドされた 64 ビット アプリケーションで過去に作業したことがあるので、ツール チェーンを 64 ビットで動作するように設定できるはずです。

于 2014-11-25T11:03:56.153 に答える