トップ 最新 追記

Orz日記 by Akio Morita

ToDo:

  • 15 SAD Fit[]回りの障害事例の解析
  • 10 smart pointer版PEGクラスの再実装(Left Recursionまわり)
2006|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|06|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|07|08|09|10|11|12|
2013|01|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|06|07|08|10|12|
2016|01|02|03|05|06|08|10|11|
2017|01|02|03|04|05|06|07|09|10|11|12|
2018|01|02|03|04|06|07|08|09|10|11|12|
2019|01|03|04|05|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|

2007-11-01 [長年日記]

_ [SAD]Random Plugin Framework

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本体にインライン展開されてる線形合同法ルーチンの分離と 置換作業かな?


2007-11-03 [長年日記]

_ [SAD]SFMT plugin最適化

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

2007-11-04 [長年日記]

_ [SAD]CVS HEADへのバックポート

最近の DynamicLink[]関連の改良や、各種 bug fixをごそごそとバックポート


2007-11-05 [長年日記]

_ [Admin]鯖リブート

sshの loginに失敗する。ssh host commandは動くので、鯖側のログを 覗いてみると、login shellがsignal 11で core dumpped Orz

なんか、library/command共に入れ換えてないので kernel周りの不具合ですかね?

この前のフリーズ現象の前兆かも知れないので急遽リブートを実施


2007-11-09 [長年日記]

_ [SAD]マニュアル書き書き

amorita branch由来の機能拡張関連のマニュアルを書き始める。

特に、3rd partyの機能拡張を取り込むための DynamicLink 周りは、文書化しておかないと存在意義が失われてしまう。 最も、内容的には Changesに書いてあるのをまとめただけなので 注意深く変更履歴を読んでる人には関係無いが、SAD使いに そんな奇特な人間が居るとは思えない Orz


2007-11-12 [長年日記]

_ [お仕事]β測定

Rogelioが、CODベースのβ測定を SPSの来年のマシンタイムに テストしたいと云っていたが、どうやら本気のようである。

第一段階として、Glennの GUIに組み込むための打ち合わせ。


2007-11-14 [長年日記]

_ [SAD]SAD拡張機能のマニュアル作り

amorita branch由来の 拡張機能に 関するマニュアル作りだが、一般ユーザーが使う部分に関して 残っているのは、Packages/Library.nとFFS\$InterruptMask変数、 実装中の新しい疑似乱数発生器関連ぐらいかな?

KBFrame関連の拡張は、SAD付属のマニュアルに最低限の改定を加えてるのでパス。

SAD/Tkinterとか CanvasDrawer周りは、実際に機能を使うのは開発者なので、 変更履歴とソースを読めって方向で...


2007-11-15 [長年日記]

_ [雑記]米Sunと米Dellが提携、SolarisをOEMで提供へ

Dellの鯖に Solarisがプレインストールされて出荷される日も近いらしぃ

_ [FreeBSD]7.0-BETA2 Kernel

年末リリース予定の 7.0では、Intel(R) PRO/Wireless 3945ABGドライバが 動くので、ぼちぼちテストを始めた(8-CURRENTには導入済み)

なんか、本体に付いてる無線LANのスイッチをOFF/ONしないと ifconfig upしても無線機能がONにならないとか、 ifconfig scanしてると NMI割り込みが入って kernel panicとか 安定動作と言うにはまだまだ問題が有るようです Orz

_ [SAD]Packages/Library.nのマニュアル

とりあえず、開発中の項目を除いて一般ユーザーが使う部分は大体そろったかな?


2007-11-20 [長年日記]

_ [SAD]Date extension module

SAD組み込みの Date関数ファミリーでの Local Timeは日本標準時固定かつ 閏秒が入っていないという実装なので、日本国外や閏秒対応のシステム上での 運用時に混乱のもとになっています。 (中国から、時間が1時間ずれているという苦情があったとか)

で、閏秒とUTC offsetをまともに扱える Date関数の置き換えモジュールを製作

製作と言っても、日付や閏秒の扱いは djbの書いた libtaiに任せて SADとのインターフェースだけの実装ですが...


2007-11-22 [長年日記]

_ [KEKB]色が変わっている

1-Dayの画面の色が変わっている...黄比、青比の次は緑比ですか


2007-11-25 [長年日記]

_ [SAD]シグナルハンドラ

SADのシグナルハンドリングをごそごそ掃除中

  • SAD標準のシグナルハンドラsrc/titrpt.fを POSIXな signal interfaceで書き直し
  • SigPending[], SigSuspend[], SigProcMask[]を実装

勘のいい人なら名前で分かると思いますが、 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保護はどんな実装にしろ必要ですが....


2007-11-27 [長年日記]

_ [雑記]検札との遭遇

本日、TPGのバスで始めて検札に遭遇!

乗客の反応を見ると、年間パスを持ってる人が多いみたいだった

_ [SAD]SigAction

とりあえず、動くもの完成

使いかたは、SIGINTを捕まえるだけならこんな感じ

SigAction[SIGINT, Action:>Print["Receive SIGINT"], Flag->{SA$RESTART}];

コンソールでCtrl-CしてもReceive SIGINTと表示するだけで、 終了しなくなります

SAD標準の割り込みハンドラのうち、SIGFPEは Alphaで浮動小数点例外を トラップしている実例が有るわけですが、SIGHUPSIGABRTを トラップしているのは何故でしょう? 昔のコードの残骸をみると、SIGINTをトラップしていた時期もあった ようですが...

個人的には、SIGHUPSIGABRTはトラップすべきではないと思う


2007-11-28 [長年日記]

_ [SAD]割り込みスタック再考

現在の SigAction実装では、割り込み時に SADのスタック構造体 tfstk_ common blockを入れ換えているが、 良く考えればスタックポインタ ispが正しく運用されていれば スタックそのものを入れ換える必要はないはずで...

ただ、tfstk_ common block自体がインタープリタ内で グローバル変数の一部として使われているので切替える実装をしたのですが、 それ自体をスタックに積み込めば良いことに今ごろになって気が付く罠 Orz


2007-11-29 [長年日記]

_ [FreeBSD]CVSup

cvsup10.freebsd.orgから差分が落ちて来ない... Orz

接続はしてるようなので、上流からのフィードが止まってるっぽい

cvsup2.jp.freebsd.orgへ切替え

_ [SAD]Tkinter改良

Tkinter.n内部には、X11で使用するフォントをXLFDな名前空間から 探すときに一部のフォントに付いては代替フォントを探すために いろいろなヒント情報がハードコードされています。

で、これは余り嬉しくないので PkgConfig APIで外に押し出しました。

まず、特定のFont Familyで優先する Font Foundryや Registryを設定する変数

XLFD:Foundry:(family)
XLFD:Registry:(family)

設定するべき値は、Foundryや Registry文字列のリストです

例えば、X.Orgで標準的に用意されている symbol fontして Registry-Encodingadobe-fontspecificが有りますが、 MathML環境のために symbol fontを追加している場合、 Registry-Encodingadobe-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 | お仕事 | イベント | 出張 | 宴会 | 数学 | 艦これ | 買いもの | 追記 | 雑記