スタックサイズを1GBに増大させた

スタックサイズを1GBに増大させた.通常は1MBくらいで走っているので,千倍に拡張したことになる.巨大数を扱う処理を再帰実行しているので,スタックが巨大化するのも避けられない.再帰の深さに関わるのは木の高さだが,画面上でInt16より大きい数字は入力できないようにした.最大でも32767までだ.従って,このプログラムで生成できる最大のコラッツ正則木は枝数32767x樹高32767ということになる.この設定で動作するかどうか確認しておこう.⇒走っていることは走っているが,ノード1個を処理するのに32767の枝を派生しなくてはならないので,有効ノード数1の状態でMax numberの書き換えを反復する状態がひたすら続いている.

時間も,1ノードを処理しないと更新しないため,経過時間ゼロ秒の状態が続いている.小さいサンプルなら余分な処理が入ってもそれほど負荷にはならないし,巨大サンプルの場合はどっちみち時間が掛かるのだから,時間ロスにはなるが経過時間が見えるようにした方がよいのではないか?⇒EXEを作って走らせてみた.開発環境よりはずっと高速で見ていても心地よい.Max tree heightは0のままだが,これが1に変わるのにどのくらいの時間が必要か?それが分かれば,その値を32767倍すれば最初の葉に到達するまでのおよその時間を見積もることができる.そこまで計算できればあとはほとんど所要メモリは一定だから「時間さえ掛ければ計算終了可能」と言える.

最初の1ノードの計算の中ですでに相当大きな数が生成されているはずだが,いまのところはMax Numberは途切れなく更新されているので,桁数が32767を超えるほどの巨大数は出現していない模様だ.(Max node countはすでにその範囲をはるかに超えているので空欄になっている)10進桁数で32767超と言えば超巨大数というしかないが,その数をテキストとして保持するだけでも32Kくらいのメモリを要する.(BigIntegerは数それ自体をバイト列として保持している)

14分を経過したが,まだ最初の1ノードの処理が終わっていない.1ノード処理するのに1時間掛かるのではないか?そんなことになったら,最初に木の底に着くまでに途方もない時間が掛かることになり,すべてを計算するのには一生掛かるなんてことにも成りかねない…まぁ,一週間程度で終わるのなら仕掛けておいて放置ということも考えられるが…現在,テント村ではユーザに「検証テスト」への参加を呼びかけているが,むしろ,この正則コラッツ木生成の方をやってもらった方がよいかもしれない.正則コラッツ木も部分木を出力できるようになっているから,作業の分担は可能だ.

Root numberは巨大数を受け付けるようになっていただろうか?※ DegreeやTree heightはInt16の範囲でよいとしても,ノード番号に巨大数が入力できることは必須だ.⇒問題なさそうだ.と言っても表示できる数の範囲を超えた場合にどうなるのかは分からない…⇒1時間14分が経過してMax tree heightは1に変化している.Valid node count=2は2番目のノードの処理に入っていることを示している.正確な時間は分からないが,およそ1時間あれば1点を処理することはできそうだ.それにしても,木を垂直に登って(表示では下って)葉に達するまでには少なくとも32767時間=1365日=3.7年も掛かってしまう.それから,この巨大木のすべてのノードを訪問するころには,すでにこの地球は存在していないかもしれない…いやはや…

※昨日のログに出てくる5303桁の巨大数を入力してみた.問題なく走っている.D=3,H=7という設定で382個のノードの出力を34秒で完了した.ダンプ領域を隠蔽すれば3行で完了する.ただし,5303という桁数は,テキスト入力ボックスでレンジ外となるInt16の最大値から見るとほんの端切れだ.32767桁なんて数字は見たくもない…

現行ではA面画面下半分の隣接リストはノードを1個出力するまでは更新されない.しかし,これではテスト中のサンプルのように1ノード出力するだけで1時間も掛かるようなサンプルでは画面がまったく変わらないことになってしまう.これは分岐枝リストを生成する段階で出力すべきではないだろうか?⇒対処した.

32767×32767の最大コラッツ正則木を開始して5時間45分,Max tree heightは5, Valid node countは7になっている.つまり,現在7個目のノードを処理しているところだ.平均してノード1個につき,1時間以内で終わっていることは確かだろう.3の倍数ノードが1個出現しているのに,Void node countが空欄になっているのはなぜだろう?ノード1個のサブツリーだけでレンジオーバーになってしまったのだろうか?有効ノード数9個目で5時間54分.これを360分で8個と見れば平均1個45分くらいになる.順調に走っているが,ここで一旦打ち切っておこう.

ノード1個分の処理の中でスクロールするようになったが,こんどは少し重過ぎ感が出てきた.一時的に止めることもできるようにしておこう.多分,スピードはかなり違うはずだ.⇒止めるのではなく,枠全体を隠すようにした.これで倍速くらいにはなったが,目覚ましく速いというほどでもない.もっと高速化するには書き込み自体を止めなくてはダメだろう.⇒対処した.これなら更新されているのはMax numberだけになるのでかなり速くなる.D=3, H=12で17倍速くなった.

リリース版 V1.05 を起こしたが,まだアップロードしていない.この版はマニュアルと同時公開することにしたい.動作確認もまだ十分ではないが,マニュアルを書きながらチェックすることもできるだろう.予備機と開発機にはそれぞれ受け持ち範囲を分け合って検証テストを仕掛けた.開発機の方が速いので2^26とし,予備機は2^24で走らせている.同時くらいに終わってくれるとうれしいのだが…さて,これでようやくマニュアルの編集に戻れる.画面が少しだけ変わったので,画像を差し替えるところから始めなくてはならない.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA