ToDo:
ToDoにも書いてある 疑似乱数発生器の再実装に向けた作業が少し進捗。
DynamicLinkで読み込んだオブジェクト内のシンボルを外部公開 (Framework libraryを動的に読み込む際に必要)するために dlopen()に渡すモードを制御するオプションを追加
使用例は、こんな感じ
id = DynamicLink["foo.so", DYNL$LAZY, DYNL$GLOBAL];
SAD側の拡張モジュールコンパイル用のフレームワークをごそごそ改良
これらを使って、RandomMTモジュールの中身を SADScript側への 関数API提供するプラグイン管理フレームワーク(Random/Framework.so)と、 疑似乱数発生器本体を管理するプラグイン本体(Random/MT19937.so)に分割
プラグインが一つでは寂しいので、 SFMT プラグインを実装。(たしかに SSE2使用してコンパイルすると MT19937より速い)
残る作業は、旧来の組み込み疑似乱数発生器(線形合同法)互換プラグインの 実装と、SAD本体にインライン展開されてる線形合同法ルーチンの分離と 置換作業かな?
SSE2を有効にして ICC 8.1のループ展開やらベクトル化を投入、 さらに32bitの疑似乱数取り出し関数をマクロ化してインライン展開する。
結果、SFMT pluginは爆速です
ベンチマーク結果の SAD Coreは SAD標準の Random[]関数、SADは Random[]関数のプラグイン版(ICCの最適化バージョン)です。
Random[]関数と同じ32bit精度(Random[]関数は実質 31bit精度ですが)なら 周期長 2^19937-1にもかかわらず 166%の実行時間ですんでいます
# Revision: 850 # Compiler: ICC 8.1 # CPU: CoreDuo L3200 # OS: FreeBSD 6.3-PRERELEASE Speed Test of Randum Number Generator Plugins... Batch Size: 1048576 Number of Statistics: 200 Plugin Name SAD Core min= 14.304 typ= 15.517 max= 39.138 sigma= 3.152 nsec/rand SAD min= 6.778 typ= 6.949 max= 7.023 sigma= 0.035 nsec/rand MT19937/53bit min= 59.225 typ= 61.343 max= 65.398 sigma= 2.064 nsec/rand MT19937/32bit min= 32.089 typ= 33.377 max= 34.890 sigma= 0.598 nsec/rand SFMT19937/53bit min= 17.653 typ= 18.737 max= 19.561 sigma= 0.360 nsec/rand SFMT19937/32bit min= 10.235 typ= 10.881 max= 11.560 sigma= 0.259 nsec/rand
amorita branch由来の機能拡張関連のマニュアルを書き始める。
特に、3rd partyの機能拡張を取り込むための DynamicLink 周りは、文書化しておかないと存在意義が失われてしまう。 最も、内容的には Changesに書いてあるのをまとめただけなので 注意深く変更履歴を読んでる人には関係無いが、SAD使いに そんな奇特な人間が居るとは思えない Orz
Dellの鯖に Solarisがプレインストールされて出荷される日も近いらしぃ
年末リリース予定の 7.0では、Intel(R) PRO/Wireless 3945ABGドライバが 動くので、ぼちぼちテストを始めた(8-CURRENTには導入済み)
なんか、本体に付いてる無線LANのスイッチをOFF/ONしないと ifconfig upしても無線機能がONにならないとか、 ifconfig scanしてると NMI割り込みが入って kernel panicとか 安定動作と言うにはまだまだ問題が有るようです Orz
とりあえず、開発中の項目を除いて一般ユーザーが使う部分は大体そろったかな?
SADのシグナルハンドリングをごそごそ掃除中
勘のいい人なら名前で分かると思いますが、 sigpending(2), sigsusped(2), sigprocmask(2)システムコールへの インターフェース関数を実装したので、SADScript側から シグナルマスクの制御が可能に成りました。 最終目標は、SigAction[](sigaction(2))を実装して SADScript関数をシグナルへのコールバックとして 呼び出せるようにすること!
そのためには、シグナルで割り込まれた時に SADインタープリタの コンテキストを切替える必要が有り、少なくともtfstk_ common blockを 入れ換える必要が有ります。
ここで使うSADインタープリタのコンテキスト切替えを拡張すると 似非マルチスレッドが実装出来る予感。 最近の環境では、CPUコンテキストの切替えに 旧来のsetjmp/longjmpではなく、ucontext APIが使えるので 少し楽が出来そうです。 ただ、所詮は似非マルチスレッドなので最近のマルチコア環境の活用に 成らない罠 Orz
まともな POSIXスレッドとかを活用するには、Fortran側の 各種 common blockを Thread Local Storageに放り込むか、 直接アクセスせずにすべてアクセス関数でラップして スレッド毎の構造体に埋め込むとかが必要かな?
もちろん、内部ルーチンの Thread Safe化とかオブジェクト・ヒープ操作の Critical Section保護はどんな実装にしろ必要ですが....
とりあえず、動くもの完成
使いかたは、SIGINTを捕まえるだけならこんな感じ
SigAction[SIGINT, Action:>Print["Receive SIGINT"], Flag->{SA$RESTART}];
コンソールでCtrl-CしてもReceive SIGINTと表示するだけで、 終了しなくなります
SAD標準の割り込みハンドラのうち、SIGFPEは Alphaで浮動小数点例外を トラップしている実例が有るわけですが、SIGHUPとSIGABRTを トラップしているのは何故でしょう? 昔のコードの残骸をみると、SIGINTをトラップしていた時期もあった ようですが...
個人的には、SIGHUPとSIGABRTはトラップすべきではないと思う
cvsup10.freebsd.orgから差分が落ちて来ない... Orz
接続はしてるようなので、上流からのフィードが止まってるっぽい
cvsup2.jp.freebsd.orgへ切替え
Tkinter.n内部には、X11で使用するフォントをXLFDな名前空間から 探すときに一部のフォントに付いては代替フォントを探すために いろいろなヒント情報がハードコードされています。
で、これは余り嬉しくないので PkgConfig APIで外に押し出しました。
まず、特定のFont Familyで優先する Font Foundryや Registryを設定する変数
XLFD:Foundry:(family) XLFD:Registry:(family)
設定するべき値は、Foundryや Registry文字列のリストです
例えば、X.Orgで標準的に用意されている symbol fontして Registry-Encodingがadobe-fontspecificが有りますが、 MathML環境のために symbol fontを追加している場合、 Registry-Encodingがadobe-symbolな symbol fontが有ります。 (Mozilla推奨の MathML関連 fontを導入した場合)
両者が共存しているとき、Tkinter.nのデフォルト動作では *-*でマッチングするので前者のadobe-fontspecificを 選びますが、これは bitmap fontなので実は Type1 fontな後者を選んで 欲しかったりします。 この場合、XLFD:Registry:symbol変数に優先する Registryとして adobe-symbolを登録しておくと幸せになれます。
また、指定したFont Familyがない場合に代替Font Familyを検索する際の データベースとして変数
XLFD:Family:(family)
が参照されます。ここで、変数名に含まれるfamily部分には、 最も優先度の低い代替family名を入れて下さい。
たとえば、Tkinter.nの標準に組み込まれている例では、 timesに代替される系列として、 XLFD:Family:timesに{"utopia", "times"}が設定されています
カテゴリー: Admin | Emacs | EPICS | Fortran | FreeBSD | GCC | hgsubversion | IPv6 | KEKB | LHC | Lisp | LLVM | MADX | Ryzen | SAD | samba | tDiary | unix | WWW | YaSAI | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記