トップページ > 過去ログ > 記事閲覧
メモリに余裕があってもMV1LoadModelに失敗する
名前:みょも 日時: 2012/12/04 04:11

テストのため、適当なPMDモデルをロードに失敗するまで読み込むだけのプログラムを試したのですが、 メインメモリ・VRAM共にかなり余裕がある状態で、18体目のロードに失敗しました。 特に必ず18体目というわけではなく、モデルや起動状況には左右されます。 そのときのメモリ使用量は以下の通りです。 VRAM使用量 452MB/1536MB(OS使用量込み) プロセスのメインメモリ使用量 842,056KB 利用可能な物理メモリ 8180MB VRAMメモリ使用量はGPU-Z読み、メインメモリ使用量・利用可能物理メモリ量はタスクマネージャ読みです。 DXライブラリを使用した別のプログラム(複数MakeScreenや浮動小数点テクスチャ等を使用したもの)は VRAM1GB弱使用程度で読み込みエラーが起きます。(モデルの読み込める量は前述プログラムより減る) GPU-ZがうまくVRAM使用量を読めていないのかなとも思ったのですが、 BattleField3を動かすとゲーム中1300MB程度VRAMが使されているのが確認できるのでこちらは問題なそうです。 少し長いですが、Log.txtも貼り付けておきます。 0:システムの情報を出力します 0: DXライブラリ Ver3.09a 1: 論理プロセッサの数 : 8 1: OS Windows7 ( Build 7601 Service Pack 1 ) 101: CPU動作速度:大体2.79GHz 101: MMX命令を使用します 101: SSE命令が使用可能です 101: SSE2命令が使用可能です 102: CPUベンダ:GenuineIntel 103: CPU名:Intel(R) Core(TM) i7 CPU 860 @ 2.80GHz 103:COMの初期化... COMの初期化に失敗しました 103:メモリ総量:12286.05MB 空きメモリ領域:8889.43MB 103:タイマーの精度を検査します 104:精度結果 更新回数 マルチメディアタイマー:0 パフォーマンスカウンター:60 104: パフォーマンスカウンターを使用します タイマー精度 : 2742.929000 KHz 104: ソフトの二重起動検査... 二重起動はされていませんでした 105:ウインドウクラスを登録します... 登録に成功しました 105:ウインドウモード起動用のウインドウを作成します 108:ウインドウの作成に成功しました 108:ウインドウを表示します 159:IMEを無効にしました 161:ウインドウスタイルをウインドウモード用に変更します... 完了 180:DirectInput関係初期化処理 180: DirectInput7 の取得中... 成功 193: 引き続き初期化処理... 初期化成功 201: ジョイパッドの初期化... 215: 入力装置を見つけました 219: デバイスの登録名:Logicool Cordless RumblePad 2 USB 219: デバイスの製品登録名:Logicool Cordless RumblePad 2 USB 239: ジョイパッドの追加は正常に終了しました 239: ジョイパッドの初期化は正常に終了しました 239: マウスデバイスの初期化... 初期化成功 240: キーボードデバイスの初期化... 初期化成功 241:DirectInput 関連の初期化は正常に終了しました 241:DirectSound の初期化を行います 241:DirectSound インターフェースの取得を行います.... 成功 243:引き続きインターフェースの初期化処理... 成功 330: DirectSound デバイスを列挙します 331: モジュール名: ドライバ記述:プライマリ サウンド ドライバー 331: モジュール名:{0.0.0.00000000}.{5999cd43-01d0-4db8-8446-04d73d0445ee} ドライバ記述:スピーカー (Creative SB X-Fi) 331: モジュール名:{0.0.0.00000000}.{4294f591-a0cf-4d13-83b8-ca446ffb1d6f} ドライバ記述:スピーカー (Yamaha NETDUETTO Driver (WDM)) 331: モジュール名:{0.0.0.00000000}.{63c8a39b-c0df-4818-ae14-cb8765560819} ドライバ記述:スピーカー (Wireless Gaming) 331: 最大サンプリングレート:200.00KHz 最小サンプリングレート:0.10KHz 331: 総サウンドメモリ領域:0.00KB 空きサウンドメモリ領域:0.00KB 332: 利用可能サンプリング精度 332: プライマリ 16bit = OK 8bit = OK 332: セカンダリ 16bit = OK 8bit = OK 332: 利用可能チャンネル 332: プライマリ MONO = OK STEREO = OK 333: セカンダリ MONO = OK STEREO = OK 333:DirectSound の初期化は正常に終了しました 334:DirectDraw オブジェクトの取得を行います.... 成功 336:引き続き初期化処理... 初期化に成功しました 356:IDirect3D9Ex オブジェクトを取得します.... 成功 360:IDirect3DDevice9Ex オブジェクトを取得します.... ハードウエア頂点演算を使用します 618:成功 618:Driver:dlumd32.dll Description:NVIDIA GeForce GTX 580 618:画面のフォーマットは D3DFMT_X8R8G8B8 です 619:Zバッファのフォーマットは D3DFMT_D16 です 619:16bit カラーフォーマットは D3DFMT_R5G6B5 です 619:32bit カラーフォーマットは D3DFMT_X8R8G8B8 です 619:アルファ付き 16bit カラーフォーマットは D3DFMT_A4R4G4B4 です 619:アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 619:アルファテスト用 16bit カラーフォーマットは D3DFMT_A1R5G5B5 です 620:アルファテスト用 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 620:DXT1テクスチャフォーマットはD3DFMT_DXT1 です 620:DXT2テクスチャフォーマットは D_D3DFMT_DXT2 です 620:DXT3テクスチャフォーマットはD3DFMT_DXT3 です 620:DXT4テクスチャフォーマットはD3DFMT_DXT4 です 621:DXT5テクスチャフォーマットはD3DFMT_DXT5 です 621:描画用 16bit カラーフォーマットは D3DFMT_R5G5B5 です 621:描画用 32bit カラーフォーマットは D3DFMT_X8R8G8B8 です 621:描画用アルファ付き 32bit カラーフォーマットは D3DFMT_A8R8G8B8 です 621:描画用ABGR整数16ビット型カラーフォーマットは D3DFMT_A16B16G16R16 です 621:描画用ABGR浮動小数点16ビット型カラーフォーマットは D3DFMT_A16B16G16R16F です 622:描画用ABGR浮動小数点32ビット型カラーフォーマットは D3DFMT_A32B32G32R32F です 622:描画用1チャンネル整数8ビット型カラーフォーマットは D3DFMT_L8 です 622:描画用1チャンネル整数16ビット型カラーフォーマットは D3DFMT_L16 です 622:描画用1チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_R16F です 622:描画用1チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_R32F です 623:描画用2チャンネル整数8ビット型カラーフォーマットは D3DFMT_A8B8G8R8 です 623:描画用2チャンネル整数16ビット型カラーフォーマットは D3DFMT_G16R16 です 623:描画用2チャンネル浮動小数点16ビット型カラーフォーマットは D3DFMT_G16R16F です 623:描画用2チャンネル浮動小数点32ビット型カラーフォーマットは D3DFMT_G32R32F です 623:一度に描画できるプリミティブの最大数:16777215 623:対応している最大頂点インデックス:16777215 624:同時にレンダリングできるバッファの数:4 624:最大テクスチャサイズ 幅:8192 高さ:8192 624:テクスチャステージテンポラリレジスタ:使用可 624:減算合成のハードウェア対応:ネイティブ 624:ハードウェア頂点シェーダーバージョンコード:300 624:エミュレーション頂点シェーダーバージョンコード:エミュレーション無し 625:ピクセルシェーダーバージョンコード:300 630:バックバッファロック転送の時間:105nsec 一時的な描画可能バッファを使用した転送の時間:483nsec 630:バックバッファロックを使用します 630:Zバッファを作成します.... 成功 640:プログラマブルシェーダーを使用します 699:フォントの初期化を行います 701:フォントの初期化は正常に終了しました 710:文字コードバッファの初期化を行います... 完了しました 6401: 6401:Alloc memory dump  〜ダンプ省略〜 7012: Total size:720074809(703198.063kb) Alloc num:3244 7012: 7013:Read Model Convert Error : 頂点座標と頂点法線を一時的に格納するメモリ領域の確保に失敗しました 7016:VMD Load Error : 対応していない VMD バージョンです

Page: 1 |

Re: メモリに余裕があってもMV1LoadModelに失敗する ( No.1 )
名前:みょも 日時:2012/12/04 09:35

.NETだと32bitプロセスで確保できるメモリは1GB程度、という話を見かけたので、 VCで同じようなプログラムをつくったところ、限界は Total size:864385537(844126.500kb) Alloc num:3716 ピークワーキングセット 1052MB という状況でした。 Windows7だと1500MB弱が確保できる最大という検証も見かけたので・・・ 若干少ない気もしますが、このくらいが32Bitの限界なのかもしれませんね。 2GBまでは問題無いはずと思い込んでいた顛末ですが、同じ疑問をもつ人がいるかもしれないので あえて削除せずに無知を晒したままにしておきます(__; 過去ログで64Bit版の話も少し出ていたみたいなので、のんびり待っています(^^;
Re: メモリに余裕があってもMV1LoadModelに失敗する ( No.2 )
名前:管理人 日時:2012/12/05 00:13

うーんpmd重いですね・・・ただ必要メモリ容量を削減すると今度は モーション再生時のCPU負荷が高くなるので難しいところです・・・ 64bit版のDXライブラリはVisualC++用だけですが既にあります ( 64bitのソフトを作成するには VisualC++ ではプロジェクトの 「構成マネージャ」でプラットフォームに「x64」を追加します ) ビューアーもVer3.09から64bit版を付けるようにしましたので、 よろしければお使いください m(_ _)m // ビューアー http://homepage2.nifty.com/natupaji/DxLib/DxLibModelViewerTest.zip
Re: メモリに余裕があってもMV1LoadModelに失敗する ( No.3 )
名前:みょも 日時:2012/12/05 02:01

なんと、もう64Bit対応していたのですね。 そういえば、確かに64bit版モデルビュアーが付属していました・・・ 64bitでコンパイルしなおして上限150体で読み込んでみたところ、 上限150体すべて(メモリ使用量約6.2GB)読み込んでくれました。 ご指摘いただきありがとうございました。 しかし・・・DxLibDotNetのソースを使ってC#で64bit利用できるようにしてみようとしたものの、 知識があまりに足りなすぎて失敗しました(´・ω・`) 宜しければいずれ DxLib.dllのほうも64Bit対応版を出していただきたいです(__) >うーんpmd重いですね・・・ただ必要メモリ容量を削減すると今度は >モーション再生時のCPU負荷が高くなるので難しいところです・・・ 個人的には速度優先のままでいい気がします。 自由にモデルを追加読み込みできるツールを作っていたので、メモリ量が問題になりましたが(^^;
Re: メモリに余裕があってもMV1LoadModelに失敗する ( No.4 )
名前:管理人 日時:2012/12/09 02:56

C#版をx64対応させてみました よろしければお試しください http://homepage2.nifty.com/natupaji/DxLib/DxLibDotNet.zip // .NET用 64bitモードで起動されたら64bit版のDLLが、32bitモードで起動されたら32bit版のDLLが 使われるようにしましたので、DxLibのDLLファイルが二つあります > 個人的には速度優先のままでいい気がします。 > 自由にモデルを追加読み込みできるツールを作っていたので、メモリ量が問題になりましたが(^^; ご意見ありがとうございます メモリ容量は今後も増え続けそうですが、CPU速度はあんまり上がることが期待できそうに ないので速度を維持しつつ使用メモリ容量を削減できそうだったらやってみることにします
Re: メモリに余裕があってもMV1LoadModelに失敗する ( No.5 )
名前:みょも(解決済み) 日時:2012/12/09 06:54

自分でも何とかラップしてみたりもしたのですが、大量の関数があったのでカバーしきれなかったり ミスが混じってバグの温床になっていたりしていたので大変助かります。 特にAnyCPUに対応できるのは有り難いです。 DLLの両対応はさっぱりわからなくて諦めていました(^^; わがままを聞いていただいて、ありがとうございました。

Page: 1 |