昔の最近の出来事(2012.07)

2012/07/31

気持ち早めに帰着。

野暮用で寝るのは遅くなったり。

2012/07/30

遅めに帰着。

あまりの眠さに急速停止。

2012/07/29

AM中に起床。洗濯したり掃除したり。

そういや、「パンキッシュな衣装」ってフンワリとイメージはできるものの、 具体的にどういうのを指すんだろう?と思いWeb検索してみたり。 ところが、意外と出てこない。ゴスロリほどの明確な定義はまだ無いようです。 「パンキッシュゴシック」なる単語も存在しているようだったので検索して みたところ、どうやらこちらはゲームの「アイドルマスター」の ある追加衣装コンテンツの呼び名らしい。ファッションジャンルの ひとつなのかと思いきや、実はゲーム発の造語のようです。数年後には 一般に浸透する可能性があるかも.......どうだろ?(^^;

ぼんやりWebを検索していたら、UNIX等のスクリプトの先頭に「#!....」と書く この一行目の事を「shebang(シバン)」 と呼ぶのを知ったり。知りませんでした(^^; 英語のWikipedia にはもっと色々書かれているようですが、TANEの英語力の問題で正しく意味が 取れないのは残念な感じです(^^; 機械の力を借りて読んでみたところ、 「#」のsharp と「!」をbangと読んで合成した造語が語源という感じのようです。 また、「#」をhashと呼ぶ場合もあるようで、shebangの別の呼び方にsha-bangやhash-bangが含まれているのは この為のようです。因みにTANEは「井桁(イゲタ)ビックラ」(シャープでもビックリでもありません) と読んでいます(^^;; そういや、井桁とシャープには違いがある(参考) らしいですが、その違いが関係あるのは日本語文字圏の人だけで、ASCII圏の人には そんな区別は無いかも。あえて区別した場合、C#は 「C#」ではなく「C♯」が正しいと。 なんか面倒臭いので英数字類は全角では無く半角で書くようにしているTANEでした。

2012/07/28

朝から休出。

夜帰ってからあまりの眠さに急速停止。

2012/07/27

日付越え。

ちょろっとWeb巡回して終了。

2012/07/26

日付越え前に帰着。

ちょろりコーディング。

2012/07/25

日付越え前に帰着。

ちょろりコーディング。

2012/07/24

大幅に日付越え。

ちょろっと調べ事をして終了。

2012/07/23

遅めに帰着。

OpenCL。D言語から使う方法を探ってみたり。githubに cl4dというプロジェクトが 存在していたので使ってみたり。少し手直しする箇所がありましたが、 clほげほげ関数を直呼び出しするのは使えそうな感じ。

2012/07/22

AM中に起床。

Wings3Dのリリース版は1.4.1ですが、この版のErlangは少し前のバージョンを ベースにビルドされています。このため、Wings3D 1.4.1と Erlangの最新版(R15B01)を 組み合わせると、Wingsの方に少し手を入れる必要がありました。で、何気にWings3Dの スナップショットのビルドを試してみたところ、こちらはOpenCL対応が行われている為、 別途OpenCLバインディングを使えるようにする必要がありました。

そんな流れから、OpenCLを入れてみる事にしたり。「OpenCL(Open Computing Language)は OpenCL C言語による、マルチコアCPUやGPU、Cellプロセッサ、DSPなどによる異種混在の 計算資源(ヘテロジニアス環境、ヘテロジニアス・コンピューティング)を利用した 並列コンピューティングのためのクロスプラットフォームなフレームワーク」です (Wikipediaより引用)。 OpenCLというライブラリをダウンロードすれば使える感じなのか?と思っていたのですが、 どちらかと言うと各ハードウェアベンダーがOpenCLというフレームワークに合わせて インターフェースを提供するという感じになっているようです。なので、NVIDIAの GPUを利用したOpenCLライブラリが欲しいと思えば、NVIDIAによって提供される SDKなりドライバなりを入手する必要があります。そんな訳で こちら のサイトからドライバやSDKを一式ダウンロードして入れてみました。 でも、まだ具体的にどう使うのかは良く判ってなかったり(^^;

基本的にはOpenCLというラッパーを経由してCUDAで実行しているという感じみたい。 そのような仕組みですから、GPUコードはCPUコードとは別に用意する必要があります。 Cで書いたベクター演算のループを自動的にGPUコードにコンパイルするような仕組みでは ありませんので、敷居は高いと思います。GPUコードはOpenGLのGLSL の様に実行時コンパイルする形のようです。GPUコードのデバッグは難しそうかも。

コンパイルを試してみたり。デバイスを問い合わせるサンプルコードのほんの一部を 切り出してコンパイルしてみました。


まだ用事になる事は全くできてませんが、なんとなく動かせそうな感じ。
基本的にC言語インターフェースなので、D言語向けにバインディングを書けばDでも使えるかも。

2012/07/21

起きたら午後もいい時間。寝すぎ。

Wings3Dの64bitコンパイル。esdlのtestディレクトリの実行が 失敗するので、wings以前の問題っぽい。sdl_driver.dllがそもそも探せていないのか、 ローディングに失敗しているのかの区別がイマイチ付かず。

そういえば、最近「東京MX」の受信状態が悪くて映像が見られない確率の方が 上がっています。土曜の夕方に放送されている「探偵ナイトスクープ」を観るのが 東京MXにチャンネルを合わせる唯一のタイミングなのですが、ここ数週間はそのタイミング で受像できない感じ。

2012/07/20

早くもなく遅くもなく。

Wings3Dの64bitコンパイル。esdlに付属のSDL.dllとsdl_driver.dllが32bitバイナリ という事に気づき、SDL.dllから64bitコンパイルしたり。ひとまずコンパイルは できたものの、うまく使えるバイナリが生成できているのかはイマイチよくわからず。 で、ビルドしたwingsを実行してみたのですがやっぱりダメ。

あまりの眠さに急速停止。

2012/07/19

気持ち遅めに帰着。

Wings3Dの64bitコンパイルを試してみたり。Erlangの64bit版をインストール、 ErlangからSDLを使う為のライブラリを入れて、Wings3Dの1.4.1をmake。 エラー無くコンパイルできた?ものの、実行すると何やらエラー。

Dump written 2012-7-20_1-28
Version: 1.4.1
Window: "<Unknown Window Name>"
Reason: {enoent,[{erlang,open_port,[{spawn,"sdl_driver"},[binary]],[]},
                 {sdl,init,1,
                      [{file,"c:/PROGRA~1/ERL59~1.1/lib/esdl/src/sdl.erl"},
                       {line,65}]},
  :

どうやら、sdl_driver.dllをオープンできないのが原因っぽいのですが、 それで合っているのかがイマイチよくわからず。

2012/07/18

日付け越え前に帰着。

あまりの眠さに急速停止。

2012/07/17

日付け越え前に帰着。

Emacs24でgrepモードで日本語がうまく検索できない件をWebで探っていたら、 color-moccur というのが良さげなのを知ったり。元々Meadowのパッケージにはインストールされていた のですが、使った事ありませんでした(^^; で、使ってみたところ、もうこれで十分と いう感じ。もっと早く存在に気づけばよかった.....

2012/07/16

昼頃起床。

野暮用処理。

Emacs24を少し使ってみたのですが、diredで日本語ファイル名がうまく表示できないとか、 細かい所が色々とダメで結局Meadowに戻ってしまいました(^^; 恐らく、Meadow相当にするにはこう設定すれば良いってのがきっとあるに違い無いのですが、 Web検索してもその辺がまとまってるのが無くて難儀な感じだったり。

2012/07/15

AM中に起床。

プロ遊の下のマンデルブロ集合プログラムを更新してみました。御参考まで。

Emacs24。ファイル名補完が少し怪しい感じだったのを無理矢理な感じで対処 してみたり。そんな訳で、他にもいくつか対処した点の覚え書き。


ひとまず、gdbも使えてバックグラウンド実行させながら別バッファに切り替える事も可能になって ますので、TANEがMeadowで行っていた事は大体可能になってるかも?という感じ。

そういえば、Emacs24から M-x list-packagesで、ネット上のパッケージをEmacs上から選択/インストール 可能になっています。追加で欲しいものはこれで探してインストールすると良いようです。 ただし、場合によってはインストール後にEmacs自体を再起動しないとうまく使えないものもあるようです。

そんな訳で本日の日記はEmacs24で書いてみています。

うーむ、少し使ってみるものの、やはり文字コード判定ミスが多い気がします。 Webを少し検索してみるも同じ悩みを抱いている人もそれをどうこうした記事も 見当たらず。

grepモードが使えなくなっていたのを直したり。lvに 含まれるlgrepを使うと文字コードを気にしなくて良くなるらしいというのを知り入れてみたり。 でも、Meadowではそれとなく良い感じになったものの、Emacs24ではどうにもうまく 日本語文字のgrepができなかったり。

2012/07/14

AM中に起床。

暑くてぐったり。

もそもそとコーディング。Win32APIバインディングの64bit対応をマージしたり、 マルチスレッド化したマンデルブロ集合描画プログラムの公開準備をしたり。

2012/07/13

日付越え前に帰着。

あまりの眠さに急速停止。

2012/07/12

日付越え前に帰着。

gcc-4.7.xブランチ(DMD2.059マージ版)のMinGWビルドを試してみたり。結果から言うと失敗。 DMD2.058マージ版は力ずくでビルドできたのですが、なんかビルド自体ができなくなってる感じにも。 一番大きいのは、asm文がGDCでは使えなくなっている点。これどうすんだ?

2012/07/11

日付越え。

gdcにぼちぼち更新が入っているようですが、MinGWはまだ2.059ベースのDMDに マージされてなかったり。gcc-4.7.x向けのブランチのビルドをFedora17(64)で 試してみたところ問題無くビルドできたり。

2012/07/10

日付越え前に帰着。

emacs 24。SVGやPDFを直接インライン表示できたりとかなり良いのですが、 ロード時に文字コードを誤る場合があったり。もうあとひとつという感じ。
そういや、愛用のkeisen-mule.elが24で廃止された関数を使っているのでそのままではエラー します。が、(char-bytes var)を 1に置き換えればなんとなく使えるようです。 Meadowでも(char-bytes var)はvarに何を入れても1が返る感じでした。

2012/07/09

日付越え前に帰着。

何気にemacs24の情報を探っていたら、Windowsで使えるバイナリで割とまともな 感じなのを見つけたり (こちらのサイト)。 なにが使えるかと言いますと、画像表示系のサポートが一通り入っている点。 IMEサポートも入っていそうなので少し設定を試みたり。 今までのNT-Emacsに比べると大分良い感じに使えそうな予感がするものの、 24で動かなくなったLISPコードがあったり、普段使っている便利な感じの LISPがパッケージインストールできなかったり。でも、がんばれば乗り換えられる かも?というレベル。気のせいかも知れませんが。

2012/07/08

AM中に起床。

バクマン(20)。最終巻。怒涛の勢いで〆たという感じでしたが大団円で完結。 全編通して適度なフィクションさ加減が良かったと思います。

gdc。ぼちぼちと更新が加えられている模様。なんか4.7.xのサポートがブランチに なってしまってたり。MinGWの方はベースが4.6.xなもんですから、バイナリ配布 の都合で4.7.x以降になかなか追従してくれない。個人的にはバイナリ配布を 止めれば良いのにと思わなくはありませんが、MinGW自体にパッチを当てる必要が あったりしてたようなので、ビルドの面倒臭さを天秤にかけるとあまり強くも言えない 所(^^; でも、1ヶ月ほど前にMinGWにgcc-4.7.0がリリースされたので、そろそろ 乗り換えられるのを期待したいところ。

2012/07/07

昼過ぎ起床。

ClangやLLVMの最適化の仕組みについてWebを探ってみるも、 日本語ではあまり詳しく説明されたものを見つけられなかったり。
先日のコードはループの回数が確定した時点で一意の式から結果を 求められる訳ですが、そういう最適化が行われるのか否かは不明。

2012/07/06

日付け越え。

Clangについて少し調べたり試したり。 C言語のフロントエンド&LLVM をバックエンドにしたコンパイラです。一部のOSプロジェクトでは GCCを置き換えを発表しているそうな。で、Cygwinで何気にclang とか打てば使えたので少し試してみたり。で、次のようなほぼ意味の無い コードを試してみたところ、面白い結果になりました。

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char* argv[])
{
  long long int i,j,k ;
  long long int num = atoi(argv[1])*0x100000000 ;

  j=0 ;
  k=0 ;
  for( i=0 ; i<num ; i++ ){
    j=i+k ;
    k=i+j ;
  }
  printf("j=%08x_%08x, k=%08x_%08x\n",(int)(j>>32), (int)(j&0xffffffff), (int)(k>>32), (int)(k&0xffffffff)) ;

  return(0) ;
}

結果が以下。

$ clang -O2 test.c

$ time ./a.out 2
j=fffffffc_00000001, k=fffffffe_00000000

real    0m0.063s
user    0m0.000s
sys     0m0.015s

$ gcc -O2 test.c

$ time ./a.exe 2
j=fffffffc_00000001, k=fffffffe_00000000

real    0m11.399s
user    0m11.309s
sys     0m0.062s


因みにclangではa.outで実行ファイルが生成されます。さておき、clangでの 実行はループを全く回していないような実行結果になりました。ループを回していない ような感じなので、前述コードで以下のようなことをしても一瞬で結果が出ます。

$ time ./a.out 65536
j=fffe0000_00000001, k=ffff0000_00000000

real    0m0.049s
user    0m0.015s
sys     0m0.030s

普通のプログラムではどうなのか?と思い、IJGのツールをコンパイルしてみたのですが、 それはあまり差が出ず。

2012/07/05

日付け越え前に帰着。

ちょろりコーディング。

2012/07/04

日付け越え前に帰着。

ちょろっとWeb巡回して終了。

2012/07/03

日付け越え前に帰着。

PS2アーカイブス。PSアーカイブスのPS2版。エミュレーションで動かしているのかしら? だとすると、PS3発売から時間は結構経ってはいるもののそれはそれでスゴイかも。 ハードを直叩きしていないものについて、PPCターゲットで再コンパイル しただけかも知れませんが、それだとHDリメイクしてくれた方が良いかもなぁ? と思わなくもありません。

アイコン埋め込みの件。昨日、イメージを差し替えてもエクスプローラでの 表示が切り替わらない件、どうもアイコンイメージがキャッシュされていた模様。 48x48で埋め込んだ実行ファイルを改めて表示してみたら、ちっこいサイズでしか 表示されませんでした。となると、WindowsXPでは48x48で、Windows7では 256x256で表示可能にするにはどうすりゃいいんだ?

2012/07/02

日付け越え前に帰着。

Windowsアプリのアイコンについて。リソーススクリプトでアイコンファイルを 指定して実行ファイルに埋め込む訳ですが、複数のサイズを持つのが良い みたいなのをWebで見たり。WindowsXP向けとかに32x32のサイズのアイコンを 埋め込んでいると、Windows7でのエクスプローラで特大サイズ表示した時でも 少し小さいサイズで表示されます。
でも、複数のアイコンファイルを含める書き方がイマイチ判りませんでした。 色々試した感じ、スクリプトで並べたICON指定の先頭のイメージがWindowsXPでは表示される ようでした。 ただよく判らないのが、一度256x256のアイコンイメージを埋め込んで、Windows7の エクスプローラで特大アイコン表示をしました。結果は256x256で表示されます。 ところが、256x256を48x48に変えて実行ファイルを再リンクしました。エクスプローラで 特大表示しても48x48で表示されるハズと思ったのですが、何故か256x256の イメージが表示されたり。うーむ訳がわからん。

2012/07/01

昼頃起床。

マンデルブロ集合描画プログラムで1.0e200倍まで潜ってみたり。 元々1.0e201倍を上限としていたのですが、1.0e150倍くらいで座標解像度が 足りなくなっているというのに今頃気づいて、MPF/MPFRの精度を少し上げてみました(^^; 320x240で模様のある所を探しながら1.0e200倍まで到達してみたのですが、 自己相似という事もあって途中の景色は何度か見た事ある感じだったり。 深く潜ってもあまり面白い事は無かったかもと言ってしまうと身も蓋も無い のですが(^^;;;;
因みに、深く潜るほど描き上がるのに時間がかかるのですが、320x240サイズで7CPU使い で1.0e200くらいだと約10分。まぁまぁ時間がかかるという感じでしょうか。

TVの報道番組やバラエティ番組で字幕が出る場合ってあると思うのですが、 何故か メイン(main) の字幕がどの局も例外無く「メーン」となっているのに 違和感を覚えてしかたがありません。Webで検索してみたところ、 ルールに従った表記という事らしい (参考)。 エー?そうなのぉ?

D言語。core.simd というモジュールを使う事で、SIMD命令用のベクトル型 を宣言できると共に、SIMD命令を使用してオプティマイズがされるようになるというものです。 D言語マニュアルのベクトル演算拡張機能 の項によると、何故か「OSXでの32bitターゲット」と「その他の64bitターゲット」で サポートされているという事になっていて、Windowsの32bitターゲットでは SIMD命令列が出てこないらしい。以下のようなコードを32bitと64bitのgdcでコンパイル&実行 してみました。

import std.stdio;
import std.string ;
import core.simd ;

int main()
{
  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"  ) ;
  version( X86     ) writef("I am X86\n"    ) ;
  version( X86_64  ) writef("I am X86_64\n" ) ;

  double2 a,b,c,s ;

  a = 3 ;
  b = 4 ;
  c = 5 ;
  for( int i=0 ; i<2000000000 ; i++ ){
    s = a / b + c;
    c = s + i ;
  }
  writef("a = %s\n",a.array) ;
  writef("b = %s\n",b.array) ;
  writef("c = %s\n",c.array) ;
  writef("s = %s\n",s.array) ;

  return(0) ;
}

32bitコンパイルの実行結果は以下のような感じ。

$ gdc -m32 -O2 simd_test.d

$ time ./a.exe
I am GNU
I am Windows
I am MinGW
I am Win32
I am X86
a = [3, 3]
b = [4, 4]
c = [2e+018, 2e+018]
s = [2e+018, 2e+018]

real    0m39.177s
user    0m0.000s
sys     0m0.093s

64bitコンパイルの実行結果は以下のような感じ。

$ gdc -O2  simd_test.d

$ time ./a.exe
I am GNU
I am Windows
I am MinGW
I am Win64
I am X86_64
a = [3, 3]
b = [4, 4]
c = [2e+018, 2e+018]
s = [2e+018, 2e+018]

real    0m9.697s
user    0m0.000s
sys     0m0.125s

-Sでアセンブラ命令列も見てみたのですが、確かに32bitではSIMD命令列が出てこない様です。 SIMD命令を使わない場合のコードの質が分からないので、SIMD命令を使った チューニングがどれだけ効いているのか厳密には比べられませんが、 割と簡単にチューニング効果を得られそうな予感はします。 また、SIMDチューニングがサポートされていなければ普通の命令列で置き換えられるだけ なので、例えばインラインアセンブラ等で直にSIMD命令列を書いてしまったばかりに、 version()等で場合分けをしなくてはならないとか、SIMD命令をサポートする アーキテクチャ専用コードになるような事が無いのは良いと思いました。
問題は、MinGWのgdcはバグっているため乗算が使えません(^^;; こちらでも同様の報告がされているようですが、float4に限らず今回書いた double2もダメです。


TOP PREV