« 2009年6月 | トップページ | 2009年8月 »

Intel アーキテクチャ

自分で作ったプラグインを「どの程度のもの?」と評価なんぞを。

まぁ、凹みますわ。



そもそも、アセンブラをやる羽目になろうとは。

その筋の人は聞いた事のある『ムーアの法則』
「CPU の集積率は2年で倍」という例のヤツ。

「地味にアセンブラで書く時代は終わるだろう」と思ってたのに。
ところが、まだまだ需要はあるわけですね。

そんな私はこのプラグインを作るまで
x86 の命令コード(Instruction)すら良く知らなかったわけで
Intel社の技術資料 から幾つか落としてきて斜め読みしたり。

私自身 RISC アセンブラ経験があり、ヘネパタを一通り読んだ事があるので
前知識があると言えばあるのですが、
それにしても x86 は複雑過ぎ。

CISC を引きずっている CPU というのは、こうも複雑なのかと。

アセンブラ・チューニングというのは幾つか段階があるんですね。
『第1段階』Sequence をアセンブラ命令セットでとにかく実装する。
 これには、
 ・どういうレジスタがあって
 ・どういう命令セットがあって
 ・どう組み合わせれば良いか
 という知識が必要になります。
 C 言語で普通に組んだ場合にコンパイラが吐かない命令を書けるところに
 メリットがあります。
『第2段階』最適命令の選択。
 ある処理を実装する場合、方法は幾つもあるんですね。
 ・同様の結果をもたらす異なる命令セット
  (x86 の例であげると、decとsubや、cmpとtest、movとlea)
 これを判断するには命令セットのクロック数などの知識が必要。
『第3段階』高速化テクニック
 ・2つ以上の実装方法アイデア
  (分岐ミスペナルティ、分岐予測とか、ループアンロールとか)
 が有る事を理解した上で、どちらの方が優れているか。
 これらは、高速化テクニックそのものを知っているかどうか。
 その効果がどの程度現れるかを知っているかどうか。
『第4段階』パイプライン
 これはパイプラインがどの様に実行されるかイメージできる事が必要
 なんですね。
 EX ステージが幾つとか、フォワーディングがどうのとか。
 この知識があると、命令コードと命令コードの間にストールサイクルが
 見えてきます。
 ストールが無くなるように命令を置き換えてやれば良いわけです。
『第5段階』メモリリード、ライト
 実メモリ上のデータがどうやってレジスタまで持ってこられるか。
 まぁキャッシュですね。
 これが 1-way や 2-way ぐらいなら、まだ着いて行けるんです。
 4-way とか L2 とか、もう訳がわかりません。
 ライトについては、ライトバッファの個数、ライトバック、ライトスルーなどです。
『第6段階』投機実行
 スーパースカラなどパイプライン入り口の事です。
 「Uパイプ, Vパイプってなんだよ」と思っていたらPentium3以前の話らしい。
 (注;私の理解そのものもあやしいですが)
 Intel の場合は CPU ファミリごとにこの辺が入れ替えられているようで、
 uOP(マイクロオペレーション)がどうの、と言ってたら、もう古いらしい。
『第7段階』キャッシュ
 キャッシュの最適化、というのは直接的に見えない分、分かりにくいです。

段階はまだまだ先があるかもしれません。
x86 の場合はアーキテクチャが複雑で、幾ら掘り出しても、
まだ新しいアーキテクチャが埋まっている。
そんな感じ。

「アーキテクチャを全部理解するなんて到底無理。」と半ばあきらめムードに
なってしまうんですね。
アーキテクチャの奥が深いのです。
登っても登っても頂上が見えてこない山の様です。

私がやったチューニングと言えば、せいぜい『第3段階』
この地味なチューニング、自動車のチューニングに喩えると
エンジンのシリンダの中を滑らかにして、というのに近いものがあります。
つまり、努力の割にたいして速くならない、でも確実に効果はある。

昔はちょっとでも速くなると嬉しくて「もっともっと」と思ってたものですが、
今は「もうこの辺でいいや」と、そんな気分になってしまいます。


で、何を凹んでたかと言うと、
組んだルーチンをテストしてたんですね。
ルーチンごとにどのぐらい効果が出たかを。

出力サイズをちょっとずつ大きくしていくと、
ある段階でいきなり処理時間が(サイズ変更前の)倍ぐらいの遅さに。
しかも、そんな時に限って
苦労して組んだアセンブラルーチンより C 言語の方が数段速かったりして。orz

これは、おそらくキャッシュですね。
キャッシュリプレースの応酬が起っているのだと推測されます。
ある意味、コリジョンが発生していると言ってもいい。

「なんだ結局はキャッシュなのかよ」
チューニングしたのに思ったように結果が出なくて凹んでたわけです。


そんな今日、SSE に非テンポラルストアと言う物が有る事を見つけました。
これかなぁ。
でもやっぱりアラインメントを合わせてやらないとダメなんだろうか。
(それは非常に手間だ)

| | コメント (0) | トラックバック (0)

AviUtl プラグイン

AviUtlのプラグインを作りました。

ジャンルカテゴリプラグインupdate
拡大縮小Freeware 超解像(テスト)Ver.0.05
*.aup を TMPGEnc 経由で使用した際にメモリアクセス例外で落ちる不具合を修正しました。
2009/08/12
超解像(テスト)Ver.0.04
チューニングしました。(V0.03より高速になっています)
2009/08/05
超解像(テスト)Ver.0.03
チューニングしました。(V0.02より高速になっています)
スレッド処理が選択できるようになりました。
2009/07/20
超解像(テスト)Ver.0.02
チューニングしました。
そこそこ使える速度になったと思います。
2009/07/12
超解像(テスト)Ver.0.01(旧版)
処理が重いです。
2009/05/30
インストール
aviutl.exe と同じフォルダに *.auf ファイルを置いてください。
アンインストール
*.auf ファイルを削除してください。


『超解像』についての関連記事はこちら


ジャンルカテゴリプラグインupdate
エフェクトFreewareジオラマ気分
航空撮影した画像を中央のピントを合わせたまま上下をぼかすとジオラマのように見えるそうです。
(ただし、この plugin は私のストレス解消のために2時間で作ったもので、それほどのものではございません。)
2009/07/12

| | コメント (4) | トラックバック (0)

ディスポーザーがつまりました

気が付くと1ヶ月更新してませんでした。

えー昨日ディスポーザーがつまりまして。

(ディスポーザーというのは、台所の流しで生ゴミを粉砕して流せるシステムのことです。)

ディスポーザーそのものは回転しているので、その奥で詰まっているようです。
微妙には排水しているようですが。


ネットで調べると、
トイレの詰まり解消に使うゴム製のお椀型の吸引機(ラバーカップって言うらしい)で
シュポンシュポンするのが良いような事が書かれてました。

結局、会社帰りにホームセンターに寄って買う事に。
これでダメなら業者呼ぶしか。

ところがホームセンターには、大小さまざまな大きさのものが。
しかし台所の排水口は大きいので
「この大きさで大丈夫か?もっと大きいの無いの?」
と、ちと心配だったのですが、

そのホームセンターで扱っている一番大きいサイズの説明に
『トイレの詰まり解消、キッチン排水口の詰まりにも』とあるのを見て
それを購入。

大きさはギリギリでしたね。


おそらく敵はディスポーザー下のU字管あたりなので、
その部分に詰まった敵を上下にゆするように意識して、
シュポン、シュポン!

数回やると何事も無かったかのように排水されていきました。

成功っと。

ディスポーザーは梅干の種など堅いものはNGなのですが、

玉ねぎやニンニクの薄皮のような繊維質の強い物も苦手なんだそうです。

うちの場合は
玉ねぎの皮なんか、問題なく処理できていたので気にせず使ってたのですが、
先日、玉ねぎペーストを大量に作ったのがボディブローになり、
昨日、大根の皮のかつらむきがトドメをさしたようです。

恐るべし植物繊維。


ちなみに、詰まった時に薬品に頼るのはディスポーザーには良くないらしいです。

詰まってない時の日頃のお手入れは、
週1ぐらいで、製氷機で作った氷を粉砕してやれば良いみたい。


詰まりではなく、回転しなくなった場合は、電源を切って異物を取り除く。
それがダメなら業者を。

| | コメント (1) | トラックバック (0)

« 2009年6月 | トップページ | 2009年8月 »