mmx だめだー
結局書き換えてみたものの、変化無し。
やはりこれ以上速くはならないのだろうか…。
どう考えても命令数減らして、かつかつにしたのに( 使うmmxレジスタ2つ削ったのに )
結局変化無し。
どうしたらいいんだ全く…。
とりあえず、128bit化してみました。
速い。
普通に20ms切ります。
もう2つ余ってる…よね。うん。
mm5とmm7が余ってるので、これを使えば、一度に64*3=192bitができる。
しゅごー!
今のところなんか計算ミスしてるのか、正常に画面が出ません。
なんか画面の半分がインターリーブみたいにしましまが入ってしまいます。
まあ、こんなものはなんでもないのでさっさと直してしまいましょう。
あと、Visual C++ 6.0 Processor Pack な。あれな。マイクロソフトの銭ドルソングが聞こえるやつな。
Service Pack 6当てたら使えないだと。
SSE最適化しようと思うと、それがないとプリフェッチ命令すら受付ないだと。
(MASMのバージョンが違うだけなら最新のMASMを入れればいいだけの話だが…。)
.Net 2003だっけか、次のバージョンをご利用くださいだと。
4,5万するじゃないか。
professionalじゃないとまた、コンパイラ最適化が効かないんだろう。
関数のインライン展開ができないと全体でかなりスピードダウンしてしまうのだが…。
…SeShopで確認。2万か。
ちなみに学生用のSpokeだと5千円で買えるらしい。Professional の Academicだそうなので、C++コンパイラは最適化オプションが使える。
これならすでにSSEもSSE2も対応しているそうなので( コンパイラオプション /G6 /G7 らしいが )大丈夫みたいだ。
というわけで、インストーラパッケージ開いて手動で書き換え…。
面倒すぎます。まあ、それなりの利点はあるので、この辺でよしとしましょう。
最適化が一番効くコンパイラって何でしょうか?
やっぱりインテル純正のコンパイラがいいのかなあ。
でもどう考えても高すぎる…。7万て。バージョンアップしてもただなら、まあ…。
mmx enhanced
とりあえず、今まで使ってたアルファブレンドの計算式がうんこだったことが判明。
というか、mmxをサポートしていない場合に、フルCで計算するときの計算式は最適だったのだが、mmxの方は最適でない奴だった。
アルファブレンドの計算式:
( ( ( p - q ) * alpha ) >> 8 ) + q
である。
これならばかけ算一発。飽和も糞もない…よね?
これでもうちょっと早くなるはず…。
// しかし手痛いミスだった
これって、こい?
タイトルとは全く関係なく( 故意かも鯉かもしれない )
本を買ってきました。
画像
えと、左から
・JUNKFORCE 1
・JUNKFORCE 2
・機動戦士ガンダム エコール・ド・シエル
・闘うプログラマー(上)
・EME BLACK 1
・EME BLUE 1
・EME RED 1
です。
とりあえず、買った帰りに「 闘うプログラマー 」電車の中でで読んでみました。
面白いです。
今とは全然違う、パンチカードとかの時代です。フォートラン全盛より前。
今のところは。
NT開発プロジェクトの主任であるデイビッドカトラーが以下に屈強で精強な人間であるかが分かります。
あこがれますね、男として( ジェンダーです、文句あるか! )
見ての通り布団の上で撮った写真ですね。右上はケーブルがごちゃごちゃ。
左上はティッシュですね。なんだかちょっとアレですが、やましいことには使用してないのでご安心を。
4.5畳の部屋の中にティッシュの箱が3つ常時利用可能な状態でおいてありますから( アレルギー性鼻炎だからですよー )。
それにしてもとみにアレルギー性鼻炎がひどいです。何とかして頂きたい。
何とかして頂きたいと言えばユーロ相場。赤字が30万越えましたがな。
久しぶりに文章に装飾付いてます。
mmx つづき
どうも無駄な処理を発見。
必要のない命令分割がある模様。
mm3とmm4にmm0(dest)とmm1(src)のデータを格納して、別演算する必要はないみたい。
うまくやれば128bit一気に…なんて夢見たり。
それをやろうと思うと、4つのmmxレジスタでアルファブレンド処理を完結する必要がある。
0ばかりが並んだレジスタは使い回しが聞くとしても、やっぱり3つ。
1こ余る。
テンポラリに使おうと思えば使えるし、何とか128bit一気にできたら2倍近くのスピードが出るのだがなあ。
追記2005-06-02 22:04>>さらにたいていのピクセルのα値は0(透明)か255(不透明)であることに注意すれば、さらにスピードが出る。どう考えても条件分岐の方が乗算より速いと思う…。
mmx optimizing
頭が痛くなってきた…。
Intelの本家の方からMMXのマニュアルをダウンロードして読んでみる。
全部英語ですか。
HOW TO OPTIMIZE FOR THE PENTIUM PROCESSORを読む。
何とか理解できる程度。
レイヤ合成のためだけにMMXを一から勉強することになろうとは。
とにかく速いほうがいい。
ここら辺はグラフィックボードで計算すればそこそこのスピードは出るそうですが、
どうしてもDirectX使うと言ってもDirectDrawまでしか使いたくないので、却下です。
目標は800*600の二枚レイヤアルファブレンドに10ms以下。
がんばって5ms以下にできたらいいなあ。。。
理論的に不可能な数字だったりして。
とにかく読みます。
prefetchってmmxで使えるのかなあ?
追記2005-06-02 17:08>> 無理
アブソーバーズ - 2
こういう話はまとめずにつらつら書くと訳わかんなくなりますな。
適宜修正させて頂きたい。
今回は一応頭の中でまとめてみました。
前回のアメリカの話。
で、結局アメリカはイラクに侵攻した。
それはなぜなのか、と言われれば、正常な世界史の知識が有れば理解できることだ。
…こう書くと、いかにもイラク戦争を指示してるみたいに見えるから不思議。字面を字面のまま読み取らない人が多いのが困る昨今です。
とにかくイラクは世界の平和に邪魔だった。
未だに古くさい独裁を続け、なまじ石油を握ってる分たちが悪い。
場所も問題。
ホットな中東のど真ん中で「 アメリカに勝つ! 」みたいなことを言っている酔狂な国なもので、はたはた困った。
民族問題でもあのあたりは少数民族がたくさんいて、圧迫されて困っている。
そこで軍事侵攻ですよ。
大量破壊兵器は可能性としてはなくはなかった。
湾岸戦争で毒ガスをクルド人相手に使用した、と言われているくらいですから。
それに、アメリカ軍には勝つ自信があった。
ハイテク兵器で武装したアメリカ軍が、エア・ランド・バトルで侵攻すれば、ガスキンやら何やら、時代遅れのロシア製兵器で固めているフセインの軍など目じゃない。
そしてあっけなく勝利した。このあたりのことはいろいろな本に書かれているが、まさにアメリカ流の戦争だった。
SEADやって、もって航空優勢を確保して、で、陸上部隊が侵攻する。
F117ナイトホークは無敵だった。
だけど問題はそのあと。
歴史を学んでいればやっぱり分かる通りに、アメリカは" どつぼ "にはまった。
…統治できない。鎮圧も制圧もできない。
政府内部で明確なベクトルに沿って戦争ができるわけがない。
政府内部には対立がいろいろなところにあって、思う通りにはいかない。
国民の支持がなければ大統領などたちどころにいなくなるし、企業の支援が無くても同じ事。
とにかくアメリカはにっちもさっちもいかなくなってしまった。
理想は高かった。でも、やり方はやっぱりまずかった。
…のかもしれない。
もしかしたらこの混乱は誰かのシナリオ通りかもしれないし。
続く…かも( 本論が分かりづらくなって参りました )
なんだかすごいことに
ageのプログラムすごいね。
あれでDirectXは不要と歌っているのだから恐ろしい。
…少なくとも自分の技術ではあそこまでストレスレスな動作は保証できない。
試しにMMX2とSSEを切る設定にして動作させてみるが、…あまり変わらない?
もしかしたら、切る設定にしても内部で利用できるものは最大限利用するのだろうか。
それはないはずだ。あれはいわゆるトラブルシュート用なんだから。
つまり少なくとも僕が試したシーンではMMXの範囲で大丈夫と言うことだ。
DirectXには手を出したくない。
なんだか前回失敗してあれと言うのもあるし、今更システム総入れ替えというのも嫌だ。
一応自前でDIBのクラスは作ったり、ERI形式のラスタフォーマットのサポートなんかをしたりして、いわゆる愛着があるので、DirectXはいやなのだ。
というわけで、いろいろネットを探してみてます…。
MMX2ってマスターしたらさらに速そう。
PenitumIIIが最低推奨環境なので、MMX2も使ってOKでしょう。もちろんそこはそれ、機種ごとに違うわけですが。
吉里吉里のalphablendルーチンを見てみる。
これは…長い。読むのに一苦労だが( 全部アセンブラなので )得られるものも多そうだ。
なんか、アセンブラにはまりそうな自分。
でもアセンブラって…プログラミングとはあんまり関係なくなってきたんだよなあ。
プログラミングはもはや言語論の域ですから。
アブソーバーズ - 1
アメリカ、って、今かなり国民の間でも不満が高まっている国なのではないかな?
パーセンテージから言ったら少ないかもしれません。でも増加率から言ったら、かなりなんじゃないかと。
比較対象がないので" あれ "ですが。
アメリカが何をやりたいのか。
石油利権か。
自国の安全保障体制の確立か。
でもやっぱり、あの国は正義で動いている気がする。
あの国は昔から友達の少ない国だから。
自分の信じた正義を貫いているのだろう。
あの国が戦争を起こす。
彼らは平和を守るために、戦争を起こしているのかもしれない。
矛盾する事じゃない。
ベトナム戦争だって、そうだった。
結局失敗して、アメリカはひどく後悔したはずだ。
憲法9条の改正。戦争放棄。
日本人には聞こえがいいフレーズだ。
戦争はしません。
たとえ台湾が中国は福建省から飛んできた東風で無茶苦茶にされても、
そして強大化した中国の航空隊、餃子で買ったスホーイで国土がぼろぼろにされても、
それをこんごうが迎撃できるとしても、
一切手を出しません。
外に軍隊は派遣しません。
イラクの困っている人たちに給水などいたしません。
たとえ彼らが水が無くて枯れ死んでも、
軍隊は外に出しません。
…戦争はしませんって、日本人にはとても耳障りのいい言葉ですね。
弱い者を守ってあげるって言うのも、戦後50年、経済的に急成長したかつての列強の使命かもしれないですよ?
あのころの日本は弱すぎた。
じゃあ今は?
続く…か?
livedoor FX virtual - ユーロが上がらない話
さあ、これをお読みになっている方は今すぐ、
・i-modeの方は野村證券のページへ
・インターネットの方はどこでもいいので証券会社のページに
れっつ、あくせす!
もうユーロが全然上がらないのなんのって。
135.00ぐらいですか。2005-05-30 18:37時点で。
買ったときから70銭も値を下げてやがる訳ですよ。よく考えたら、135.70なんて高値で買う方がおかしいと、今になって気づくわけです。後悔先立たず。
膝を抱えてユーロ相場をしょぼくれながら見ていることにします。
しょぼーん、と。
あ、あとエフェクトシステムの元凶が判明。
アルファブレンディングルーチンが遅い。
これさえ解決できれば、無制限レイヤかもさくさくです。少なくとも現在20ms/フレームであるところを半分まで持って行けたら…。
それができなければ、ある秘策があるにはあるんですが、反則気味なんだよなあ…。
レイヤシステム
というわけで、レイヤクラスの設計を開始。
もう面倒なので、レイヤクラスですよ。
レイヤは動的に持ちますよ。スクリプトの方で生成も消滅も何もかも自由自在ですよ。
つまり
LayerA.fade(256,0,30)
とやれば、LayerAはだんだんとフェードアウトしていきますよ、30msかけて。
つまり、画像とエフェクトを内蔵したクラス。
あとカラーキーとα値は共存できる。
うまくやることでかなりの計算を省くことができる。
カラーキー付きのαブレンドを実装しないと。
