酔漢 さん 2000年 09月 09日 11時 36分 17秒

サーキットをアップデートしました。

計測前にcount=0で空読みします。標準係数配列で良いエントリーは、
このときは何もしないでください。係数配列を変更したいエントリーは
count=0のときに変更します。

アセンブラでループを組んでいる人は、count=0のときにループ本体
が実行されないよう注意してください。私のコードは変更が必要でした。
Cのfor文でcount回回している人は、特に問題ないはずです。

ヘルプもアップデートしました。エントリーの仕様の追加分に詳細を
記述しています。

なお、SDKには独自係数配列の例があります。

酔漢 さん 2000年 09月 09日 09時 50分 58秒

count=0で呼び出して、次はcount=k でもう一度呼び出すわけですね。
で、エントリー側ではcount=0のときに初期化をすればいいというわけ
ですね。

それでいこうかな?これも機能を使わない人は新しい仕様を気にする
必要はないですね。

うるり さん 2000年 09月 09日 02時 13分 22秒

酔漢さん気合入ってますね。ちょっと置いて行かれ気味です^^;

Round3の改良:
初期化関数を呼ぶのも良いですが、count=0で呼び出して
初期化するという手もありますよ^^(大して変わらないけど)
私も配列サイズは通常時より大きくなることはないです。
今は4096バイトアラインメントを豪快にかけています^^;
自前のmallocだといつ開放するのでしょうか?
>RUNボタンが有効になっている状態で、RUN ALLを選択すると・・・
プさんも起きていたのでSSE搭載時に3DNが動くという問題ですかね?

最終兵器:
Nのサイズを気にしているあたりからして方針が違うかもしれません。
再帰的に分割すれば適当にキャッシュを有効利用するだろうと
いうのが私の目論見です(実際効果があります^^)

moetakaさん:
FFTは動くまでが大変なのですが、いきなり動いてますね^^
Athlon陣営に負けてられないですね。プさん。
>これで会社でデバックできます(^^;。
みんな本業大丈夫かぁ?え、私も?(笑)

(うるり的)SSE最適化(?):
>mov eax,[esi]
>mov [edi],eax
>mov eax,[esi+4]
>mov [edi+4],eax
>の方が
>mov eax,[esi]
>mov ebx,[esi+4]
>mov [edi],eax
>mov [edi+4],ebx
>よりもいいということですか?
この手の場合は経験的にはどちらでもほとんど変わりません。
このあたりアウトオブオーダー効果でしょうね。
表記レジスタが少ないので、レジスタ上で作業すると
前者の方法にならざるを得ない状況が多々発生します。
この場合どちらがより良いというより選択肢が無いです^^;
簡単に言うと、この例では同じ処理をするのに、前者はeaxを、後者はeax,ebxを使っていて後者の方が無駄があります。
全レジスタ8個のうちの1つは貴重なので節約したいですね^^;
#「同一メモリに書いて後で読む動作」を高速化する機構が
#あります。これを使えばメモリをレジスタ代わりに使えそうですが、
#PenIIIのSSEではレジスタ代わりには程遠い遅さでした^^;

酔漢 さん 2000年 09月 09日 00時 56分 54秒

自分でmallocかける分は問題ないと思います。

用意するフックのなかでmallocして初期化して適当な場所に
アドレスを保存しておけば、エントリーが呼ばれた時点で利用
できますね。


プティタイジュ さん 2000年 09月 09日 00時 53分 07秒

Yukさん:
BC++5.5で全く問題ありませんでした。
たぶん表示される警告の多さでプ勘違いしてた模様です。
#ところで文字化けは、もしかするとプのせいでしょうか?(TwT)
#カタカナな上に長いですから・・・すみません
#そろそろ名前かえる時期かなぁ

moetakaさん:
速っ(>w<)
プが最初に作ったやつとは比べ物になりません・・・
あのときはやたらレジスタ使い回して頑張ったのになぁ。

酔漢さん:
>これならば現行のDLLも再コンパイルの必要はありません。
エントリー内でやるように直しかかってましたが
プのやつも再コンパイルしなくていいですか?(^^;
サイズはNでいいです。
でもキャッシュラインの調整があるので
自分でmalloc出来た方がいいような気もするのですが、なんでもオッケ〜。

酔漢 さん 2000年 09月 09日 00時 51分 37秒

掲示板:

>客先よりi-modeにて

う、なんか申し訳ないです。私のほうで借りてそちらにリンクという
形にしましょうか?

ASMのデバッグ:
動くようになるまではひたすらコードを眺めて理由を考えるしか
ありません(汗)。ただし、自分で呼び出し側を作って、スタティック
リンクしてしまえば、デバッグの方法はいくらでもあります。たと
えば途中経過をどんどん配列に書き込んでいくなどです。

癖:
私は並列性を高めるよりストールをなくすほうに固執するので
あまり性能が伸びません。

プティタイジュ さん 2000年 09月 09日 00時 18分 13秒

遅くなってしまってすみませんが(TwT)
なんとなくBC++とNASMの使い方のサンプルなど・・・
http://www.e-net.or.jp/user/taiju/BC_sample.zip


Yuk さん 2000年 09月 08日 23時 42分 51秒

えっと、冗談で掲示板を作ってみました(^^;

リプライ順
http://www.serendipity.to/www/kb/kb.cgi?b=ikoi&c=v&num=20
日付順
http://www.serendipity.to/www/kb/kb.cgi?b=ikoi&c=r&num=20

今は設定で一つの書き込みの最大サイズは50kBになっています。
ツリー式の掲示板で書き込みの検索までついています(^^;

メンテナンス機能として書き込みの削除、訂正、移動が
できます。

たぶんそんなに重くもないはずです。書き込みの表示数は
URLの最後の数字を変えると変えられます。そう、閲覧者が
個別にカスタマイズ可能ですヽ(・_ 。☆バキ

フリーの掲示板を利用するのがめんどうなようなときは
使ってみてください☆


へるみ さん 2000年 09月 08日 20時 08分 53秒

>この表現が私の方針を上手く表している気がします。
>付け足すなら、
>#そして、演算器を絶え間無く働かせる並列性を持たせる。
>といった感じでしょうか。

具体的には例えばこんな感じでしょうか。
mov eax,[esi]
mov [edi],eax
mov eax,[esi+4]
mov [edi+4],eax
の方が
mov eax,[esi]
mov ebx,[esi+4]
mov [edi],eax
mov [edi+4],ebx
よりもいいということですか?

全充 さん 2000年 09月 08日 19時 32分 23秒

酔漢さん
了解しました。
掲示板の件
トライしてみます。
客先よりi-modeにて

moetaka さん 2000年 09月 08日 17時 24分 57秒

酔漢 さん:
pfpnaccありがとうございます。早速やってみて
動作することは確認しました。しかし相変わらず結果が...(;;)
あーっ!もういやっ!ASMはどうやってデバッグするんだー!
何がいったい内部で起きてるのかさっぱりわかりません。(T_T)

Creator Signature : Moetaka 2000-Sep-08
--------------------
Running AOS,ASM,3DNOW...
8.02E+001 uSec, 5.62E+004 cycles
# 最初にしては上出来でしょ。えへへ。


酔漢 さん 2000年 09月 08日 17時 19分 11秒

ご意見募集。

今日はあまりに仕事がめまぐるしかったので、逃避に
走ってカスタム係数配列実装のめどが付きました(^^;

やり方としては、エントリーKを呼び出す前にそれに付随
した係数初期化関数Kを呼び出します。この中で好きに
初期化してもらえば事は終わりです。何もしなければ
標準の係数配列がエントリーに与えられます。

係数初期化関数はオプションとし、実装しなければ
単に標準の係数配列を渡すように考えています。これ
ならば現行のDLLも再コンパイルの必要はありません。

と、これですむならサーキット側もエントリー側も
話は早いですが、配列の大きさはどうしましょう。
現行の配列サイズはN点FFTのときに浮動小数点数
N個分の大きさがあります。それで十分というならば
私も楽です。

いや、N以上の配列が使えるととても早くなるぞ、
と思う方は早めに意見をください。実装ががらっと
変わります(って、サイズ問い合わせ関数を一回
呼ぶだけだろうと思うでしょうが、パラメータ
オブジェクトの処理が変わるのです。主にエラー
処理の話ですが)

酔漢 さん 2000年 09月 08日 12時 33分 25秒

すごーく身勝手なお願い

全充さん、この憩いの広場番外編もにぎわってまいりました。
にぎわうにつれて過去ログに流れる速さも加速しています。
また、そろそろツリー構造もいいかな、と思います。
で、どうでしょう。Aroundのフリーレンタル掲示板がATComp
ライクでなかなか便利ですよ(^^)。ベンチマーク
サーキット用として、結果発表とわいわいやるのが
一本化されるとべんりだなっと(^^;

使用例としては、
紫川: http://freebbs.around.ne.jp/article/m/murasaki/index.html
みっちゃん's House : http://freebbs.around.ne.jp/article/z/zetton/index.html


酔漢 さん 2000年 09月 08日 12時 24分 19秒
URL:http://homepage1.nifty.com/murasakigawa/

pfpnaccは、ソースコード中に次のように書き込んで
ください。(多分あってるはず)

db 0fh,0fh,XX,0aeh

ここでXXはレジスタ指定です。次の2進数を16進に変換
して記述します

XXb= 11dddsss

ddd:3ビットであらわすディスティネーションmm#レジスタ
sss:3ビットであらわすソースmm#レジスタ

つまり、pfpnacc mm1,mm2 は次のように書きます

db 0fh,0fh,0cah,0aeh

ちなみにこの方法は pfacc のアセンブル結果と3DNowの
マニュアルを睨み合わせて開発しました(^^)

pswapdは porting guide の同じページにTEXTEQUで
しのぐ方法が紹介されてます。便利ですよ。

酔漢 さん 2000年 09月 08日 12時 07分 13秒

娘さん:
ああ、全充さんの娘さんでしたか。お子さんと仲がいいと
幸せでしょうね。

最終兵器:
ああ、アイデアがかぶってる(笑)。分割すべきNの設定
で悩みませんでしたか?K6-2/K6-IIIを考えると3段構え
かな、などと考えていました。

Radix4:
テーブルをサーキットで作ったほうがいいでしょうか?

moetaka さん 2000年 09月 08日 08時 38分 08秒

>BC++
Yukさん、プさんありがとうございます。
-WDオプションでいいのですね。
これで会社でデバックできます(^^;。

結局コンパイラには見切りをつけて酔漢さん作成ASM
コードをE3DNowに置き換えるのがよさそうなので、そちらの
方向に進むことにしたのですが、早速壁にぶちあたりました。

PFPNACC、PSWAPDをつかいたいのですがMSASM6.14でエラーがでます。
PortingGuideによるとPFNACCはサポートされてないとのこと。
むー。困った。直接16進で書く方法はわからない。

うるり さん 2000年 09月 08日 08時 34分 37秒

SSE2:
C言語はほっとくと倍精度だから、そう言う意味では
倍精度を良く使っているかもしれないなぁ。

困ったな:
>そうか、うるりさんの許婚か、知らなかった。
全充さんのお許しが頂けたようです?
これからはお父さんと呼ばないとダメかな?(爆)
http://www.kichi.com/sylvanian/index.html

最適化:
>うるりさんはどうレジスタリネームされているかが
>透視によって分かる訳ですね(^^;
面倒だけど多少は頑張らないとコンパイラに負けますからね^^;
制御とデータの流れぐらいは追っかけてからASM化してます。
この手のものは計算機の得意分野ですから、人間コンパイラは
疲れるだけであんまりうれしくないです^^;
>#少ない表記レジスタで、いかに物理レジスタを広く使うか、かな?
この表現が私の方針を上手く表している気がします。
付け足すなら、
#そして、演算器を絶え間無く働かせる並列性を持たせる。
といった感じでしょうか。
#この方法が本当に速いかどうかはまた別問題ですけど。
>なんとなく気持ち悪いのは細かい条件ジャンプを消去したら
>遅くなった経験がままあることです。(T_T)
意外と分岐予測がヒットしてたりして。
K6コアでの命令のアラインメントの影響が一番予測不可能だったので、
P6等での多少の性能変化はかわいいものだと感じます^^;

Round3の初期化作業:
>気付いてたらマシン語で書いて分からないようにしたのに(^^;
妙に読み込みが遅いので気づいてしまいました^^
私も、float MYCoeff[1048576*2+4096*2]という感じの
楽しい(?)グローバル変数で確保してみてます^^;
良く考えたらこれって10MB近くあるのね^^;

Yuk さん 2000年 09月 08日 01時 02分 14秒
URL:http://yuk.serendipity.to/

>BC++

えっと、実はBC++5.5ではないのです(^^;
5.5.1〜☆

アップデートパッチをあてたので、もしかしたらそれで
関係箇所がバグフィックスされたのかもしれません。

5.5.1だと-WDオプションをつけるだけでDLLができました。
恐ろしく遅い以外は問題ないです(x_☆)\バキ

そうそう、フリーのBC++だとTASMがないんでアセンブラを
使うのがめんどう(無理に近い)です(^^;>moetakaさん

わたしはC++ Builder3 Professionalから奪ってきた
TASMを使ってるんですけど。

>なにかありましたら今度こそお役に立ちますので

Intelのライブラリの使い方がわからないのです(/_;)
教えてください(x_☆)\バキ

あ〜、CASLの問題の謎も教えてもらわなくちゃ〜(^^;

さいきんシンセサイザーで遊んでいたのでそっちのページを
更新してました。シンセの音が好きな人はわたしのページの
KAWAI K1-IIの音を聴いてやってくださいヽ(・_ 。☆バキ

プティタイジュ@「サンジ」モード発動 さん 2000年 09月 08日 00時 00分 08秒

香織さん・・・なんて素敵な名前なんだ(*w*)
「よかったらプとFFTについて語り合ったりしませんか?」
それにしても、プティタイジュフェチかぁ、困ったな(*w*)
プには心に決めたディアナ様が(>w<)
#はい、プ勘違いもはなはだしいです。

あ、
>うるりさんの許婚か
くふぅ、プ遅かった・・・

#実は、最近携帯でもお買いになった、全充さんの会社のお姉さんなのではと思ってました

>細かい条件ジャンプを消去したら遅くなった経験
プにもあります。
間違い無く速くなるはずのところで・・・
ところで、へるみさんのところの掲示板いきなり変わっててビックリしました(^^;

>#プさんはDLL読みこみ時に何か作業しているみたいですが^^
やってます。やってますとも(TwT)
Coeffはシステムが用意するものだからいいかと、都合よく思いこんでました。
気付いてたらマシン語で書いて分からないようにしたのに(^^;
直すべきかどうかご意見を下さい。
#それにしても複雑な基数4のテーブルを実行時に作っててあの速度とは・・・
#これが強化人間とニュータイプとの差・・・

BC++
すみません、プがお役に立つ前に解決してしまってますか?
プはいろいろ変更してコンパイルしていたのですが、
Yukさんのお話によるとそのままでコンパイル出来るんですね。
なんでプが前やったときはできなかったのよう。
なにかありましたら今度こそお役に立ちますので・・・(TwT)

へるみ さん 2000年 09月 07日 11時 16分 29秒

うるりさん
>レジスタ上に乗せる、並列性を抽出する、ということを
>重点において書いてみてはいかがでせうか?
>「レジスタ上に乗せる」には、レジスタリネームを考慮する
>ことが含まれます。

なるほど。うるりさんはどうレジスタリネームされているかが
透視によって分かる訳ですね(^^;
まあパーシャルレジスタストールは気をつけているのでまず大丈夫
だとは思います。
なんとなく気持ち悪いのは細かい条件ジャンプを消去したら
遅くなった経験がままあることです。(T_T)
#分岐予測ヒットしないような部分のはずなのに...

PS.
Win午後べんち好評ですね。ではリンクさせてもらいますね。

全充 さん 2000年 09月 07日 08時 52分 23秒

娘に乱入されました。
最近子供向け(シルバニアファニリ?)HPに
書き込んでいたようですが。

そうか、うるりさんの許婚か、知らなかった。

Yuk さん 2000年 09月 07日 03時 58分 55秒

>SSE2

倍精度SIMDというと、多倍長精度演算用でしょうか(^^;
それこそFFTが速くなるとか、そういう用途ですよね。
わたしにはそれしか思いつきません。むにゅ(>_<)

でも、πの計算が速くてもあんまりうれしくないです(/_;)

やっぱり変な使い道を考えて遊ぶために追加されたん
でしょう('')(,,)('')(,,)ウンウン(笑)

わたしならSSEはえんぴつシミュレーターを作るのに使います(x_☆)\バキ

うるり@おまけじゃないじゃん さん 2000年 09月 07日 03時 44分 21秒

書いてる間に割り込まれたぁ。
クリティカルセクション指定しときましょう^^;

>最終兵器 周波数/基数4/SOA/SSE/再帰分割/プティタイジュフェチ
(笑)

うるり@も一つおまけ(燃えないごみ) さん 2000年 09月 07日 03時 39分 37秒

SSE2:
一部で過大評価されているみたいですが、
SSE2は基本的には倍精度2要素SIMDです。
SSEは単精度4要素SIMDなので、精度にこだわらなければ
SSEの方が2倍高速です(処理幅が2倍だから)。
#SSE2でMMX命令(整数SIMD命令)がSSEレジスタに対して
#使用できるようになりました。
#でも、MMXでできることをSSEでわざわざやるかな?
そんな感じで、SSE2だからゲームとか午後のこ〜だが
速いということはないです(たぶん^^;)。
このへんは単精度で十分だといわれてますからね。
#AMDもSSE/SSE2を搭載する方向にあるようですが、
#対応アプリケーションの数、Intelの普及推進、
#同一条件でのベンチマーク、いろいろメリットがあると思います。

PIIIの命令並べ:
x86系はレジスタが少ないので、レジスタ上で計算しようとすると
自動的に命令順が固定されることが多いように感じます。
アウトオブオーダー実行(意訳:順序無視実行)なので
命令順は比較的問題になりません。
SSE命令の場合は2uops(内部命令が2命令)のようなので、
デコードテンプレート(4-1-1のuops並びだと高速デコードが可能)
もそれほど気にしなくて良いと思います。
2uopsなのでおそらくスケジュール窓(範囲)がx87時の
半分(20のSSE命令)になります(残念)。
レジスタ上に乗せる、並列性を抽出する、ということを
重点において書いてみてはいかがでせうか?
「レジスタ上に乗せる」には、レジスタリネームを考慮することが含まれます。
パーシャルレジスタストール(レジスタの1部分のみ書きこむ等)が
発生するような状況は積極的なレジスタリネームを阻害するので
望ましくないと思います。
mov eax, [esi]  このeaxと
mov [edi], eax
mov eax, [esi+4] このeaxは別の物理レジスタに割り当てられます
mov [edi+4], eax
RISCとかとはちょっと違ったx86に合った書き方になるのかも?
#少ない表記レジスタで、いかに物理レジスタを広く使うか、かな?

Yuk さん 2000年 09月 07日 03時 20分 02秒

あ、ばぐった(^^;
下の内容はスレッド掲示板の方に情けない題で書き込んで
おきました。

うるり師匠〜、hi-hoのサーバーをちょっとクラックして
下のばぐった書き込みを消してしまってください(x_☆)\バキ

>香織さん

なるほど、子供さんじゃなくてうるり師匠の許婚ですかφ(._.)_ メモメモ
・・・どこにもそんなこと書いてないよ〜o(><;)(;><)oジタバタ(爆)

>WS

この前の論文でPOWER2の66MHzが266MFLOPSというのを見て
x86じゃ勝てないと思い知らされました(^^;

うちのせれろんさんは、510MHzでやっと118MFLOPSです(/_;)

でも、66MHzで266MFLOPSっていうことはスループット1の
4並列SIMDですか(^^;

うるり師匠ががんばればなんとかなる・・・と期待します〜、が、
ハードウェアの限界の前ではいかんともしがたい気がヽ(・_ 。☆バキ

>SIMD vs SMP

2つで1万円なんで価格性能比では勝ってるんですけどね(^^;
でも、師匠のプログラムが動かないんですよ〜(ToT)/

>最終兵器 周波数/基数4/SOA/SSE/再帰分割/プティタイジュフェチ

どうやらそろそろRound3も終わりそう^^;


」ル」」 、オ、 2000ヌッ 09キ 07ニ 02サ 58ハャ 16ノテ

、ハ、、ォ。「・ケ・・テ・ノキヌシィネト、ヒス、ュケ、皃ハ、、、ホ、ヌ、ウ、テ、チ、ヒ(^^;

、ヲ、、熙オ、、ホCクタク、ホFFT・「・・エ・・コ・犒ヘ、盪遉、サ・ム・テ・ッ、
BC++5.5、ヌ・ウ・・ム・、・、キ、ニ、゚、゙、キ、ソ。」

File : sdk_c.dll
Creator Signature : SDK-C 、ヲ、、 2000/03/24
Entry micro-Sec cycle
サエヨ エヨー、ュ 3.27E+002 1.64E+005
サエヨ エヨー、ュ(・ニ。シ・ヨ・ネセハャ) 3.26E+002 1.63E+005
シヌネソ エヨー、ュ 3.05E+002 1.53E+005
シヌネソ エヨー、ュ(ナコサネソナセ+・ニ。シ・ヨ・ネセハャ) 2.73E+002 1.37E+005
シヌネソ エヨー、ュ(ネソナセ+ネセハャ+5・ミ・ソ・ユ・鬣、) 2.54E+002 1.27E+005
シヌネソ エヨー、ュ(ネソナセ+ネセハャ+エソ4) 2.41E+002 1.21E+005
シヌネソ エヨー、ュ(ネソナセ+ネセハャ+エソ4+3$B%P%?%U%i%(B2.27E+002 1.13E+005
シヌネソ エヨー、ュ(ネソナセ+ネセハャ+SplitRadix) 2.57E+002 1.29E+005
シヌネソ エヨー、ュ(ネソナセ+ネセハャ+SplitRadix+3・ミ・ソ 2.51E+002 1.25E+005
====================
File : sdk_c_bc55.dll
Creator Signature : SDK-C 、ヲ、、 2000/03/24
Entry micro-Sec cycle
サエヨ エヨー、ュ 6.50E+002 3.25E+005
サエヨ エヨー、ュ(・ニ。シ・ヨ・ネセハャ) 6.61E+002 3.30E+005
シヌネソ エヨー、ュ 5.69E+002 2.85E+005
シヌネソ エヨー、ュ(ナコサネソナセ+・ニ。シ・ヨ・ネセハャ) 5.61E+002 2.81E+005
シヌネソ エヨー、ュ(ネソナセ+ネセハャ+5・ミ・ソ・ユ・鬣、) 5.46E+002 2.73E+005
シヌネソ エヨー、ュ(ネソナセ+ネセハャ+エソ4) 5.47E+002 2.74E+005
シヌネソ エヨー、ュ(ネソナセ+ネセハャ+エソ4+3$B%P%?%U%i%(B5.56E+002 2.78E+005
シヌネソ エヨー、ュ(ネソナセ+ネセハャ+SplitRadix) 6.17E+002 3.09E+005
シヌネソ エヨー、ュ(ネソナセ+ネセハャ+SplitRadix+3・ミ・ソ 6.03E+002 3.01E+005

、皃チ、网ッ、チ、翕ル、、、ヌ、ケ(ToT)/
コヌナャイス・ェ・ラ・キ・逾、、ト、ア、ニ、箋ー、キ、ニ、篦ョナル、ャハム、、鬢ハ、ォ、テ、ソ、熙キ、ニ。「
、ォ、ハ、ニ讀ヌ、ケ(^^;。羞ニー、マハム、、テ、ニ、゙、ケ

ヌメキシ moetaka、オ、、リ。「BC55、マ、タ、皃ハ・ウ・・ム・、・鬢ヌ、キ、ソ。」、オ、テ、オ、ネ
クォクツ、テ、ニVC++、サネ、テ、ニ、ッ、タ、オ、、。」、、ソ、キ、マBC55、ネソエテ讀キ、゙、ケ。」 キノカ

うるり さん 2000年 09月 07日 02時 46分 52秒

>顔文字の使い方が玄人っぽい辺り、うるりさんか
香織さんは私のお子さまではありませんよ^^;
全充さんかな?

>今までWS上で動作確認したソースを持ってきてもまともに
ぐわ〜〜ん。WSですか。そっちの上でベンチしても面白いかも^^

>でも、ここではSSEも3DNow!にも対応していないCPUの
>立場はきびしいものがあります(/_;)
大丈夫です。SIMDで2倍なら、Dualで2倍で対抗です^^;
キャッシュから外れるとSIMDは仕事をしたがらない様子(?)
なので十分倒せます^^;

>ちょっとフラグをつけてアクセス手続きにビット反転を
>突っ込んだだけなんですね
酔漢さん、すばらしいです。完璧です。楽しいです^^
特にNについて一挙にベンチできるのがすごく便利です。
#おかげで最終兵器が開発されました(笑)

Round3ベンチ結果:
プさん速過ぎ〜。N=1048576が特に速い〜。
スピード違反で切符切るぞぉ^^;

酔漢さんE3DNのAOS挑戦中ですか?
まだ3DNのSOAには追いついていないみたいですね。
Athlon系が速いのはキャッシュのせいかな?

最終兵器はこんな名前^^;
周波数/基数4/SOA/SSE/再帰分割/プリフェッチ

Yuk さん 2000年 09月 06日 23時 24分 46秒

あ、見知らぬ人が(^^;
香織さんはじめましてo(._.)oヨロシク


顔文字の使い方が玄人っぽい辺り、うるりさんか
プさんのお子さんですかヽ(・_ 。☆バキ

香織 さん 2000年 09月 06日 15時 20分 04秒

パパへ
香織です。こんにちは。
遊びにきました。(^^/

moetaka@勉強中 さん 2000年 09月 06日 05時 33分 00秒
URL:http://www13.freeweb.ne.jp/computer/moetaka/

ぐわ〜〜〜〜ん

グラフがまともに出ない理由がヘルプを見てやっとわかりました。
回転因子の並びがやりやすいようにならんでいるのですね。
酔漢さんのソースの意味の謎(cのインクリメント)も
やっとわかりました。
今までWS上で動作確認したソースを持ってきてもまともに
でないはずだ。

やはりIF仕様はきちんと読んでおくべきですね...
思い込みはバグの作りこみの元。反省(^^;

プさん。BC++の件、よろしくお願いします。
#Yukさんありがとう。

Yuk さん 2000年 09月 06日 01時 57分 53秒
URL:http://yuk.serendipity.to/

>へるぷ

読めました(^^;
ありがとうございましたo(._.)o>moetakaさん、酔漢さん

一般車輌改造部門でがんばります〜、が、サーキットで
走れるところまでいけるか心配です(^^;

FFTというか数学はさっぱりですし、Intelのマニュアルは
英語ですし、プログラムもわからないという三重苦で
前途多難です(/_;)

#なんか、ちらっと見た感じだとIntelのライブラリで
 bit反転の部分が分離されていないような・・・。

>?→キッス

やっと真の意味がわかりました(^^;
すごいですね('')(,,)('')(,,)ウンウン

>Intelのライブラリ

総力・・・でしょうね〜、たぶん。

http://www.intel.co.jp/jp/developer/vtune/v4/perflibst/

最適化用ツールのVtuneに付属しているライブラリです。
CPU別に最適化されていて、数値演算ライブラリなんかは
アーカイブで30MBもあります(^^;

>Dual Celeron

1.9Vに降圧しても333→510MHzで動いてます〜☆
でも、ここではSSEも3DNow!にも対応していないCPUの
立場はきびしいものがあります(/_;)

BC++でのサーキット参加についてはメールかWebスペースに
アップロードするかして教えてくださいo(._.)o
moetakaさんも興味があるそうなのでそちらにもお願い
します〜☆

酔漢 さん 2000年 09月 05日 23時 47分 02秒

ヘルプファイルを再アップロードしました。
すいません、インデックス表示に必要なファイルが
同梱されていませんでした。今度は大丈夫なはずです。

酔漢 さん 2000年 09月 05日 15時 56分 30秒

変更:

>酔漢さん、大幅に変更しなければならなかったにもかかわらず、
>こんなに早く機能UPしてくださってありがとうございます。

実はそんなに大幅変更ではないです。かなりしつこいオブジェクト化を
進めていますので、たいていの作業は小さなメソッドに分解実装
されてます。また、Round3からパラメータオブジェクトを導入して
サーキット自身の制御とパラメータ制御を分離しています。
ですから、ちょっとフラグをつけてアクセス手続きにビット反転を
突っ込んだだけなんですね。これが。

うるり さん 2000年 09月 05日 09時 02分 24秒

Round3:
>サーキット、エントリーSDK、ヘルプファイルを更新しました。
ぐはっ。更新速いっすね^^;
>ブー。最初から時間間引きだけです(爆)。
どうやらレギュレーション違反車が多数いた模様(笑)

くだらないもの:
>私のpageからリンクしてもいいですか?
はいどうぞ。このへんでよろしく。
http://ww1.tiki.ne.jp/~hino/gogowinbench103.zip

PIIIで命令の並べ方:
え?適当で良いのでは(爆)
私は、レジスタの使用順番を第一にして後は適当ですかね。
どうせSSEは2uopsだし。

酔漢 さん 2000年 09月 05日 08時 53分 10秒

下に書いた説明がまちがっています。

REQFEATURESで指定する要求事項ですが、

RF_DIT ならば、時間間引きFFTであることを宣言し、
RF_DIF ならば、周波数間引きFFTであることを宣言します。

両者のいずれも指定されない場合には、時間間引きです。

酔漢 さん 2000年 09月 05日 08時 44分 14秒

目次:
あーっ!本当だ。どうしてないんだろう。

moetaka@勉強中 さん 2000年 09月 05日 06時 45分 37秒

Yukさん。
>・ヘルプファイルが読めない
最初、私もとまどいましたが、このヘルプには目次が
ありません。'>>'ですすんでいきましょう。

#お互い、一般車輌改造部門でがんばりましょう。(^^;

プティタイジュ@(TwT) さん 2000年 09月 05日 00時 57分 00秒

酔漢さん、大幅に変更しなければならなかったにもかかわらず、
こんなに早く機能UPしてくださってありがとうございます。
#moetakaさんに習ってプの中での酔漢さんのイメージ:
#その圧倒的なスピード、力、魔力によって恐怖の統制を行う魔人から
#倒れているプに高級ワインをさしのべてくれるイメージに(^^;

そういうわけで皆様、もういちどダウンロードをお願いします。すみませんm(_ _)m

>ブー
なんと!レギュレーション違反してましたか(^^;
これからは「プチ・クラッシャー・T」ですか。

>「?」は、
つぶらな瞳(←四角だ!)、魅惑的なくちびる(←赤い口紅)、
だだをこねているおてて(←高速で回転してる)
という自称芸術祭グランプリな作品でありました。
#完全にライフゲームの見方を間違っています

>インテルの並列ライブラリ
こ、これは!インテルが総力を結集して作り上げたライブラリでしょうか!?
Yukさん、Dual Celeronなのですか!?
いいなぁ(●w●)
NTですか?…Linuxもとりあえず入ってたりしませんか?
#フォローありがとうございました(TwT)
#BC++はおまかせください(>w<) ←大丈夫か

>PIIIで命令の並べ方
これです(>w<)
プなどはPIIIの実機があるにもかかわらずいまだによく分かりません。
やればやるほど分からなくなるような…
経験的にはmovの間にはさんだ方がいい気がするのですが…
#それでターボラグの話に、ハイ。
これはきっとうるりさんが正確な解説をしてくれますよね、ね?

Yuk さん 2000年 09月 04日 23時 28分 13秒

とりあえずMT(Mersenne Twisster)の方のページを作って
からにしたいんですが、障害がいくつかあります(^^;

・BC++5.5でどうやるのか

これはきっとプさんが教えてくれるに違いありません。

・ヘルプファイルが読めない

こっちは致命傷な感じがします(^^;

解凍までは正常にできるんですが「はじめに」のページしか
読めません。目次(C)のボタンを押してもなにも起こりません(/_;)

きっとこれ以上進んではいけないという神様の思し召し
なんでしょう........ ( ..) スゴスゴ

酔漢 さん 2000年 09月 04日 22時 03分 18秒

サーキット、エントリーSDK、ヘルプファイルを更新しました。

変更点:
○RF_DIFで時間間引きエントリーも受け付けるようにしました。
○Run by N で、ひとつのエントリーを複数のNについて計測するようにしました。
○RunALL時の繰り返し回数を3に戻しました。

#ふぅ。

へるみ さん 2000年 09月 04日 15時 09分 53秒

うるりさん
>>あと、限定公開?の午後DLLのベンチも拾いました。
>無駄が多くてダメな感じが大変気に入っています(笑)

くだらないことにパワーを使うの、大好きです。
#欲を言えばデフォルトがnopsyだったらよかったなと。
私のpageからリンクしてもいいですか?

ところで、ごく基本的な質問なんですが、PIIIでデコーダが
滞らないように命令を並べる時って具体的にどんな風なのが
いいのでしょうか。
#って自分で調べろって言われそうですが...

例えば、movばかり4つならべるよりは依存関係の高い命令が近くに
なったとしても間にaddなどの演算命令を入れた方がいいのか、とか
そんなことです。


酔漢 さん 2000年 09月 04日 10時 58分 02秒

艦砲射撃:
援護射撃がないようなので、私からカウンターの艦砲射撃
をば(笑)

>Round3のレギュレーションチェックでは周波数間引きのマシンもオッケーだったことから

ブー。最初から時間間引きだけです(爆)。が、私の
わがままを聞いてもらったので、RF_DIFとRF_DITをつくり
ますか。MASMよりPascalのほうが楽しいし。

分散FFT:
参戦OKです。やり方のヒントはヘルプに書いていますよ。
要は分割統治法を分散的にやるだけです。

インテルのコード:
おー、いいですねぇ。真正面から対決しましょう。

某T大講師:
ここは喜ぶべきところでしょうか(汗笑)

#AOSに挑戦中

moetaka@勉強中 さん 2000年 09月 04日 07時 15分 25秒

酔漢さん。ご苦労さまです。早速Downloadしました。

話はかわりますが、私が入社して1年目のころ、構造化
プログラミングの演習(Pascalだったと思う)がありました。
某T大出身の講師が出題した問題は16個のFFTでした。当時
私はFFTもビット反転も知る訳がなく、ビット反転は変換
テーブル作成し、そこに論理的に書き込むのではなく、
あらかじめ数値を入れ込んでコーディングし、提出しました。
で、帰ってきたコメントは”もうすこし考えましょう”とのこと。

Pascal+FFTということで思い出してしまいました。
#私の中の酔漢さんのイメージは
#某T大出身講師になってしまいました。(^^;

うるり さん 2000年 09月 04日 03時 41分 21秒

ビット反転:
>我慢が効かないのでやってしまいました。
やる気120%ですね^^;
私もぼちぼち移植することにします〜
>第一段のFFTを行いつつコピー出来ることから
むう、面白いかもしれない。
これはビット反転済みでも実装可能ですね。
>しかし、周波数間引きなのです。
バタフライ後にビット反転するパターンですね。
ということは今回は使用できないことになるのかな?

Round3とMP:
>Intelの並列FFTライブラリを持ってるのを忘れてました(/_;)
ええ、なんでもありですよ^^
Quadでもクラスターでもガンガン活用しませう(爆)
Xeonなんか速いかもしれませんね、キャッシュ大きいから。
#どれもN=1024程度ではダメかも^^;

「?」:
>プが考えた自信作だったのですが、だめですか(TwT)
あの後しっかり試して、キッスの意味がようやくわかりました^^
>グライダー発射機をいくつか置いて戦わせたりしたかったです(/_;)(爆)
一部で好評のようで大変うれしいです^^
>でも、無駄(失礼)に凝ってますよね(^^;
>あと、限定公開?の午後DLLのベンチも拾いました。
無駄が多くてダメな感じが大変気に入っています(笑)
午後DLLベンチは限定する気は無いです、これって結局は
Round3ベンチ作成失敗のパワーとネタの流用なんですよね(爆)

Yuk さん 2000年 09月 04日 01時 48分 24秒

Intelの並列FFTライブラリを持ってるのを忘れてました(/_;)

これを使うだけ、というのもありでしょうか(x_☆)\バキ

Yuk さん 2000年 09月 04日 01時 39分 01秒
URL:http://yuk.serendipity.to/

なんか、しばらく低調でした(^^;
アトピー性皮膚炎なんで、暑い夏には弱いのです(/_;)<体質改善治療中


>ぷさん

なんか、混乱してましたね(^^;

わたしはプティタイジュさんの書き込みはいつも
のりのりでたのしいな〜、としか思いませんでした〜。

というか、もともとのわたしの書き込みがおかしい
のですヽ(・_ 。☆バキ

この掲示板には、少なくとも書いている人にはああいうのを
たのしめる人しかいないと思ってます(^^;
そうでない掲示板には恐くて書き込みできません(/_;)

?は120世代ちょっとで収束しちゃいますね。
でも、途中で対称パターンができたりしておもしろかったです('')(,,)('')(,,)ウンウン

あと、むずかしいことを書いてるのはわかりませんでした(x_☆)\バキ
これでわたしが名実ともに一般人代表ですねo(^^ )( ^^)oワーイワーイ


>うるりさん

ライフゲームにはまっていて書き込みできませんでした(嘘)

サンプルを動かして、グライダーのパターンを忘れていて、
思い出せなかったところで投げましたヽ(・_ 。☆バキ

グライダー発射機をいくつか置いて戦わせたりしたかったです(/_;)(爆)

でも、無駄(失礼)に凝ってますよね(^^;
バックグラウンドで動かせたり自動的に更新できたりとか。

あと、限定公開?の午後DLLのベンチも拾いました。
師匠にはどこまでもついていきます(x_☆)\バキ

>酔漢さん

頭が上がりませんo(._.)o(爆)

CeleronさんのSMPではRoundには縁がないなぁ、と思って
いたんですけど、よく考えたらSMPでの参加という道が
ありますね〜(^^;

FFTって効率的にマルチスレッド化できるんでしょうか?

できたとしても自滅の道をたどりたくないんで、サーキット
開催中にはやらないと思いますけど(x_☆)\バキ

・・・失礼しました。できるようです(^^;
http://www.ibm.co.jp/rs6000/resource/ufo/hozon-ban/psc.htm

http://guide.tokai.jaeri.go.jp:80/program/software/list/pg1/indexa.html
う〜みゅ、これの利用申請でも出してみますかね〜。
でもC言語版が2000年3月完成予定のままなのが(^^;;;

プティタイジュ さん 2000年 09月 04日 01時 08分 45秒

今、大変なことに気がつきました。

>ただし、入力データがビット反転配置換えを施されています。

これは非常に困ります(>w<)
実はタイムリーなことにプも高速化を達成していたのです。(まだLinuxのみですが)
しかし、周波数間引きなのです。

<読まなくてもいいプの舞台裏>
プは最初、基本の時間間引きで作ってみましたが、
神業的技術を使うも、うるりさんの周波数間引き 基数4 C
に大敗し、気がついたのです!
プでは世界最速である「魔人」うるりさんに勝てないのは分かっている、しかし、
C言語版に負けるなど、認めることはできない!
そこでFFTをよく分析した結果、
1.当然、アルゴリズムの選択が基数2では話にならない。
  しかしこれはSplit-Radixを使えばプにもチャンスはあるかもしれない。
  (この時点では、ループの複雑さから基数4とどちらが有効か不明)
  (↑本当は掛け算の回数だけでSplit-Radixの方がいいに決まってると思ってましたが、
  ドラマチックに書いてみました^^;)
2.問題はそれだけではなかった。
  時間間引きでは各ループでターボラグが大きい。
  そしてこれは、どのアルゴリズムを選択しようと変わりない。
ということが分かったのです。

そして、いざとなれば、Round3の特性である初期データのコピーも、
第一段のFFTを行いつつコピー出来ることから
周波数間引きの方が有効であるのは間違いありませんでした。
#面倒なのでやってませんが

Round3のレギュレーションチェックでは周波数間引きのマシンもオッケーだったことから
ひきつづき周波数間引きも認められることを我々は強く要望します! ←キャラ違う(^^;

うるりさんはどちらでもかまわないかもしれませんが(^^;
ぜひプに援護射撃を(>w<)

プティタイジュ さん 2000年 09月 03日 23時 23分 18秒

>つながりはないのかな?
つながってません。今年は花火大会が遅かったので昨日でした。
合コンは皆様の反応を見てから書きこもうかと考えてしまいました。
#というか、番組始まりそうだったので書けなかった(^^;

「?」はライフゲーム用にプが考えた自信作だったのですが、だめですか(TwT)

酔漢 さん 2000年 09月 03日 16時 42分 10秒

ついでに私のDLLもアップロードしました。
それなりの速度は出ていますが、これまでの
測定結果とは比較できません。まだまだです。

酔漢 さん 2000年 09月 03日 14時 43分 55秒
URL:homepage1.nifty.com/murasakigawa/

ビット反転:
我慢が効かないのでやってしまいました。これまで計測
していただいた方々、申し訳ありません。サーキット、
SDK、ヘルプを修正しました。紫川からダウンロード
出来ます。

エントリー側の変更は小さいです。わたされるパラメータ
の型や大きさ、数は変わりません。ただし、入力データが
ビット反転配置換えを施されています。count回のループ
の中で入力データを結果データ配列にコピーし、結果データ
配列の上でFFTを行ってください。

そっけないHELPファイルをちょっとだけ親切にしました。

テーブル:
>#ずるっこ方式を考えてました。
>あ、私の最終手段だったのに^^;
何度悪に手を染めようとしたかわかりません(^^;

#Pentium4のサンプルが秋葉に出ていますね
http://www.watch.impress.co.jp/akiba/

Return