昔の最近の出来事(2012.06)

2012/06/30

昼頃起床。

もそもそとコーディング。32bitと64bitのソースコードのユニバーサル対応 を行ってみたり。まぁ、基本的には64bit対応すれば32bitも包含されると いう感じですが。

POVrayの3.7RC6が来ていたり。まだRCらしい。そういや3.6も64bit対応版が存在 しているのに今気づきました。でも、3.6はマルチプロセッサ対応ではありません ので、64bit対応されただけでは少々残念な感じかも。

2012/06/29

日付越え。

眠くて死亡。

2012/06/28

日付越え前に帰着。

The Stanford 3D Scanning Repository で一番ポリゴン数の多い Stanford Lucy を何気にOpenGL表示してみたり。 随分前にPOVのレンダリングを 試みたところ、メモリが足りなくてあえなく撃沈してました。 頂点数14027872、三角ポリゴン数28055742のモデルなので、 GPUメモリには乗り切らないとは思いますがどうなるか?

で、試してみたところ意外と大丈夫でした。恐るべし。 でもプロセスサイズは7.5GBくらいになってます(^^;

Stanford Lucy on OpenGL

2012/06/27

日付越え前に帰着。

もそもそとコーディング。

2012/06/26

遅めに帰着。

マルチスレッドでGMP/MPFRが使えるようになったので、マンデルブロ集合描画 プログラムに使用するCPU数を指定できるようにしてみたり。 std.parallelismを使用したのですが、何故か defaultPoolThreads()の指定が 一度しか使えない感じにあれぇ?と思ったり。結局、parallelism.d内の unittestのコードを参考にして解決。std.parallelismってまだドキュメントが 存在していないのが何故だろうという気も。手軽にループをマルチスレッド化 できてとても良いのに。

2012/06/25

早くもなく遅くもなく。

先日作成した10000x10000の画像はマンデルブロ集合描画プログラムで作成した のですが、32bitコンパイルだった為12000x12000とかにするとギリギリアウトで メモリ不足になってました。で、64bitでもっと大きなサイズを(とは言っても CreateDIBSection()の上限問題はクリアできてませんが)と64bit化してみたり。 ところが、なぜかSegfaultするバイナリが出来上がったり。GMPのグローバル変数 として mpf_precision という変数が用意されているのですが、どうやら 特に修飾せずに使っていたのがダメだった模様。sharedで修飾してグローバル 変数化すればひとまず通ったり。で、これがラッキーな所だったのですが、 GMP/MPFRを使用するとマルチスレッドでずっこけていたのがこの修正の影響か ずっこけなくなりました。32bitの方でも同様の直し方でGMP/MPFRの マルチスレッド動作がOKになったり。そういう事だったのか......

ただ、GMP/MPFRはチューニングが効き過ぎているせいか、8CPU並列で動作 させるとWindows全体がかなりもっさりな感じに(^^;

2012/06/24

昼前起床。

OpenGLを使用した画像の表示。以前 よりgdcのアップデート追従の為にメンテしている手持ちのテストコードを64bit化して、 画像サイズがどこまでいけるか試してみたり。単純にテクスチャを巨大にするのでは OpenGLで指定できる最大テクスチャサイズ上限に引っかかってしまうので256x256pixを単位 としたポリゴンをつなぎ合わせて巨大画像を表示するという感じです。

OpenGL画像表示テスト

スナップショットの画像は10000x10000pixを表示してみた所です。
A4サイズで色々見た感じは以下。

┌─────┬──────┬────────┬──────────┐
│   dpi    │pix 幅x高さ │ 使用GPUメモリ  │10000x10000画素数比 │
├─────┼──────┼────────┼──────────┤
│A4/ 350dpi│ 2894x 4093 │約100MB〜180MB  │    11.845142 %     │
│A4/ 600dpi│ 4961x 7016 │約280MB〜330MB  │    34.806376 %     │
│A4/1200dpi│ 9921x14031 │約850MB〜1GB以上│   139.201551 %     │
└─────┴──────┴────────┴──────────┘

表示ウインドサイズが小さければ、 どれも1GBのGPUメモリに載っているので、拡大/回転などを行っても表示にもたつきなどは 出ませんでした。フルスクリーンにすると、A4/1200dpiはギリギリアウトでGPUメモリ容量を越える為、 途端にモッサリ表示になる感じでした。
ただ、1200dpiあたりになると、表示の為だけなのに使用するGPUメモリ量としては多過ぎるかもなぁと 思わなくもありません。だって、メインメモリが850MBもあれば、普通のWeb用CGなんかは全く問題無く 描けるレベルだと思うからです。

なんとなく見てしまっていた「ATARU」。結構展開に無理のある話もありましたが、 面白かったと思います。

2012/06/23

起きたら夕方。寝すぎ。

そういえば、新PCのNVIDIAプロパティでは、温度を見る事ができません。 何か良いGPUのモニターツールは無いものかと探してみたところ、 GPU-Zなるソフトで色々見る事ができるらしいのを知ったり。 で、10,000,000三角ポリゴンのThaiStatueを自作の表示アプリでOpenGL表示し、 ぐりぐり動かしている時の負荷を表示してみたのが以下。

ThaiStatus on OpenGL GPU-Z 結果

因みにGPU Loadが0%になっているのは、スナップショットを取る為に ウインドのフォーカスを切り替えたから。OpenGL窓で動かしている間の GPU Loadは90%前後くらいでした。
搭載しているGPUのメモリは1GBなので、ぎりぎりセーフでGPUメモリ に乗っている感じみたい。
温度は徐々に上がってますが、今回のアプリ表示ではせいぜい62℃ くらいでサチるようです。旧PCのGPUでは何もしてなくても常に60℃くらいで、 手持ちアプリでOpenGL表示したところ72℃くらいになるという感じでした。 現在のGPUは表示負荷に応じて動的にクロック周波数を切り替えているようで、 テキストエディットしているくらいの負荷であれば、50MHzくらいまで クロック周波数を下げ、温度も37℃と省電力動作を行っているようです。 ローディング後、少し何もしてない状況にしてから、いきなりぐりぐり動かすと、 最初に若干のつっかかりを感じるのですが、クロックを上げる期間がある のに関連しているのかも知れません。
こういう感じで見ていると、HDゲームの表示負荷がいかに高いかをうかがい 知る事ができたように思います。

VMwareでx86_64のFedora17を動かす事ができたので、先日試したのと同じ gdcをビルドしてみたところ、gnu/stubs-32.hが見つからないというコンパイルエラー。 Webで検索してみたところ、glibc-devel.i686をインストールすれば良さそう。 yumでインストールしてみたところ先に進んだり。ビルドの様子を見ていると -m32付きでlibphobosのソースをコンパイルしてたり。その後-m32無しで コンパイルしていた為、マルチビルドを行っている模様。で、ほどなくして エラー無くビルド完了。make installして簡単なソースをコンパイルして みた所では問題無し。また、-m32付きでもコンパイル&実行できました。 マルチビルドも問題無いようです。MinGWの方に来ないかなぁ?

2012/06/22

日付越え。

DMD2.059マージされたgdcをFedora17でビルド。gccのベースに スナップショットの gcc-4.8-20120617 を使用してみたり。 パッチの作り方をミスっているのか、setupスクリプトでパッチが あたらなかったり。それを手で直してビルドしてみたところ、 エラー無くビルドできたり。Fedoraだと手持ちコードで試せるのが 無くてしょんぼり。

「大神絶景版」。「大神」がPS3でHDリマスター。てか出るの遅いよ! 最近はHDリマスターされたゲームが色々出ていますが、 イマイチなリマスターも少なくないようです。折角出すのなら愛のある リマスターを希望。

そういや、VMwareでx86_64版のFedora17 liveを起動できなかったのですが、 BIOS設定で intel-vtが有効になっていなかったのが理由でした。 BIOSメニューのどの階層にスイッチがあるのか判らなかったのですが、 まさかセキュリティメニューに入っているとは。で、x86_64のブートイメージ を食わせてみたところ、ちゃんと起動しました。

2012/06/21

日付越え。

DMD2.059マージされたgdcをFedora17でビルドしてみたり。ベースとなる gccはgcc-4.7.1を使用してみたのですが、gdc本体のコンパイルでエラー。 一つは、

../../gcc-4.7.1/gcc/d/d-lang.cc: In function ‘void d_write_global_declarations()’:
../../gcc-4.7.1/gcc/d/d-lang.cc:712:32: error: ‘finalize_compilation_unit’ was not declared in this scope
make[2]: *** [d/d-lang.glue.o] Error 1

というエラー。確かにgrepしてもfinalize_compilation_unit()はどこにも見つからず。 でも、cgraph_finalize_compilation_unit()という関数は存在している ようなので、それに置き換えて先に進めてみたところ再度エラー。

../../gcc-4.7.1/gcc/d/d-objfile.cc: In static member function ‘static void ObjectFile::outputThunk(tree, tree, int)’:
../../gcc-4.7.1/gcc/d/d-objfile.cc:744:36: error: ‘symtab_node’ was not declared in this scope
../../gcc-4.7.1/gcc/d/d-objfile.cc:745:21: error: expected ‘)’ before ‘funcn’
../../gcc-4.7.1/gcc/d/d-objfile.cc:745:26: error: ‘symtab_add_to_same_comdat_group’ was not declared in this scope
../../gcc-4.7.1/gcc/d/d-objfile.cc: At global scope:
../../gcc-4.7.1/gcc/d/d-objfile.cc:996:1: warning: unused parameter ‘name’ [-Wunused-parameter]
../../gcc-4.7.1/gcc/d/d-objfile.cc:1003:1: warning: unused parameter ‘s’ [-Wunused-parameter]
make[2]: *** [d/d-objfile.glue.o] Error 1

どのシンボルも見つけられず。これ、gcc-4.8向けの関数じゃなかろうか? 4.7.xでビルドできる事を確認していないのだろうか?......

2012/06/20

早くもなく遅くもなく。

そういやOpenGLを使用した手持ちコードがいくつかあるのですが、 新PCで動かした時、ウインドを大きくしても60fpsを維持するものの、 なんかヌルヌル動いていない気がしたり。フレームレートが落ちる 感じだと判りやすいのですが、なんとなく突っかかっているよう に見える気がするという、説明に困る感じ。

Sleep()による時間待ちでフレームレートを維持していたのを、 Sleep()待ちを削除して、wglSwapIntervalEXT()で垂直同期を取る ようにしたら突っかかりが無くなったり。 でもイマイチよく判らない事がひとつ。

  1. wglSwapIntervalEXT(1)で同期を取るようにした。
  2. アプリ起動。突っかかり無し。
  3. アプリ終了。
  4. wglSwapIntervalEXT()の実行自体を削除して再コンパイル。
  5. アプリ起動。突っかかり無し?????
  6. アプリ終了。
  7. wglSwapIntervalEXT(0)を実行するようにして再コンパイル。
  8. アプリ起動。同期を取ってないので超高速描画。

という感じになったのですが、手順の4、5で何故同期を取る動作が継続される のかがよく判らず。

2012/06/19

早くもなく遅くもなく。ずぶ濡れで帰着。

ちょろりコーディング。

2012/06/18

日付越え。

ちょろりコーディング。

2012/06/17

昼過ぎ起床。

gdc 64bit。なんとか自力ビルドに成功。libphobosのconfigure実行で エラーしていたのは、インストールパスに予めライブラリを用意して いなかったから。本当はクロス環境を作る要領でgccを2回ビルドしなくては ならない所なのかも知れませんが、TDM-GCCに 付属されるライブラリ(venix1氏のTLS修正パッチ済み)をそのまま使う事にしました。 メインラインがDMD2.059マージされたので、そろそろgcc-4.7.0をベースに MinGW向けにもビルドできるようになってくれないかなぁ?と期待したい所。

64bit環境のlibglutの件。こちら のコンパイル済みライブラリを使用させていただきました。 リンクは glut64.dllを直接指定する感じで。

gdc 64bitで、WinAPIバインディングを使用したところ何故かlongへのキャストがエラー すると言っていた件。関数の引数のキャストに怒られていると思っていたのですが、 戻り値のキャストに対して怒られていたというTANEのチョンボでした(^^; とりあえず明示的なキャストを入れてはみたものの、例えば、 C言語では#defineを使ってSendMessage()の結果をラップするようなマクロ系関数 の場合、戻り値の型はLRESULTそのままになると思うのですが、WinAPIバインディングでは LRESULTはint型と同じとみなして、「int」を直接書いてあったりするのが 少しマズいかもと思ったりも。

gdc64 bitでコンパイルした画像表示を行う手持ちコードで、巨大画像が開けない 件。どうやらCreateDIBSection()が失敗している模様。いかんせん25000x25000 ピクセルなので、ギリギリ2GBを越えるメモリサイズが必要ではあるものの、 10GB以上空きメモリがある状況ではメモリ不足が理由ではないような。 Webで検索すると こちら(英語)で同じ質問をしてる人が居るようですが、2GBの制限があるのだろう という回答以上の事は得られていないみたい。でもまぁ、ディスプレイ表示に必要な 分だけあれば基本的には良いハズで、2GBを越えるならばタイリングするなりの工夫を 自分でしろって所かも知れないなぁ。

やっとこメール環境を新PCに移行。Thunderbirdを使用しているのですが、 旧PCからのメッセージ移植は 「Application Data/Thunderbird/Profiles/*/Mail/*/Inbox」をコピーすれば OKそう。普段どこに保存されているのか意識してないと困る感じがしなくも ありませんが、それはそれとして。で、送信メッセージの折り返し設定が オプションなどのダイアログから変更できなくなっていたり。 「オプション→詳細の一般タブ→設定エディタ」で mailnews.wraplengthを0にすればOKでした。 プリビューできない自動折り返し(出した後に読みづらい事が判る)なんて不便でしかた無い と思うのですが、どういう思想でデフォルト設定値を決めているのだろう?

以前知ったSVG少女なるSVGで作成したアニメ。 IE9用という事で、IE8では表示すらできませんでしたが、FireFoxやChromeではどうにか 再生できてました。で、新PCでフルHDくらいまで広げて様子を見てみたり。 結果は、IE9ではコマ落ちもしないし特に問題無し。ですが、FireFoxも特に問題無しな気が。 Chromeはローディング途中で応答無しに なってしまったのですが、しばらく待つと一応再生されてこちらも表示には問題 が無いように思ったり。すでにベンチマークとしては負荷が足りないものに なっているのか?

64bitでOpenGLが使えそうな感じになったので、何気にハイポリのAsianDragonを WavefrontOBJ形式にして読み込んでみたり。まぁ、激重い感じでかろうじて表示 できればラッキーくらいの感じに思っていたのですが、表示してみたところ、 あれあれ??リアルタイムに動かせちゃいますよ??そんな感じになってました(^^;

AsianDragon on OpenGL

ThaiStatueの方もいけるんじゃね?と思ってそちらも試してみたのですが、こちらも リアルタイムに動かせちゃう感じ。うーむ、恐るべし。てか、POV-Rayでレンダリング するのに、カメラ位置をあーでもないこーでもないって直していたのがアホ臭くなって しまいましたよ(^^;;; 因みに、頂点データ等を ファイルからメモリに読み込んで、メモリからOpenGLのモデルリストに登録して それを表示の度にglCallList()しているという感じ。一時的にメモリに保持している のでAsianDragonの場合でプロセスサイズが1.5GB、ThaiStatusの場合で プロセスサイズが 2.88GBになってます。64bitじゃないと無理な感じですね。 因みに、ThaiStatueの方は像の土台の裏側に「XYZ RGB」という署名(?)が堀り刻まれて ました。
Wings3Dで読み込ませてみましたが、32bitアプリのためメモリ割り当てができずに Abort。64bit対応して欲しくなったかも。あ、Blenderは64bit対応版があるっぽい。

2012/06/16

昼過ぎ起床。

gdc 64bit。自力ビルドを試しているのですがイマイチうまくいかず。 MSYSとの関係がハチャメチャになっていたのを直す事にしたり。 結局、以下のような感じにしてみたり。


結局、MSYSをツールチェーンに使うという感じでしょうか。

で、ライブラリ群は「./configure --prefix=/mingw --target=x86_64-w64-mingw32」 でconfigure実行してmake installするという感じ。これが正しい方法なのか否かが イマイチよく判りませんが。

とりあえずgdcのビルドを試してみたり。コンパイラ本体のビルドは できていそうなのですがlibphobosのconfigure実行でエラー。

gdc。メインラインがDMD2.059に追従したもよう。Fedora17でビルドを試して みたのですが、gcc/d/d-lang.ccのコンパイルでエラー。

2012/06/15

日付越え前に帰着。

Fedora17。Fedora16までは何もしなくてもsshでログインできていたような 気がするのですが、Fedora17ではサービスを自分でenableにしないと ダメらしい。ついでにCygwinの pingが 「ping: socket: Operation not permitted」なるメッセージを出して 実行できなかったのにも目くらまされて何がダメなのかすぐに判らなかったり。 CygwinのpingはWindows7のファイアーウォールに引っかかっているから というのが原因のようでしたが、設定を変えても解決せず。ノートンに 色々阻まれている模様。しかたないので、Win7に入っているpingを使用 する訳ですが、SJIS表示で文字化けまくり。うまくいかないもんです。

2012/06/14

遅めに帰着。

何気にVMwareのインストールを試したり。前にダウンロードした3.0.1 をインストールしてみたところ、インストールはできたのですが Fedora17のインストールイメージの実行が途中で停止。最新の4.0.4 を取得してみたり。。で、x86_64版のFedora17 liveを試してみたのですが、 これも立ち上がらず。i686版の liveだったら立ち上がったり。 うーむ、つまらん。

2012/06/13

遅めに帰着。

gdc 64bit。先日のコンパイルは結局失敗。32bitの方は大丈夫そうです。

OpenGL 4.xを使用する為に、GLEWのコードを手作業で移植。試す所まで到達できず。

2012/06/12

早くもなく遅くもなく。

gdc 64bit。WinAPIのバインディングで何故かlongへのキャストがエラーすると いう現象を調べたり。どっかでこれに関連した話を見たような?と思い出し、 検索してみたところ、これ と同じ話だと思われるのですが、直っているようにも取れる気が。 んー、やはり自分でコンパイルしてみるか。

make の-jオプションを付けると並列コンパイルが可能になるのですが、 makeの中でconfigure実行してる場合でもうまく動くのか?と思ったり。 gdcのビルドで試してみたのですがなんとなく大丈夫な模様。ただし、 コンソールに表示されるメッセージはまぜこぜになっているので訳が 判りませんが(^^;

2012/06/11

遅めに帰着。

gdc 64bit。GetOpenFileName()でファイルダイアログが開かない原因を調べたり。 結論から言うと、OPENFILENAMEW構造体のサイズが変更されている為。 メンバー変数が追加されているのに加えて、メンバー変数が8byteアライメント になっていました。メンバー変数の追加は良いとして、アライメントはどうやれば 調節できるんだっけ?と調べてみたところ、「align()」というキーワードを 使えば良いらしい。ひとまずそれで調節したところ構造体のサイズがC言語で調べた ものと同じになったので良し。コンパイルして実行してみたところ、ファイルダイアログ を開くことができました。
流石にこのレベルの変更があちこちに必要となると、詳しい人が本気で対応してくれないと 使い物にはならないだろうなぁ。

で、手持ちの画像表示コードでも 巨大画像が開けるハズと思い、GIMPで16384x16384の PNGとJPGファイル作成して、読み込み&表示。OKそうだったのですが、プロセスサイズが せいぜい1GBにしかならなかったので、これだとつまらんと思い、25000x25000のPNGとJPG ファイルを作成して、読み込みを行ったところSegfault。一応ファイルエクスプローラの サムネイル表示やWindowsフォトビューアーでの表示はできているので、ファイルに 異常は無いハズ。

そういや、Windowsフォトビューアーで巨大画像を表示したときの、タスクマネージャー によるプロセスサイズなどを観察していたのですが、それっぽいサイズのプロセスが 見当たらなくて不思議に思ったり。どうやらメモリ表示に「プライベートワーキングセット」 なるものと「ワーキングセット」なるものがあり、フォトビューアーは 「プライベートワーキングセット」の方は全然増えずに「ワーキングセット」の方で 4GBとか使っていたりするもよう。 両者の違いは こういう事 らしい。色々見られて便利です。

2012/06/10

昼前起床。

gdc 64bit。WindowsAPIバインディングをコンパイルエラーしないように 直してみたり。色々つっかかりながらなんとなくリンクまでできたものの、 実行してみたらものの見事にヘンテコな動作になってみたり。

つっかかりどころは以下のような感じ。


ヘンテコ動作は単純に子ウインドの生成の為に実行したCreateWindowEx()に失敗 しているからのようなのですが、プロシージャ関数が全く呼ばれていないようなので、 ウインドクラスの登録に失敗しているのか?と思ったりも。
原因判明? WNDCLASSEX.lpszClassNameに string型の変数をwcahr*に直接 キャストして入れていたのですが、それをUTF16に変換すると大丈夫な感じに なってみたり。 でも、ファイルダイアログが開かないとか、TreeViewが何か変とか、よく見ると色々ダメそう。

WNDCLASSEX.lpszClassNameの件は 32bitコンパイラではなんとなく大丈夫そうだった のですが、同様の修正を入れたり。デグったりはしない模様。あと気づいていなかった のですが、RegisterClassEx()で同じ名前のクラスを二度登録すると二度目の関数 実行で失敗してたり。これはWindowsXPでは大丈夫だったのですが、Windows7ではダメ らしい。

WindowsAPIバインドの中のコードで、int/uintをlong/ulongにしなくてはならない の抜けがあちこちに散りばめられている模様。例えばTreeViewのアイテム指定で TVI_ROOTという定数定義がありますが、uintの 0xffff0000 としてハードコーディング されてるのはulongに対応するなら -0x10000 とするべきとか、 NMHDR構造体の中にUINT_PTRでなくてはならないメンバー変数が UINTで宣言されてて アライメントが変になっているとか(これはバグのような気が)。

2012/06/09

昼過ぎ起床。

昨日は夜更かしして久しぶりにTOP絵用にCGを描いてみたり。といってノープランで 描き始めたラクガギですが(^^;

Eテレ版の「日常」再放送。以前に録画で観たものですが、なんとなく観てしまう。 そして笑ってしまう。そんな感じ。

そういや時々観ている東京MXなのですが、電波状態が猛烈に悪い時は映像が全く 映りません。そういえば東京スカイツリーって開業したって言ってたような? と思ったのですが、まだ電波塔として開業している訳ではないようです。 Webで検索してみたところ、ラジオ放送はスカイツリーから送信しているようですが、 TVの方はまだという感じみたい。因みに、東京MXは物理チャンネルが20chから16chに 変更されるらしい。なので、切り替わった時には再チューニングが必要かも。

gdcの64bit版を試してみたり。MSYSとの関係がよく分からなくて自力ビルドできない ので、ひとまず出来合いのバイナリを試してみたり。で、簡単に以下のような コードをコンパイル&実行。

$ cat bigmemtest.d
import std.stdio;
import std.string;
import std.conv;

int main(string[] args)
{
  if( args.length != 3 ){
    writef("%s num1 num2\n",args[0]) ;
    return(-1) ;
  }

  int NUM1 = std.conv.to!(int)(args[1])*1024*1024 ;
  int NUM2 = std.conv.to!(int)(args[2]) ;

  version( GNU     ) writef("I am GNU\n"    ) ;
  version( Unix    ) writef("I am Unix\n"   ) ;
  version( Windows ) writef("I am Windows\n") ;
  version( MinGW   ) writef("I am MinGW\n"  ) ;
  version( cygwin  ) writef("I am cygwin\n" ) ;
  version( Win32   ) writef("I am Win32\n"  ) ;
  version( Win64   ) writef("I am Win64\n"  ) ;
  version( Posix   ) writef("I am Posix\n"  ) ;

  int[][]  buf ;

  for( int i=0 ; i<NUM2 ; i++ ){
    buf.length =  buf.length+1 ;
    buf[i].length=NUM1 ;
    buf[i][]=i ;
    writef("buf[%d] alloc success.\n",i) ;
  }

  int error=0 ;
  for( int i=0 ; i<NUM2 ; i++ ){
    for( int j=0 ; j<NUM1 ; j++ ){
      if( buf[i][j]!=i ){
        writef("Compare Error i=%d j=%d\n",i,j) ;
        error++ ;
        break ;
      }
    }
  }

  if( error==0 ){
    ulong d = cast(ulong)(NUM1)*cast(ulong)(NUM2)*cast(ulong)(int.sizeof) ;
    writef("Memory alloc success 0x%08x%08x byte.\n", (d>>>32), (d&0xffffffff)) ;
  }else{
    writef("Memory alloc failed.\n") ;
  }

  return(0) ;
}

$ gdc -v
Using built-in specs.
COLLECT_GCC=C:\MinGW64\bin\gdc.exe
COLLECT_LTO_WRAPPER=c:/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/4.6.1/lto-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../gcc-4.6.1/configure --build=x86_64-w64-mingw32 --enable-targets=all --enable-languages=c,d --enable-libgomp --enable-lto --enable-libstdcxx-debug --enable-version-specific-runtime-libs --enable-fully-dynamic-string --with-gnu-ld --disable-werror --disable-nls --disable-win32-registry --prefix=/crossdev/MinGW64/ --with-local-prefix=/crossdev/MinGW64/ --with-pkgversion=tdm64-1 --with-bugurl=https://bitbucket.org/goshawk/gdc/issues --disable-bootstrap
Thread model: win32
gcc version 4.6.1 20110627 (gdc hg r:(), using dmd ) (tdm64-1)

$ gdc -O2 bigmemtest.d
$ ./a.exe 3 1024
I am GNU
I am Windows
I am MinGW
I am Win64
buf[0] alloc success.
buf[1] alloc success.
  : 中略
buf[1023] alloc success.
Memory alloc success 0x0000000300000000 byte.

12GBの割り当てに成功。これを -m32 でコンパイルして実行すると、もちろん core.exception.OutOfMemoryError例外で死亡。
ちょっとした事でダメになったりはしなさそうですが、MSYSとの関係が分かってない ので、ライブラリのビルドだとかどうすりゃいいんだ?って感じ。

とはいえ、タスクマネージャーでプロセスを見てみると *32 付きのプロセスが 圧倒的に多いですから、64bitに移行するのは結構大変かもなぁ?と思ったりも。

64bit gdc。これでいいのかなぁ?と思うような入れ方でMSYSを組み合わせてみたり。 基本的には64bitのコンパイラにパスが通っていればいけそうな予感。で、 libjpegなどを --target=x86_64-w64-mingw32 でconfigure実行してコンパイル&インストール してみたり。で、手持ちのWindowsアプリコードをコンパイルしてみました。 結果はNG。 WindowsAPIのバインディングが Version(Win64)に対応してない予感。うーむ。

GIMP2.8を入れてたのですが、何気に64bit対応アプリらしい。で、 A4の600dpi(4960x7016pix)で塗りつぶしたレイヤーを何枚か追加してみた のですが、何故か1.6GB以上のメモリが消費されない模様。設定で、 タイルキャッシュサイズを大きくすればその枠まではメモリを使う 感じみたい。2GB超えまでは確認できたのですが、思ったよりもジャブジャブ 使ってくれない感じ。
あと、GEGLがテスト的に使用できるようになっているようです。 GEGLと言えば大分前にその存在を 知ったのですが、全然移行する様子が無かったのでもう使わないのかと 思ってました。一応使う方向で進めているんだと思ったりも。 GIMP中では表示方法の一つとしてGEGLを選択できるようになってますが バグっていそうな予感。

2012/06/08

昼過ぎ起床。

The Stanford 3D Scanning Repository から更なるハイポリモデルを探してレンダリングしてみたり。.ply形式で AsianDragonの変換プログラムがすぐに使えそうな ThaiStatueを入手。 10000000三角形ポリゴンのモデルですが、AsianDragonの1.385倍くらいの 物量なので、ちょっと物足りない気がしたりも。自作のply→POV変換 プログラムがAsianDragon専用になっていたのを直すのに時間がかかったり しながらどうにかレンダリングできる感じに。カメラの調節に手間取り つつ以下のような感じで。

ThaiStatue

----------------------------------------------------------------------------
Parser Time
  Parse Time:       0 hours  1 minutes 28 seconds (88.031 seconds)
              using 1 thread(s) with 88.031 CPU-seconds total
  Bounding Time:    0 hours  0 minutes  0 seconds (0.000 seconds)
              using 1 thread(s) with 0.000 CPU-seconds total
----------------------------------------------------------------------------
Render Options
  Quality:  9
  Bounding boxes.......On   Bounding threshold: 3
  Antialiasing.........On  (Method 1, Threshold 0.300, Depth 3, Jitter 1.00,
 Gamma 2.50)
----------------------------------------------------------------------------
Render Statistics
Image Resolution 1080 x 1920
----------------------------------------------------------------------------
Pixels:          2249713   Samples:          610821   Smpls/Pxl: 0.27
Rays:          285539534   Saved:                 0   Max Level: 2/5
----------------------------------------------------------------------------
Ray->Shape Intersection          Tests       Succeeded  Percentage
----------------------------------------------------------------------------
Mesh                         495631564       153007167     30.87
Bounding Box               55408648245     15076072467     27.21
----------------------------------------------------------------------------
Shadow Ray Tests:         128414750   Succeeded:              46314167
Shadow Cache Hits:         46314103
----------------------------------------------------------------------------
Radiosity samples calculated:           565358 (42.14 %)
  discarded due to low quality:          33196
  retained for re-use:                  532162
Radiosity samples reused:               776315
Radiosity sample rays shot:          282679000
Radiosity octree nodes:                  37055
Radiosity octree samples/node:           15.26
Radiosity blocks examined:          1768774939
Radiosity blocks passed test 0:     1768774939 (100.00 %)
Radiosity blocks passed test 1:      213910629 (12.09 %)
Radiosity blocks passed test 2:      133865633 (7.57 %)
Radiosity blocks passed test 3:        1421086 (0.08 %)
Radiosity blocks passed test 4:        1266805 (0.07 %)
Radiosity blocks passed test 5:        1195541 (0.07 %)
Radiosity blocks rejected:          1767579398 (99.93 %)
----------------------------------------------------------------------------
Radiosity Depth 0 calculated:           565358 (42.14 %)
Radiosity Depth 0 reused:               776315
Radiosity Depth 0 rays shot:         282679000
----------------------------------------------------------------------------
Radiosity (final) calculated:           542707 (41.14 %)
Radiosity (final) reused:               776311
Radiosity (final) rays shot:         271353500
----------------------------------------------------------------------------
  Pass     Depth 0           Total
----------------------------------------------------------------------------
  1             30              30
  2            119             119
  3            464             464
  4           1992            1992
  5+         20046           20046
  Final     542707          542707
----------------------------------------------------------------------------
  Total     565358          565358
  Weight     0.600
----------------------------------------------------------------------------
Peak memory used:        1867735040 bytes
----------------------------------------------------------------------------
Render Time:
  Photon Time:      No photons
  Radiosity Time:   0 hours  0 minutes 12 seconds (12.371 seconds)
              using 8 thread(s) with 83.799 CPU-seconds total
  Trace Time:       0 hours  5 minutes 39 seconds (339.161 seconds)
              using 8 thread(s) with 2373.037 CPU-seconds total
----------------------------------------------------------------------------
CPU time used: kernel 4.54 seconds, user 2545.20 seconds, total 2549.74 seconds.
Elapsed time 441.79 seconds, CPU vs elapsed time ratio 5.77.
Render averaged 4693.61 PPS (813.26 PPS CPU time) over 2073600 pixels.

パース時間は88秒、最大メモリ使用量は1.86GB、レンダリング時間はElapsで 354秒。Radiosityの重いのを使っているのに、レンダリング時間がかかっている感が 殆どしなかったり。どちらかと言うと最大メモリ使用量が1.86GBという所で 環境を選んでしまうという所でしょうか。

SAIのライセンスを新PCに移行。特に問題なく使えたり。元々サクサク動作だったのが キャンバスサイズを大きくしても全くへこたれないものですから、解像度に対する 感覚がバカになっているかも(^^;

Blu-ray再生してみたり。その前にスピーカーが無かったので旧PCのを移植。 電源にUSBを使用していたのを忘れていたのですが、新PCの背面には4ポート しかなくて、キーボード、マウス、タブレットに加えてスピーカーだと 全部埋まる感じだったり。そんな訳で最後の一つにUSBハブを追加してみたり。 キーボードとマウスで2ポート埋まるとこんなに厳しいのか(^^;
で、再生自体はプリインストールされていたPowerDVDが使用される模様。 特に問題無く再生されたり。1CPUが全力で動く程度で大丈夫らしい。

2012/06/07

昼前起床。

ファイルコピー。そういや、昨日から新PCのHDDから妙な音がしている気が。 それと連動するかのように、昨日は一度画面がブラックアウトした為、 強制電源切断しました。また、夜の間にファイルコピーしていたのですが、朝静かに なってると思ったらブラックアウトしてたり。二度目の強制電源切断。 うーむ、これがHP品質なんだろうか?と若干の心当たりになんとなく納得。

ファイルのコピーに時間がかかり過ぎ。気づくと数GB単位のディレクトリ だったりするあたり、ネットワーク越しに100Mbpsを通すんじゃ細すぎる なぁと思ったりも。PCtoPCはGbitじゃなきゃダメかも。とは言え、我が家の Gbit機器は新PCとPS3だけなのですが(^^;

旧PCで試したAsianDragonのシーンファイルのレンダリングを試してみたり。 ファイルをどっかやってしまっててバックアップから探す所から始まったので 時間がかかってしまいました(^^; で、8CPUでレンダリングした結果は 以下の通り。

----------------------------------------------------------------------------
Parser Time
  Parse Time:       0 hours  1 minutes  2 seconds (62.137 seconds)
              using 1 thread(s) with 62.135 CPU-seconds total
  Bounding Time:    0 hours  0 minutes  0 seconds (0.000 seconds)
              using 1 thread(s) with 0.000 CPU-seconds total
----------------------------------------------------------------------------
Render Options
  Quality:  9
  Bounding boxes.......On   Bounding threshold: 3
  Antialiasing.........On  (Method 1, Threshold 0.300, Depth 3, Jitter 1.00,
 Gamma 2.50)
----------------------------------------------------------------------------
Render Statistics
Image Resolution 1024 x 768
----------------------------------------------------------------------------
Pixels:           835584   Samples:          566793   Smpls/Pxl: 0.68
Rays:            1402377   Saved:                 0   Max Level: 1/5
----------------------------------------------------------------------------
Ray->Shape Intersection          Tests       Succeeded  Percentage
----------------------------------------------------------------------------
Mesh                           3038916         1086800     35.76
Bounding Box                 238945767        68363935     28.61
----------------------------------------------------------------------------
Shadow Ray Tests:            950620   Succeeded:                191773
Shadow Cache Hits:           191757
----------------------------------------------------------------------------
Peak memory used:        1254969344 bytes
----------------------------------------------------------------------------
Render Time:
  Photon Time:      No photons
  Radiosity Time:   No radiosity
  Trace Time:       0 hours  0 minutes  1 seconds (1.217 seconds)
              using 8 thread(s) with 8.748 CPU-seconds total
----------------------------------------------------------------------------
CPU time used: kernel 2.00 seconds, user 70.01 seconds, total 72.01 seconds.
Elapsed time 64.77 seconds, CPU vs elapsed time ratio 1.11.
Render averaged 12142.48 PPS (10921.14 PPS CPU time) over 786432 pixels.

旧PCではメモリに乗り切らないという理由で、Cygwinでコンパイルしたコマンドラインの POV-Rayを使用してました。パースで61秒、レンダリングは約2.64秒(^^;。 旧PCではパース4分、レンダリング40秒。 パースは4倍、レンダリングは15倍?なんか「ちょっと間違えちゃったのでやり直し」が可能な レベルになっちゃってますよ(^^;

Dで書いたウインドアプリで、ウインド制御が何か変な感じになっている件を 少し調べたり。具体的な現象としては、 このページの 実行バイナリで、スピン(テキスト入力orUpDownボタンで数値入力する自作の部品)の再描画 がうまくできてません。メインウインド枠を広げるとテキストボックス部分の 再描画がうまく行われません。また、リストビューもメインウインド枠を変えると 中の描画が変になります。ただ、いずれもスプリッタで仕切りを動かすとうまく 再描画される為、謎が深まっています。 メインウインドからのリサイズや再描画のメッセージがうまく出てないのか? と思ったのですがそういう訳でもなく。ついでに手元の色々追加したものでは メモリリークもしてたりして、順に調べるしかない感じだったり。

その後の調査結果。メモリリークはペンオブジェクトの削除忘れでした。で、再描画の件はWindowsの アップデートらしきものを入れた後、再起動したら現象が再現しなくなりました(^^;

最近いじっているものについては概ね移行できた感じはするものの、フレッツ接続ツール やらタブレットやらメールやらは全く移行できておらず。まだ少し時間がかかりそう。

2012/06/06

AM中に起床。

PCが届くまでの間もそもそと片付け。電源が足りなかったり建増し続けて 配線がゴチャゴチャになっているのを直したり。ひとまず受け入れ可能な 状態に。ふぅ。

昼頃PC到着。箱から取り出し。んー、なんかデカっ。そしていくつか失敗。 現在メインで使用しているPCのディスプレイはPC入力として2系統入力できる のですが、両方ともDVIだと思っていたのが RGBとDVIの二系統だったり。 FedoraPC用のディスプレイが幸いにもDVI入力可能だったので、旧PCはそちら につないで、新PCを現在のディスプレイに接続する事で落ち着いたり。 旧PCは1920x1200→1440x900になるので、当然の様にデスクトップアイコンの 配置がハチャメチャに。まぁ仕方なし。

説明書らしい説明書が特に無く、電源オンでなんとなく促されるままに設定 を進めて起動。さて、操作感がWindowsXPと全然違うので、要領が得られません。 リカバリディスクも無しというタイプなので、とりあえずリカバリディスクを 作成しながら、あれこれ触って少し要領を得てみたり。それにしても、 何かこれといったものをやっている訳でもないのに、メモリを2GBも使っている のが納得いかない。
Cygwinを最小インストールして、作成されたhomeディレクトリの下にWinXPから ファイルをコピー。最初共有ファイルを認識できなくて、 Web検索しながら進める感じに。ネット接続ができないと死ぬ所です(^^;

ひとまずMeadowといくつかのツールをインストールしてなんとなく使えるように なってみたり。先日のキーレイアウト変更の件は ChangeKey なるフリーソフトで解決。管理者権限で実行するというのは、今後ちょくちょく 使わなくてはならない技になりそうな予感。

そんな訳でスペックを少し見られる感じになったかも。 CPUは i7-3770K(3.50GHz)でメモリは16GB。割高な分メモリが余計に載ってます。 グラフィックは外付けのNVIDIA GeForce GTX550Ti。内蔵GPUは封印されてる(?)模様。 OpenGL4.1.0なのでちょっと楽しみです。

で、色々試したり。X68k時代からレンダリングを試している、 「天空ギア」のPOV-Rayシーンファイル。 一つ前のPC(Pentium4(3.06GHz))では41秒でレンダリング完了した ものです。計ってみたみたところ、1CPUでは11.14秒、8CPUでは2.469秒....... ぇぇぇえ〜〜〜〜?! そんな感じ。CPUの周波数は17.6%しか上がっていない ので、1CPUで4倍くらい早いのはソフトのチューニングが含まれているかも知れません。 8CPUで4.51倍しか高速にならないのは、半分はHTなのでコア数分の4倍以上はなかなか 出ないという感じなのでしょうか。X68kで30時間かけてレンダリングしてたのにね....(遠い目)。

手持ちコードを動かしてみたり。でも色々ハマりまくってみたり。


ファイルの移動に時間がかかりすぎて死亡。時間がかかるだけなら良い のですが、途中でちょいちょいネットワークが切れるようで、転送自体に 失敗するのを面倒見なくてはならないのが我慢ならん。

2012/06/05

AM中に起床。

突然思い立ちPCを新調することに。事前にめぼしは付けつつ、ヨドバシで現物確認&調達。 今やデスクトップとなるとTVと一体になったものが主流のようで、これまで通りの デスクトップPCとなると店頭ではあまり選択肢が無いという感じ。 SOTECっ子だったTANEですが、現在はONKYOブランドに吸収されちゃいました。 そのONKYOのも置かれていなかったのと、狙い目の実装を行ったマシンがそれしか 無かった事から、今回はHPのにしてみました。TANEには少しオーバースペックな感じ なのですが、足りなかった場合に後からどうにかする方がコスト高になるという 経験則から大決定という事で。 16万円也とちょっと高い買い物でしたが、ポイント約4万円分を全額開放して 12万円でゲット。明日配送という事で詳しいスペックなどはまた後日。

帰ってからPC配置の為に掃除したり。

そういや、CAPSとCNTLキー、ESCと半角全角キーはそれぞれ配置が逆じゃないと 死にそうになるのですが、Windows7ではAltIMEの動作が微妙な感じらしい。 また、レジストリをいじるのも「なんかよくわからんがこうやれば良いらしい」的な のしか出てこなくてちょっとだけ困りそう。で、調べている過程で知ったの ですが、AltIMEの作者さんは故人となっているようです。

夜もいい時間にアニメ映画であるところの「REDLINE」のBDを観たり。 ストーリーらしいストーリーはあまり無くて、とにかくアクションを見て楽しむ という感じ。レースなのに途中で訳のわからないクリーチャーが出てきたりと ハチャメチャな感じでしたが、最後まで一気に見ちゃうという感じでした。 それにしても、絵がスゴく細かいです。これ、色を塗り分けるの大変だよなぁと思ったり。

2012/06/04

AM中に起床。今日から一週間ほど連休。

ちょろり遠くの本屋に。

「バクマン(19)」。(18)ってついこの前出たばかりだと思ったのですがもう(19)? もうあと少し続く感じかな?

WIN32APIでボタンに画像を貼る件。結局、色々つぶしがきかないという理由に より、自作ボタンを機能強化するという方向に落ち着いたり。
元々は、ボタンの画像を外付けのファイルではなくリソースに含める練習でした。 ただし、BMPファイルではなくPNGファイルを リソースに埋め込み、それをアルファ付きで展開してボタンに貼り付けると いう事がやりたかったのです。
おおよそやりたい事はできたのですが、WinAPIだけだとアルファの扱いがイマイチ だったのと、オーナードローは親ウインドにメッセージがいちいち飛ぶという 点も扱いづらいことから、自作ボタン強化でいいやという流れ(^^; うーむ。

2012/06/03

AM中に起床。

WIN32APIでボタンに画像を貼る件。BS_BITMAPを使わないとするならば、 オーナードローかカスタムドローを使う事になる模様。オーナードローは ボタンの概観も含めて全ての描画を自前で行う必要がある自前描画方式で、 カスタムドローはボタンの概観描画が終わった状態で追加で必要な部分を 自前で描画する方式の様です。スタイルを合わせるならば、後者のカスタム ドローの方が良いのだろうと思って試すのですが、カスタムドローの 書き換え契機となるWM_NOTIFYがやってきません。どうやら、XPビジュアルスタイル にしていないと WM_NOTIFYがそもそもやって来ないようで、XPビジュアルスタイルに するとWM_NOTIFYがやってくるようになりました。 XPビジュアルスタイルより前でのボタンにはカスタムドローという概念が無い かのような振る舞い(従ってWM_NOTIFYがやってこない)になってるような気も。 逆に、XPビジュアルスタイルではボタンにマウスカーソルが重なっただけでも WM_NOTIFYがやってくるようでこれはこれで過剰な気も。 いずれにしてもカスタムドローはコーディング方法に前方互換が無いのが 少し困った感じかも。

2012/06/02

昼過ぎ起床。

自転車がパンクしていたのを修理に持って行ったり。

WIN32APIでボタンにBS_BITMAPスタイルを使って画像を貼り付ける練習をしてました。 で、何気にXPビジュアルスタイルでの表示を見てみたところ、BS_BITMAPなボタンだけ がクラシックな表示のままとなり、なんで?と思ったり。
Web検索してみたところ、なにやらそういうものらしいという事は判ったのですが、 んじゃどうすればXPビジュアルスタイルのボタンに絵を貼れるの?という話になると イマイチ具体的な方法を見つける事ができなかったり。

2012/06/01

日付け越え前に帰着。

ちょろりコーディング。

眠くて急速停止。


TOP PREV