私的メモ

気が向いたときに更新。(2003年12月版)

2003/12/30 

ipmsg

・電子認証
・NAT/FW 越え通信
・C/S化
・認識精度向上+認識用パケット低減
・多言語同時表示
などをつらつら考えたり。
全てを満たすには、新プロトコルにしないとダメかな…。

映像の世紀

何気なく、NHK「映像の世紀」の類いの番組に出くわすと、ついついずっと
見てしまう。何ともいえない感じになりつつ、同時に、自分が歳を取った
ことを自覚してしまう今日この頃。

クルーグマンのこんな本を買おうかなと考えつつ、日本もアメリカも、首相や
政府のレベルは、結局、その国の民度の反映なんだろうな、とも思ったり。

年末

今年もそろそろ終わり。
いろんなことがあったな。

2003/12/16 

Pentium 4

blowfish の実装でいろいろと速度実験していると…
CBC モードでの feistel 構造のように、前回の結果に依存する演算が大量
に存在する場合、Pentium 3 系に比べて、同一クロックだとむしろ遅い模様。
EBC モードにし、手動で演算を並べ替えて、(追記:要はインターリーブ)
 ブロック数 * (1ブロックを16ラウンド)
という形から
 ブロック数/n * (16ラウンド * (nブロックをそれぞれ1ラウンド))
という形に変更すると、少なくとも n=8 までは速度がぐんぐん伸び、
実行速度は n=1 の 4倍に。

(補足:ぜんぜん正確な例ではないけれど、イメージ的には、
 a++;a++;a++;a++; b++;b++;b++;b++; c++;c++;c++;c++; d++;d++;d++;d++;
 とするよりも
 a++;b++;c++;d++; a++;b++;c++;d++; a++;b++;c++;d++; a++;b++;c++;d++;
 の形の方が大幅に高速になった。実際のテストでは、単純な increment 部分
 が blowfish 各ラウンドの攪拌処理に相当)

Pentium 3 / Athlon では n=2-4 でほぼサチり、およそ 2 倍強程度。
(とはいえ、Pentium-M/1.2G と Pentium 4/2.26G との最速結果の比は
 1:1.5 程度しかない) K6 では、n=1 が最速。n が増えるにつれ、徐々に遅くなる。

Pentium 4 のパイプラインがいかに埋まっていないか、の証明かな…?

それから、バイトオーダー変換部分を C言語→インラインアセンブラ(bswap)
に変更すると、15% 程度速くなる模様。(バイトオーダー変換は、feistel 構造
に入る前と出てきた後の、計2回実行しているだけなのだが)

Python

Python で自作してみた amrita もどき。
ループしたい範囲と、個々のタグの範囲は違うしなぁとか、DreamWeaver
からも問題なく扱えるようにしたいなとか、直感的に理解しやすいように
などと、つらつら考えるうち、結局、全然違う文法にしてしまった。

・値置換は $val の形。
・拡張タグとして <ex ... > を使う。
・ループ範囲指定は、<ex loop="loopname"> ... </ex> という形。
・置換用のデータは map(連想配列)。ループは map の list として表現。
 (map - list - map - ... の繰り返しで任意次元のネストが可能)
・指定ブロック範囲を表示するかどうかの指定は、<ex disp=$val> ... </ex>
・テンプレートのインクルード指定は、<ex include="xxx.html"/>

その後、いろいろ調べてみると、Perlの HTML::Template というモノと基本構造
が良く似てる印象。(とはいえ、かなりサブセット)

ひさびさ更新

ひと月以上放置プレイ…書こうかと思うネタは時折見つかるものの、
手動更新がいささか面倒になってきている模様。
asahi-net で cgi が使えるといいんですけどね…。

 11月のメモ index 1月のメモ
ipmsgicon
ご意見・ご感想はこちらまで:email

..up menu

Copyright(C) 2003 SHIROUZU Hiroaki