/var/log/hdk.log

2014 年 5 月下旬


20 (火)

%1 Lua

世の中には Lua というスクリプト言語があるらしくて、ぱっと見は Ruby 的な雰囲気で書けるんだが (if〜end などの制御構造で end を多用するところが似ている)、C のプログラムから簡単に呼び出せる & C のプログラムを簡単に呼び出せるというのがポイントらしい。 へぇ。 性能も悪くないみたいなので、例の N クイーン問題か何か、プログラムを移植してみるのがいいか。JavaScript より速いというのがにわかに信じがたいが、可読性の低い asm.js と比較するのは酷か。

C と連携しやすいというところを少し調べてみると、C の関数ポインターを簡単に登録できるようになっているのと、Lua に簡単なスタックがあって、それを利用して C から Lua の関数の引数を引っ張り出せるようになっている。 この様子なら、たぶん C から C を呼び出すのでさえも、Lua を経由して行うことができるものと思われる。 そういう特性はなかなか興味深いところで、某 VMM にも、呼び出し先のルーチンが特権レベル 0 か特権レベル 3 かを区別することなく使えるメッセージインターフェイスをこしらえたが、なんかそういう用途にも応用できそうな雰囲気がある。

2014/05/20 のコメントを読む・書く


21 (水)

%1

夕方頃まで雨。 朝はバスのダイヤがだいぶ乱れていることを知って、まぁ出るのも遅かったんだけど、鉄道で。 加速のときに車輪が滑ったかなーと思う瞬間が少しだけあった。 カーブのところが滑りやすいのかな。 古くさい抵抗制御だから本気で滑ると大電流流れて結構まずいことになるのかな。 どう見ても空転検知なんてなさそうだしな。

%2 Calling Lua from C

ドキュメント等を見ながら適当に書くと動く。

$ cat a.c
#if 0
exec \
cc `pkg-config --cflags lua5.2` a.c `pkg-config --libs lua5.2`
#endif
#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>

static char *hoge = "print('hoge'..1+2+3+4+5);";

main ()
{
  lua_State *L;

  L = luaL_newstate ();
  luaL_openlibs (L);
  printf ("%d\n", luaL_dostring (L, hoge));
  lua_close (L);
}
$ sh a.c
$ ./a.out 
hoge15
0

なるほど簡単である。luaL ってのが打ちにくくてつい小文字で打ってしまうが、the auxiliary library と呼ばれるライブラリーの関数等にこのプリフィックスがついているらしい。 ヘッダーファイルのファイル名の lauxlib.h もまた、思わず打ち間違えそうな名前である。

2014/05/21 のコメントを読む・書く


22 (木)

%1 雨?

朝天気予報を見たら、夕方頃雨が来るかも的な雰囲気の予報だったので、念のため傘を持っていった。 しかし、とてもいい天気で、傘を持っている人は見かけなかった。

午前中、雷の音がしたこともあったが、昼食の時には晴れていてとてもいい天気。 まったく雨が降る気配はなかった。

午後は日が暮れる前に雨が来たっぽくて、外を見ると道路に濡れた跡が見えた。 夕方には黒い雲がやってきていて、これは雨が来るかもね、という感じだったが、結局降らなかったようだ。

そんなわけで、傘を持っていったかいがあって、傘を開く必要はなかった。 天気予報なんていい加減だよね。 というよりは、今日みたいなのは場所によって違いすぎて、このへんの天気予報は割と外れやすいのではないかと思う。 アメダスの今日の降水量を見ると、

っていう感じで地域差が激しい。WWW の天気予報サイトでは細かい地域指定ができるようになっているのが多いが、個人的な印象としては細かい地域指定をしてもあまり変わらない気がしていて、例えば東京府中市と千代田区を比べてもほとんど同じみたいな感じで、千代田区では当たってるのかも知れないがこっちは外れるんだよ、みたいな、そんな感じがしている。 レンタルカートでよく行く藤野や飯能も同じような傾向がある気がする。

%2 Coroutine

Lua では coroutine というのが使える。 これはプリエンプションのないスレッドのようなもので、いや、やっぱスレッドとはちょっと違うんだけど、とにかく、関数の途中でその状態を保持したまま呼び出し元に戻ったり、その状態から再開できるという代物。 おまけにそのときに値の受け渡しもできるというからおもしろい。

何がいいって、PC のエミュレーターとか書いていると、例えば VRAM の内容を読み出してそれにパレットを反映させて表示内容を確定する処理は一連の流れとして書きたい。 しかし、画面の走査途中にパレットを意図的に変化させるようなプログラムを正しく動作させたいとなると、表示内容を確定する処理と命令を実行するタイミングの同期をうまく取りながら処理を進めなければならない。 そういうのを coroutine なし・スレッドなしで書こうとすると、例えば、表示内容を確定する処理を途中で中断できるようにするには、for のループカウンターのような変数までも状態として保持できるようにしなければならず、コードがかなり読みにくくなる。 逆に、命令を実行する処理を途中で中断できるようにする考え方もあり得るが、さらに難しいだろう。 スレッドを使う手はあるのだが、かなり細かく同期を取ることになりそうなので (例えば 10 クロックの命令実行後に 1 ピクセルの画面表示処理、など)、あまり並列に動作することがなく、オーバーヘッドが厳しいのではないかと思っている。 まぁ coroutine も同期無しの連続処理よりはオーバーヘッドがあるだろうけどね。

2014/05/22 のコメントを読む・書く


23 (金)

%1 複々線

中央本線の複々線区間がやたらわかりにくい気がしていたけど、どうやら JR 東日本の都心の複々線全般がわかりにくいらしいことに気が付いてきた。 まず、東京〜新宿〜塩尻〜名古屋の路線名である中央本線の、東京都内の駅である東京〜高尾の旅客線について。

思いつく限りでもこんな感じで訳がわからないのだが、都心にはこんなもんじゃない路線が存在するようだ。

まず、上に出てきた総武本線というのは、東京〜銚子の路線名らしい。 じゃあ御茶ノ水に来ているのは何かと言うと、総武本線の支線なんだとか。 あまりなじみがないので間違えているかも知れないけど。

中央線ユーザーからすると総武線と聞くと御茶ノ水・秋葉原なイメージがあるが、総武線 (快速) はそれとは関係のない路線ということか。 今度は横須賀線というのが出てきたが、これがまたやっかいで、大船〜久里浜の路線名なんだけど、運転系統としては東京からの系統のことを横須賀線と呼んでいるらしい。 東京〜大船は東海道本線というやつである。 それで、詳細を書いてみようかと思ったけど、ここにもまた支線があり、おまけに湘南新宿ラインで新宿方面への直通運転、さらに湘南新宿ラインから埼京線なんてのも出てきて、どんどん話が発展してしまうのでやめておく。 他に、東北本線絡みで高崎線や常磐線もあって、これもかなりややこしい。

詳しくは路線図を見て、いや、路線図見てもさっぱりわからんよねぇ。 路線図では、例えば中央本線や総武本線の表現は使われず、中央・総武線 (各駅停車) が三鷹から千葉まで行くみたいな表記をされちゃってるから、どこどこに行きたいというときに見るのはいいけど、どこからが別の路線なのかとか、日頃の疑問を解決するのには向いてない気がする。

2014/05/23 のコメントを読む・書く


24 (土)

%1 銀行 ATM

IC キャッシュカードで一日あたりの限度額が増えているはず。 これで別の口座にお金を移すのが楽になったはずだ。 今日は、移す分の 50 万円と生活費のプラスアルファをおろしてみよう、と、ピッピッと入力したらだめだった。 よく見ると一度におろせるのは一万円札が最大 50 枚、千円札が最大 100 枚とあった。 それならプラスアルファが千円札ならいいんだろうと思ったがだめだった。 万を押した後は数字の入力すらさせてもらえない。 もちろん、一日あたりの限度額は増えているから、2 回にわけて操作すれば OK だった。 ふうん。

%2 3DMark2000

何となく 3DMark2000 のデモ画面のことを思い出し、人が歩いてきてそれが消えてそれでどうなるんだっけなーみたいな感じで、YouTube で検索したら出てきて、これだー、と。 音楽がかっこいい。 前半と後半の音楽が何となくちゃんとつながっていて、後半どんどん盛り上がってきて、静かになってエンディング、ってのがなんか実によくできてると思う。 映像も何かにインスパイアされたというよりは全体的に意味不明だけどきれいな感じでよい。

3DMark 2000 Demo FullHD (1080p) - YouTube

いま 3DMark2000 をダウンロードしようと思ってもなにやら怪しげなサイトしか出てこない。 うーん。 それで手元の CD-R をあさったら、昔データの運搬に使っていた CD-R に残っていた。 さっそく VirtualBox のゲスト OS の Windows 2000 に入れてみようと思ったが、インストールはできるけど起動しない。Guest Additions が古いせいかと思ってアップデートするときに理由が発覚。Windows 2000 では VirtualBox の Direct3D サポートがインストールできないようだ。 ふうん。

VirtualBox のゲスト OS に Windows 8.1 Preview が残っていたのでそれで試した。 もう期限が切れているらしくて 1 時間で再起動するとか出てきたが、デモは短いのでとりあえず試してみたら、動いた。 動いたが、さすがにかくつくというか、全体的にフレームレートが低い。 あと、音がずれる。 音がちょっと速いような気がする。 不思議な感じ。

AMD C-60 な Windows PC では問題なく動作した。 ふだん使っている 1,024x768 のフルカラーでも極めてスムーズな表示。 まぁよく考えたら 3DMark2000 って SOTEC M350V (PentiumIII Katmai, Voodoo3) でも動いてたくらいだから、省エネ構成とはいえ、当時と比較すれば CPU も GPU も遙かに性能がいいし全く問題ないんだろうな。

やっぱ 3DMark2001 を動かしたいところだが、SE じゃない初期版も CD-R から発掘したので試したんだけどやっぱり動かなかった。

%3 The Other Woman (2009)

テレビでやってた映画。 邦題はなぜか「水曜日のエミリア」。

適当に見てたから間違ってるかも知れないけど、内容的には主人公が子供のいる男と不倫して継母になったものの子供の実の母 (医者) とごたごたあって、新たに生まれた子供は 3 日で死んで、その死因が云々。 主人公の両親までもが離婚だか再婚だかちょっとややこしい。 なんか感動系っぽかったけど波瀾万丈な人物設定の複雑さがかえって現実味を出しているような、そんな感じがした。

2014/05/24 のコメントを読む・書く


25 (日)

%1 レンタルカート

藤野。 耐久レースとワンコイン走行。 耐久レースで 70 分ほど走行し、ワンコインのレンタル走行は 5 分 6 回乗ったので、大変疲れた。

今日は気温も高めで、相模湖あたりは八王子のアメダスが一番近いのかな、それを見るとやはり午前中から摂氏 25 度に達していたらしく、午後も日が照ったり雲に隠れたりで少し変動はするものの、カート走行すると結構暑かった。

2014/05/25 のコメントを読む・書く


26 (月)

%1 乗り換え改札の謎

磁気乗車券 + IC 乗車券の乗り換えに失敗したぞ! どうも挙動をみるかぎり、一部の改札機で磁気乗車券 + IC 乗車券による通過ができないように設定されてるとしか思えない。 というのは、通過できる改札機であれば、磁気乗車券を投入したとき、IC 乗車券読み取り部が青く光ってたのがいったん消えた後再びすぐに光って待っているのだが、通過できない改札機では、消えたままで待っている。 光っていないところに一生懸命タッチしたところで読み取ってはくれない。 でもすぐに拒否るのではなく、もう一枚の磁気乗車券の投入を待っているようにみえる。

よくみたら何か表示がされているのかもしれないが、混乱の元なのでそういう意味不明な区別はやめてほしいね。 とりあえず、車いす対応の幅の広い改札のところは通れるということは覚えた。 あとは、何か表示をさがすか、順番に試すしかあるまい。

%2 筋肉痛

やばい。 手首、腕、太もも、ふくらはぎ、など、いろんなところが筋肉痛。 姿勢によって腰やらおしりやらが痛いのは筋肉痛なのか他の痛みなのかよくわからない。 おかしいなぁ、合計でほんの 100 分そこそこしか乗ってないはず... 100 分!? 普通のレンタル走行だと 20 回分か。 うーむw

夜はひさびさに温泉に行って電気風呂入ったりいろいろしてきた。 マッサージ浴と書かれたところに足を突っ込んでいるのが結構気持ちよかった。 外は冷たい雨が降ってて寒かった。

2014/05/26 のコメントを読む・書く


27 (火)

%1

乗り換え改札の改札機をじろじろ見てみたが特に差異はない。 どういうこっちゃ。

電車の抵抗制御の進段のタイミング、よく電流値がある値になったら次の抵抗にというのだが、電流値じゃなくて電力値じゃないのかなと思った。 電圧は 1,500V と言われるが、乗務員室にある電圧計を見ている限りは、変電所から離れている地点における発進・加速時はぐいぐい下がって 1,300V くらいになってる。 で、そういうときに限って、電流計がいつもよりかなり高い値を指している気がする。 変電所の近くでは電圧はほとんど変化せず、電流計も 0.6kA 以下あたりを保っている感じ。

若干の勾配があるため、上りと下りで電車の加速パターンが違う。 たとえば駅を出てポイント通過するまで 30〜40km/h そこそこなのはだいたい一緒だが、上り方向なら直列最終あたりをキープしたまま通過、下り方向でポイントまで距離があるところは並列まで加速してからノッチオフで通過、みたいな。 あと、最高時速が 80km/h ちょっとらしくて、駅間の長い区間は、上り方向ではノコギリ運転か、並列最終で 80km/h 弱をキープとかだが、下り方向だと惰性で速度が出てしまうので途中でブレーキが使われることも。

%2 F1 モナコ GP

ライコネンがけっこういいところ走ってたのに、SC 中にぶつけられるとはね。 でも SC 中の衝突事故って何かペナルティーとかなかったっけ? どうなってるんだろう。

今年の F1 はギヤ比の変更が年 1 回しかできないので、モナコでも他のサーキットと同じギヤ比での走行である。 ときどき出ていたオンボードカメラの映像を見ても、シフトチェンジが例年ほど頻繁ではないような感じだった。 おそらく 8 速までは使ってなかったんじゃないかな。 ハイブリッドだから、ギヤ比変えなくても去年までよりはタイムの落ち具合は小さいのかも。

今年のフェラーリ、アロンソとライコネンってセッティングが全然違っていそうで、それについてのエンジニアのコメントが見てみたいものである。 このままライコネンがさらに調子をあげてくるようなら、アロンソの開発能力が疑われるところかも知れないが、果たして。

2014/05/27 のコメントを読む・書く


28 (水)

%1 株主総会

初めて参加してみた株主総会。 イオンの。

幕張メッセのホールを一カ所使っているんだけど、受付には行列ができていてさすが大企業。 商品券等が入った袋とペットボトルのお茶 (トップバリュ) をもらえた。 座席は 1,000 席を超える数が用意されているようだった。 へぇー。 報道関係の人も来ているようだった。

これは今回に限ったことだと期待するが、取締役のインサイダー取引関連のお詫びから始まった。 それでまぁ数字の説明、カスミがどうだとかウエルシアがどうだとか、ウエルシア関連で寺島の名前も出てきて元茨城県民にはやたらなじみ深い名前が続く。 あと海外進出が云々、ビデオが流れてそのへんの紹介。 で質疑応答なんだが当然といえば当然なんだろうけど結構長いんだな。 簡潔にわかりやすく質問をする人と、何がなんだかよくわからないような質問をする人がいて、あと、質問は 2 つまでというのにやたら長く突っ込もうとする人もいて、会議長が厳しく制する (?) 場面も。 売買単位数分の株式を権利確定日に持っていれば、一丁前に質問する権利はあるから、いろんな人がいるわけで大変なこった。

その後イオン歴史館というのを見て、前身のジャスコ上場が 40 年前だとかで、その前がまた結構古いようだ。 へぇー。

幕張メッセ内 1 幕張メッセ内 2 会場案内 バスでイオンモールへ向かう株主達 イオンのビル

人の少ない幕張メッセがなんだかコンピューターグラフィックスの練習課題のようでおもしろくて写真を撮った。 イオンのビル、でっかいからこれが本社だろうと思って写真を撮ったが違った。 イオンの建物がいくつあるんだここは。

%2 イオンモール幕張新都心

駐車場が「システムメンテナンスのため」無料開放というので、株主総会の間もありがたく使わせてもらった。

まー巨大というほかないようなショッピングモール。 グランドモールとかいうところで食事をとり、買い物をして、今日だけ使える割引券類を消化。 んでアクティブモールというところに行ってみようと思ったが、なんか遠そうな気がして車を出して移動してみたらちょうどよかったっていうのがでかさを物語っている。 幕張メッセのホールを端から端まで歩くとだいぶ時間がかかるが、それと同じだけ歩いてもグランドモールを歩くのが精一杯で、他に 3 つくらいモールがあるというような感じのでかさだ。 モール間の移動用の無料バスも時々出ているようだが、わかる気がする。 コストコが本当に小さく見える。

アクティブモールなんて、スポーツオーソリティーというスポーツ用品店が大部分を占めている。 普通ショッピングモールというと通路とテナントを思い浮かべると思うんだけど、テナントが全部同じスポーツ用品店で、通路沿いにレジがあるようなイメージ。 別に通路が店なわけじゃないんだけど、商品持ったまま通路歩いてもいいってことだろうなこれは。

%3 行き帰り

行きは高速を使って東関東道の手前まで。 一般道で側道に出るのが早かったかもというのが反省点だが、次にここに来るのはいつの日か。

帰りは首都高まで一般道で行ったら渋滞で時間が掛かった。 首都高に乗ればあとはまっすぐ帰るだけ、と思ってたら、箱崎ジャンクションを目指していたはずが、間違えて箱崎インターチェンジでおりてしまった。 もったいないけど仕方がない。 そこから一般道で帰った。

%4 N クイーン問題の話

xmm やら何やらを使うと速くできるんじゃないかと思っているんだが、とりあえず、AMD64 のアセンブリ言語で書いた。

ソースコード

AMD64 は IA-32 より汎用レジスターが多くて楽だ。or を何回もやっているあたりを xmm とか使ってまとめて書けないかと思っていて、少し調べてみたが xmm を使うための準備に手間取ると意味なさそうだよなぁとか思っている。 あるいは xmm で 4 並列くらいで実行できたらおもしろいのだけど。 これを呼び出す C のプログラムは以下のように書けばよい。

main ()
{
  printf ("%d\n", hoge (15));
}

2014/05/28 のコメントを読む・書く


29 (木)

%1 N クイーン問題の話のつづき

xmm に手を出してはみたが、やはり使い方がはまっていないらしくかなり遅い。16 バイトを一度に読み書きできるのは有効かと思ったが、逆効果だった。

それで、きのうのプログラムをさらにチューンする。 真ん中の列の処理をレジスターを使ってわけていたのを、プログラム自体をわけることでレジスターを一個あけ、条件分岐を単純化。 さらに、新たなレジスターを数個使用して、メモリー書き込み回数の低減を実現。

ソースコード 2

そんなわけなんだけど、例によって今時の CPU の複雑さが見えてきてしまった。 なぜか無駄な処理を入れると速くなるとか、足し算命令の場所をひとつずらすだけで速くなったり遅くなったりするとか (おそらくパイプラインに影響があるのだろう)、コードを穴の開くほど見つめても理解できない性能差が現れている。 計算内容が比較的単純なだけに悔しいところではあるが、バイト数を縮めるのとは訳が違って、勘と経験はあまりあてにならない。

このプログラムは AMD A10-6700 でそこそこいい感じの実行時間になるようにある程度調整したものである。 コンパイラーの仕事には感心すると同時に、最新のコンパイラーでもここまでのチューニングはできていないだろうなという思いもある。 おそらくパフォーマンスカウンターとかそういうのを使えばもっと細かく最適化できると思うが、試行錯誤ではなかなか難しい。

2014/05/29 のコメントを読む・書く


30 (金)

%1 負けたっ

最新のコンパイラーでもここまでのチューニングはできていないだろうな、と、きのうは書いたんだけど、アセンブリ言語とほぼ同じアルゴリズムのコードを C で書いてみたら、すみませんでした負けましたw

実行時間 (N=15):

はぁー。 さすがに -march=native は半端ない。 最初配列を構造体にして書いていて、ようするにそれはアセンブリ言語版とまったく同じデータ構造を使うことになってしまったのだが、それだとここまで速くなかった。 その構造体が 16 バイト長というのがやっかいで、アドレッシングで 16 倍という指定ができないから、アセンブリ言語版は 16 で加減算することによって 16 倍指定を回避していたのだ。 もしやと思って構造体をバラバラにして普通の配列に変えてみたらこの結果だ。 逆アセンブルしてみてみたら、prefetch などの CPU に対する重要なヒントの他、アドレス調整用と思われるいくつかのメモリーオペランド付きの nop や、きのう挑戦しかけて断念した SIMD、さらには blcic という AMD 固有の (Intel にはない) 命令まで使われている。 そういえばそんな命令マニュアルにあったっけ。 はぁー。

コンパイラーのすごいところは、変数名など何も関係が無く、ループの書き方さえもどうでもよくて、変数がどこでどう使われているかを調べ上げた上、効率が良くなるようなプログラムに落としていくところで、そのおかげで、多少順番を入れ替えたり書き方を変えたりしても性能が変化しない。 楽で速い。 移植性も抜群。Emscripten を使えば 1.5 倍の時間で動く JavaScript (asm.js) も作れる。 すばらしい。 はぁー。

%2 映画

テレビでやってた映画「藁の楯」。 読めない。 テレビ欄の宣伝文句は「日本映画史上かつてないスケールのアクション大作」ということだが、そうなのかな。 まーでも大沢たかおとか藤原竜也とか、出演者がすばらしく、やくざより怖い警部補って感じだった。

2014/05/30 のコメントを読む・書く


31 (土)

%1 あっつい日

原付乗ってひょいと出かけたら暑いのなんのって。 しかも武蔵境営業所は売り切れで狛江まで行ったから疲れた。

京王線地下化で陸橋の撤去工事中の場所があって、その近くの交差点はちょっと流れがよくないようだ。 半年くらいはうまく迂回したほうがよさそう。 この暑いのに渋滞は勘弁。 原付だったから引き返すのは楽だったけど。

自宅で今季初冷房使用。 外は摂氏 30 度超。

%2 PC-98 ゲーム

昔 PC-98 の DOS で何度か遊んだシューティングゲームを思い出し、エミュレーターで起動してみた。Promisence Soft の StormySpace というゲームだった。T98-Next だと画面がぐちゃぐちゃになってまともに遊べず、Virtual98 だと何とか遊べるが遅すぎる。 うーん。

他にも当時のゲームで遊べなくなっているのがあるかも知れない。PC-98 エミュレーターももう長いこと調べてないので、最近はもっといいのがあるかも知れないけど。

%3 Iron Man

テレビでやってた映画。 邦題「アイアンマン」。 題名は、鉄の人、あるいは、鉄の男というような意味の英語。

ロボコップ的な雰囲気の金属製のロボットスーツでたたかう映画、かと思っていたがちょっと違った。 主人公は天才的な技術を持った女たらしの社長というような感じの設定で、その主人公が悪者につかまり追いつめられて、超強いロボットスーツを作る的な流れ。 もちろんフィクションなのでいろいろと非現実的なところは多いけど、そこから正義のために悪に立ち向かうというようなストーリーが思ってたよりいい感じだった。 最後はロボコップと似ているかな。 いや、似てないんだけどね、なんかこう、主人公が最高に盛り上げて終わる的なところが。

2014/05/31 のコメントを読む・書く


Powered by Tomsoft Diary System 1.7.4

/var/log/hdk.log コメント一覧

トップ / 日記索引 / 日記 (2014 年 5 月下旬)

Hideki EIRAKU