約1週間ぶりに研究室に行きまして、机の掃除をようやくした。
随分綺麗になったかな。
掃除も終わって、まったり過ごすかなぁと思ってたら教授からヘビーなタスクを割り振られた。
なんでも現状のGAのCプログラムにおいて、(アセンブラのコードで)1世代平均何ステップ実行しているのか求めて欲しいと。単純に実行時間が短かくなればステップが減ったという根拠にはならないかなぁと思ったがメモリのキャッシュもあるし、論文に載せる以上そういう根拠となるデータも欲しいとのこと。(´・ω・`)
とりあえず今日はアセンブラのコードをコンパイラに吐かして、Cのみのソースとともに紙にプリントアウト。アセンブラ得意なdesutanと共にCのソースをアセンブラ何ステップか紙のほうに書き込み。(我ながらやってることがローテクだなぁと思うが、参照はディスプレイ、書き込みは紙の方が優れているんじゃないかなぁと思ってる。)
一応この作業を途中までやって今日は終わり。木曜はコレの残りと確率計算だなぁ...。うまくいけるか未だに不安ですが。
---
アセンブラのソースを見ていると色々なところで新しい発見がある。
例えば、もはやコーディングの悪例として名高いグローバル変数。
あれって普通の変数同様に使用する場面になったらその場で参照されるのだろうと思ってが、レジスタに余裕があるときはグローバル変数を使う関数を呼び出す段階で参照するのね。アセンブラのソースを見て、初めて知った。
後は
int i=j=0;
みたいな2変数の初期化。
素直に2回初期化作業をするのかなと思ったが、ところがどっこい、xorを使って1ステップで済ましてる。
普段コードを書いてるとこの辺のことは全然意識しないが、実際にアセンブラのソースをみるとなかなか熱いことをしてる。そんなことに気づいた一日であった。