3

2Gb のメモリを搭載した GTX570 を使用していますが、1 回の cudamalloc 呼び出しで約 804Mb よりも多くのメモリを割り当てようとすると、問題が発生します。それがなぜなのか、誰にでもアイデアはありますか?それは私の最初の呼び出しなので、断片化ではないかと思います。

問題ない:

Memory avaliable: Free: 2336116736, Total: 2684026880
requesting 804913152 bytes
no error
Memory avaliable: Free: 1531199488, Total: 2684026880
requesting 804913152 bytes
no error
Memory avaliable: Free: 726286336, Total: 2684026880

問題:

Memory avaliable: Free: 2327601152, Total: 2684026880
requesting 805306368 bytes
out of memory
Memory avaliable: Free: 2327597056, Total: 2684026880
requesting 805306368 bytes
out of memory
Memory avaliable: Free: 2327597056, Total: 2684026880
4

1 に答える 1

1

これは、Windows WDDM サブシステムによって課される制限が原因です。割り当てることができるメモリの量には厳しい制限があり、次のように計算されます。

MIN ( ( System Memory Size in MB - 512 MB ) / 2, PAGING_BUFFER_SEGMENT_SIZE )

デスクトップ ウィンドウの場合、PAGING_BUFFER_SEGMENT_SIZE は約 2Gb IIRC です。これを回避するには、次の 2 つのオプションがあります。

  1. Telsa カードを入手し、デバイスのメモリ管理を WDDM から切り離して制限をなくす、専用の Windows TCC モード ドライバーを使用します。
  2. Linux をインストールするか、GPU コンピューティングに CUDA 対応のライブ ディストリビューションを使用します。Linux ドライバーには、デバイスの空きメモリ容量を超えるメモリ割り当てに関する制限はありません。
于 2012-12-13T10:25:22.307 に答える