[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]
[OSASK 1097] countup1.
こんばんは、川合です。
今日、8月中にベータリリースしたアーカイブファイルを数えてみま
した。20を優に超えていました。これは、ベータテストする側にすれば
悪夢のような数です。
そこで、2つの方針を決めました。・・・といってもペースダウンす
るつもりはありません。
1.お忙しいテスターの方には、アプリケーションのテストは後回しに
していただく。つまり、アプリケーションが次々と発表されても、面
白そうでなければ、無視してかまいません。OSASKの一般公開候補バ
ージョンが出たら、それを好きな方法で試してみてください。いろん
な操作をしてみてもいいですし、ご自分でプログラムを書いてみて挙
動を確かめていただいてもいいです。適当に1、2個のアプリケーシ
ョンをダウンロードして動かしてみるだけでもいいです。
2.一日に複数のアーカイブをアップロードするときは、まとめて報告
する。・・・これは、OSASK-MLがむやみに増えるのを防ぐためです。
基本的に、分野が大きく異ならない限り、1つのメールにまとめてご
連絡いたします。
---
さて、本日ベータリリースしたのは、
・cntupc1
・countup1
・countup2
の3つです。最初のcntupc1は昨日アップロードしたものにバグがあっ
たので修正しました。実行速度は変わっていません。次のcountup1は、
ASKA版です。アーカイブはソース込みなのでASKA版の方が大きくなって
いますが実行ファイルはASKA版の方がもちろん小さいです。最後のcoun
tup2は、countup1の実行結果を観察しているうちに作りたくなったので
作っただけです。画面更新間隔が1秒もある、あまり役に立たないバー
ジョンです。
なお、いくつかのファイルは本日午前中にもアップロードしていまし
たがそれはバグいりバージョンです。午後にダウンロードしたものは大
丈夫ですが、それ以前に見つけてダウンロードした方はご注意ください
。
---
おそらく、どんなマシンで実行してもcntupc1とcountup1を比べれば
、countup1の方が速い値が出るでしょう。その差が、レジスタをコント
ロールできない高級言語と、コントロールできる低級言語の差です。AS
KAでも、レジスタを使わずに普通の変数(メモリ)を使ってループを回
せば、cntupc1と同じような値になります。
そして、cntupc1がcountup1よりも先にリリースできたことが、低級
言語の使いにくさを反映しています。できることなら、どちらも使える
プログラマーになってください。どちらか一方しかできないのはもった
いないことです。
うちで測定した値や、教えていただいた測定結果を以下に挙げます。
cntupc1 countup1
i486SX/25MHz 3797〜 3800kc/s(6) 5830〜 5833kc/s(4)
Cyrix6x86/150MHz 74300〜 74310kc/s(2) 99250〜 99270kc/s(1.5)
K6/300MHz 148990〜149030kc/s(2) 298390〜298440kc/s(1)
Celeron/466MHz 77370〜 77380kc/s(6) 233000弱(推定) (2)
(以下は考察)
上記の括弧内の数値は、実測値から計算した1ループにかかるクロッ
ク数。countup1のループはOTASK/ATのtimerと同じループなので、括弧
内の値もCPU因子に一致している。
(注)timerのCPU因子については、下記のページを参照のこと。
http://www.imasy.org/~kawai/otask/cpu_fct.html
たとえば、i486SX/25MHzのcountup1の結果をみると、理論値よりもか
なり小さいことがわかる。
理論値:25000000 / 4 = 6250000 (6250kc/s)
差 :6250 - 5832 = 418 [kc/s]
損失率:418 / 6250 = 6.69%
つまり1秒当たり、約251万クロックが失われていることを意味する。
この値の大半は、1秒間に100回ある数字表示によるものであると思わ
れる。
この差と損失率は機種によってさまざまである。たとえばK6/300MHz
の場合は、差が1585kclock/sにもなる。しかし損失率は0.528%程度であ
る。
このデーターだけでは、損失率のどのくらいが表示のせいで、どのく
らいがタイマー制御などに使われているのかが分からない。これを調べ
るために、countup1の書き換え間隔を1秒にしたバージョンを用意した
(countup2)。
countupc2
i486SX/25MHz 6176kc/s(4)
Cyrix6x86/150MHz 99988kc/s(1.5)
K6/300MHz 299975kc/s(1)
i486SX/25MHzの場合、countupc2での差は74kc/sである。これにより
以下の方程式を立てる。
1回の表示に必要な処理による損失をa、表示に無関係なOSのバック
グラウンド処理による1秒当たりの損失(timer type-Bの最低負荷)を
bとおけば、
100a + b = 418 [kc/s]
a + b = 74 [kc/s]
これを解いて、a = 3.47kc = 13.9kclock
b = 70.5kc/s = 282kclock/s (最低負荷率:1.13%)
同様のことを他のCPUでも計算してみた。
Cyrix6x86/150MHz a = 11.0kclock, b = 7.0kclock/s (0.005%)
K6/300MHz a = 15.8kclock, b = 9.2kclock/s (0.003%)
正直なところ、この負荷の値は少しおかしい気がする。i486SXの負荷
が思ったよりも高い。大きくても0.5%くらいで収まると予想していた。
一方、6x86やK6の結果は良すぎる。きっとこの値は正確ではない。もは
や正確なクロックの測定から始めないと正確な値は求められないだろう
。それでも、0.01%よりも大きくなることはないだろう。
この最低負荷の測定で、[OSASK 569]で述べた予想がだいたい合って
いることが確認できた。
それでは。
--
川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.or.jp
Homepage http://www.imasy.or.jp/~kawai/