中間報告
行番号表示、スクロール、色分け、「以外」は作り直しました。
色分け以外ができたらalpha-31にしたいと思います。
「行」を管理しなくなりましたので、だいぶすっきりした反面、行番号やスクロール関係どうしましょうね?状態です。
とりあえず、30M強のファイルの先頭部分でも、我慢できる程度には動きます。ギャップの移動はやはり時間がかかっているようですが…。やねうらおさんにいただいたコメントのように、MMX転送にしたら改善されるのでしょうか?いや、そんなことよりも、時々起こるアクセス違反の原因究明が先です。(;_;
色分けは、速度を稼がないといけませんので、前に書いたようにDFAを勉強してからにします。
書くようなネタが無いのがばれてしまいますね(^^
MMXリンク集
MMXは実は使ったことがないのでメモ。
Delphi6以降はインラインアセンブラがMMX対応、っと。
MMXの解説は以下のページがわかりやすいです。
http://www1.kcn.ne.jp/~robe/pf/pf009.html
Delphiの例。インラインアセンブラでMMXが使えなかった時代のものですので機械語を数値で埋めこんでますね。
http://forum.nifty.com/fdelphi/samples/00877.html
movups movntpsという128ビット転送も初めて知りました。
http://www.azillionmonkeys.com/qed/blockcopy.html
Athlon用?いや、SSEだからPentium3でも使える?よーわからんですが一回暴走させれば済む事。でもネット上のソースはMovQが多いですね。
最後の手段リンク。読みたくないです。
http://www.intel.co.jp/jp/developer/design/pentiumiii/manuals/index.htm
これぐらい残しておけば、万が一、突発性MMXにしたい病にかかってもすぐに取り掛かれるでしょう。
あと、どれぐらい速くなるか。他人の成果は積極的に参照すべし、とかてきとーなことほざいて実測をさぼります。(^^
http://www.cyborg.ne.jp/~xelf/developer/MemoryCopy.html
えーと…
http://d.hatena.ne.jp/shinichiro_h/20040616#p1
わざわざ実測してくださった様子。ありがとうございます。
MinGWを使ってPentium3で走らせますと、上から、4746, 3004, 4586, 4456, 3384で、やはりmovntqが最速でした。(しかしmemmoveが3414なんて数字を叩き出しましたので、MMX化してもあまり意味無さげ…)