ECCp-109 challengeメモ
この頁はECCp-109 challengeに参加するに当たって気がついたことなどのメモをまとめています。
が、解けちゃったので、もうあんまり意味なさそうだなぁ。
以下の内容については無保障です。
嘘を書いているつもりはありませんが、書いてあるとおりに実行して問題が起きてもしりません。
自己責任で行なって下さい。
もくじ
binaryが準備されている環境の人(MS-Windows, Linux, BeOS)はそれを拾ってきて実行したらいいんだろうけど、残念ながらFreeBSDは準備できているように見えて、link先が無くなっていた。:-<
(2002/10/14に見たら復活していた。)
ただ、clientのsource (eccp109-132-2.tar.gz)も公開されているので、何も考えずにmake一発と思ったら、ちょっとMakefileに問題があって出来なかった。
一箇所sをSにするだけだから手で直してもいいけど一応パッチ。
sourceを展開したディレクトリで
「patch -p1 < 132-2MakefileFix.diff」
とでもして当てて下さい。
で、Makefileを直したら
make x86lCL
でeccp109-x86lCLというバイナリを作ってくれる。
あとはこれを適当なディレクトリにコピって実行すればOKと、いいたいんだけど
最初は色々初期化するとかあるので、とりあえず
./eccp109-x86lCL
として実行するとHandle, Email address, Unique Real Nameというのを聞いてくるのでいれる。
Unique Real Nameは「no spaces!」と宣言されているにも関わらずどうも入れたくなるので注意。:-)
で、「OK? (y/n)」に「y」と答えると
- eccinfo
- plist
- userinf.txt
というファイルを作成&初期化してくれる。
userinf.txtには上に書いたHandleなどが入っているので後から書き換えてもよさそう。
eccinfoとplistはなんだかよく分からんが、途中経過とかが入るファイルみたい。
で、準備が整ったところで
./eccp109-x86lCL -xmit
とすると実行される。
優先度を下げたい人、backgroundに回したい人はそれぞれ適切なUnixの命令を入れて下さい。
で、マシンにもよるけど数十分ほどすると
dplist
というファイルが出来る。
で、この中身が2時間毎に集計サーバーに自動送信される。
で、そのlogが
dplist.log
に溜っていく。
私はonlineで直接Internetに繋がっているので、そうじゃない場合は調べてない。
onlineじゃない人は色々documentに書いてあった気がするので見て下さい。
proxy経由で結果を送る場合はeccp109.iniをcurrent directoryに準備し、中に
PROXY=host:port
と書く。
templateは
eccp109-132-2/inter/x86lCL/eccp109.ini
に落ちている。
附属ドキュメントだったかweb pageのどっかだったかに一番重い処理はmulmod_p109
関数だと書いてあった。
で、その関数の実装も色々準備してあってdefaultでは
eccp109-132-2/asm/x86_att/msi/mulmod_p109.1.S
が選択される。
で、どのコードが良いかどうかは
make x86ltime
とするとeccp109-ltimeというベンチマークプログラムを作ってくれるのでそれを実行すると分かる。
実行してまず適当な識別子を入力すると数分かけて結果を作る。
結果は標準エラー出力だけじゃなくてtiming.outにも同じ内容を残してくれる。
(追記かと思ったら上書きだった)
で、見つかったBest functionをMakefileのX86_ATT_DEFAULT_MSI
マクロの適切なものに置き換えmakeしなおす。
eccp109-ltimeを実行した結果をまとめる。
- Athlon 1.0GHz, FreeBSD 4.5-RELEASE-p19
-
1444 *(1/128) seconds using mulmod_p109_1
- Pentium 4 2.2GHz (Northwood), Linux 2.4.18-5bigmem
-
1828 *(1/100) seconds using mulmod_p109_1
- Pentium III 800MHz, FreeBSD 4.5-RELEASE
-
2352 *(1/128) seconds using mulmod_p109_1
- Pentium 4 2.0GHz (Willamette), FreeBSD 4.6.1-RELEASE-p10
-
2544 *(1/128) seconds using mulmod_p109_k6_0
- Pentium 4 2.0GHz (Willamette), FreeBSD 4.5-RELEASE
-
2548 *(1/128) seconds using mulmod_p109_k6_0
- Pentium 4 2.0GHz (Northwood), Linux 2.4.18-3
-
2012 *(1/100) seconds using mulmod_p109_1
- Pentium III 700MHz (Coppermine), FreeBSD 4.7-RC
-
2715 *(1/128) seconds using mulmod_p109_1
- Celeron 450MHz, FreeBSD 4.6-STABLE
-
4174 *(1/128) seconds using mulmod_p109_1
- Pentium II 400MHz, FreeBSD 4.5-RELEASE-p20, 4.6.2-RELEASE
-
4722 *(1/128) seconds using mulmod_p109_k6_0
- Celeron 366MHz, FreeBSD 4.2-RELEASE
-
5122 *(1/128) seconds using mulmod_p109_k6_0
- K6-2 300MHz, FreeBSD 4.6.2-RELEASE-p2
-
8906 *(1/128) seconds using mulmod_p109_k6_1
LinuxとFreeBSDでclock()の返し値の単位が違って分かり難いぞ。
コードを作り変えても速いかどうかどう調べるのか、distinguished pointsの生成速度を見ても結構バラツキあるし、一つ生成するにもそこそこ時間がかかるしでメンドイなぁと思っていたんだけど、よく見ると「-v」optionでベンチマーク的情報を出してくれるんですね。
ということで、「-v」オプションの結果を並べてみます。
最初の10出力のうちの最速値を採用しています。
- Athlon 1.0GHz, FreeBSD 4.5-RELEASE-p19
-
625230 iterations per second
- Pentium 4 2.2GHz (Northwood), Linux 2.4.18-5bigmem
-
400000 iterations per second
- Pentium III 800MHz, FreeBSD 4.5-RELEASE
-
381023 iterations per second
- Pentium 4 2.0GHz (Willamette), FreeBSD 4.6.1-RELEASE-p10 with mulmod_p109_k6_0
-
364088 iterations per second
- Pentium 4 2.0GHz (Northwood), Linux 2.4.18-3
-
355555 iterations per second
- Pentium 4 2.0GHz (Willamette), FreeBSD 4.5-RELEASE with mulmod_p109_k6_0
-
355555 iterations per second
- Pentium III 700MHz (Coppermine), FreeBSD 4.7-RC
-
327680 iterations per second
- Celeron 450MHz, FreeBSD 4.6-STABLE
-
204800 iterations per second
- Pentium II 400MHz, FreeBSD 4.6.2-RELEASE with mulmod_p109_k6_0
-
185528 iterations per second
- Pentium II 400MHz, FreeBSD 4.5-RELEASE-p20 with mulmod_p109_k6_0
-
182044 iterations per second
- Celeron 366MHz, FreeBSD 4.2-RELEASE with mulmod_p109_k6_0
-
164202 iterations per second
- K6-2 300MHz, FreeBSD 4.6.2-RELEASE-p2 with mulmod_p109_k6_1
-
103696 iterations per second
- HyperSPARC 125MHz, SunOS 4.1.4
-
24303 iterations per second
- SuperSPARC+ 60MHz, SunOS 4.1.4
-
18852 iterations per second
- SuperSPARC 40MHz, SunOS 4.1.3_U1
-
13301 iterations per second
いまさらSunOS4を使う人っていないような気がしますけどFreeBSDの場合と同様にソースコード(eccp109-132-2.tar.gz)を取ってきて
make spCL
で出来ます。
但し改行コードはCR+LF→LFの変換が必要かも。
あと、細かい修正もそれなりにいるので、ほとんどが改行コードの違いなんですが、patch(gz圧縮ですがbrowserとかが勝手に解凍するかも)を作ったのでおいておきます。
MS-Windowsな人達ももちろん(とかくのは好きじゃないけど)参加できる。
Software頁にあるeccp109-132-1g.exeを拾ってきて実行すれば自動的にinstallerが動いて万事うまくいく(XP SP1で確認)。
FreeBSDの場合と同様に、インストール中にHandle, Email address, Unique Real Nameというのを聞いてくるのでいれる。
インストールが終ったらECCp-109を起動するだけだ。
インストールすると勝手にスタートアップfolderにも入れちゃうので、起動忘れがない。
onlineじゃない人は時々「Send results」ボタンを押そう。
onlineの人は「Permanent internet connection」にチェックを入れておけば時々勝手にデータを送っているようだ。
「Hide」ボタンを押すと隅に隠れるのでこれもよいかも。
それなりにclientを入れれば自動的に動くのですが、今までdistributed.netのRC5-64 challengeに参加していたことから、どうも機能が劣っている部分は気になっちゃいます。
集計頁について
- 6時間毎の集計というのは、distributed.netが1日毎の集計だったので、優れているのだけど、今までの履歴が見えないのが悲しい。
- 個人の結果を探索する方法が、全員の頁を開けてテキスト検索をかけることになるんだけどMB単位のファイルになるので、ちょっとなぁな感じ。
少なくともdialupな人には無理があるぞ。
ばりばり頑張ってtop100に入れってか!? :-)
前後の順位変動をあんまり気にしないんだったら、どっかのチームに入るとか一人だけのチームを作るとかすれば、チームの合計数は今のところ大したことないので、自分の結果を見るだけだったら何とかなるけど。
「あんまり」と書いたのは単に順位が上がったか下がったかだけは色で分かるようになっている。
clientプログラムについて
- -quietとかして、自動的にbackgroundにまわってくれるのが無いようだ。
- nice +20も自主的にしないと悲しいことに。
- 環境毎のコードがついているんだけど、compileするときに、決めなければならず自動判定とか出来ないのがちょっとメンドイ。
ただ、dnetcと違って、コードが公開されているので自分で作り込めばいいといえばそうなんだけど。
気が向いたらそのうち要望(or/and patch)でも出してみよう。
日本語ホーム頁に戻る
最終更新日: 2002年(平成14年)10月24日
作成日: 2002年(平成14年)10月6日