RPM(逆ポーランド法) シンドロームはリアルタイム可能

2017.12.03雑談(since2017.1.8)
サイトマップ トップ << 電よも < <  ecc2問題点 <

HP社の逆ポーランド法の電卓使ったことある人いますか? 後置記法というのかな?スタックの使い方が特徴です。


 私個人が逆ポーランド法に最初に触れたのは、雑誌I(アスキー誌?IO誌?)に掲載された整数型Tiny Forth?(webであさって、それらしいのは、連載Forth/Σ , ASCII, 1982かも)です。後述の”日本語と相性が....”は、その記事からの受け売りだったりします。雑誌記事掲載のリストからPCへのの入力ミスが残ってるのか、使い方よくわからないまま、忘却の彼方へ流れました。 ただ言語(インタプリタ、コンパイラ)といえばASCII社が多いんだが、これだけ、いつもと違った印象があって、案外IO誌だったりしたかも。

2番目に触れたのは、PDAとして重宝したのですが、HP-200LXという、HP社のIBM-PC互換のDOSベース電池駆動携帯型小型パソコンです。 当時、国産PC98シリーズに対抗して、IBM互換機ハードに、日本語MSDOS(個人的に日本語PC-DOSを選択)をいれたDOS/Vが幅聞かせていたころ、CGA画面なので、DOS/Cと呼んでたものです。CGAではさすがに汎用日本語MS-DOS対応できず専用日本語化キットをつかって、日本語するのですが、内蔵水晶クロックを高速のものに差し替え作業(要:精密はんだづけ技術)も必要で、会社の同僚と、自宅で工作した思い出もあったりします。
これには、DOSアプリの、VZエディタや、ATOKを入れて活用しましたが、それ以外に、もともと関数電卓アプリがROM内蔵で入っていてRPN電卓として(もちろん標準的なモードもある)利用できるのですが、このRPNモードに、はまってしまいました(珍しいものを使いこなしているという征服感か?)。PCのデスクトップにも、win標準ではなく、PRNの対応フリーソフトを長らく使っていました。 

次の出会いは、学生時代から使ってたカシオFX-502Pという関数プログラム電卓が不調で、まよわずRPN電卓HP32SⅡ購入しました。先輩諸氏のHP-15C(12C?)と比べると、胸ポケットに、ちと大きくがっかり。 出張先で、グラフ電卓というもの見せてもらい、方程式解く機能等にカルチャーショック。衝動買いしたのがHP-48GXです。 ただ、特殊機能日常業務で不要だし、PCで適当なツールが業務上つかえるし、ちと動作が重い(遅い)上に、サイズ大きく重いので(ポケットには入らない)、電池も抜いて15年以上冬眠中。実働時間すごく短かった。.

 HP商品は新宿紀ノ国屋アドホック店にて購入しましたが、今検索すると店舗が見当たらない。どこかに統廃合されたんかな? 関東圏に十数年住んでましたが新宿は、この店に行った以外は、会社同僚と新宿都庁を見に行ったのだけ。人込み怖い。(2017.12.03)本屋さんで雑談していると、大手本屋の本社ビル人手に渡ったという噂を聞く。まさかと思うけどその影響で店舗無くなった?

グラフ電卓といえば、下記の書籍購入。 マニュアル読んんでわかるんだけど、さて何に使おうか?というとピンとこない。書店でグラフ電卓という名前が偶然目についたのでちょっと期待して購入。ただ業務に使えるか?というすぐ却下しましたが、中高校生ならスマホで遊ばせるより、グラフ電卓で遊ぶことを勧めるほうがいいのでは? 理数科嫌いを救済するとか(そもそも最初に興味を持てば嫌いにならない)、理数科の理解度アップ・効率的にいろいろチャレンジできる等役立つ気がします。聞いたことないけど当時文部省が噛んでいたような記述だったので、その世代学生だった人は案外しっているのかな?

共立出版 グラフ電卓で科学する 寺田文行他 1995/12/25   (RPNには無関係です)


さて本題

エラー訂正の関連で、パリティ(シンドローム)演算の式を示しました。データd[n]系列に対して、

Σα^n*d[n] = =((((....(.(d[n]*α +d[n-1])*α +d[n-2])*α +d[n-3])*α+.......)*α +d[1])*α +d[0]

この計算をRPN電卓で行う場合のキー操作は

d[n], →,α , *, d[n-1], +, α, *, d[n-2], +, α, *, d[n-3], +,........+

"→"は、dnとαというそれぞれ複数桁の数値キーで入力する場合のd[n]と、αの区切りを示す[エンターキ]を示す。
後は、数字データと、演算(*,+の)キーを順に入力するだけで、操作が素直な方法です。

(毎回同じαという数値を押さず、最初の入力後メモリーに格納し、以降数値αの代わりにメモリー読み出しキーを押すというのが、合理的安全な操作ですが、.本題ではありません)。

実は、このRPN法の記述は、日本語(語順?)と相性がよくて、上記を普通に読めば、

  d[n]にαを掛けて、d[n-1]を加えて、αをかけて、d[n-2]を加えて........d[0]を加えて終わり。

演算の方法の日本語表現と、キー操作が同じでしょ?

普通の電卓の操作だと、本来は()を使うんでしょうが、何重カッコになるのか、電卓にそれだけスタックできるか等、面倒なので、単純に下記操作でしょうね、

   d[n], *,α,+, d[n-1], =, *, α, +, d[n-2],=, *, α, +, d[n-3],=, +,........+

RPNと比べて(最初の→分だけ少ないけど)、"="キーを毎項ごとに、多く押さなくてはいけません(RPN入力高効率説)。
=キーを押さないと四則演算順位判定が邪魔して、 

  d[n]*α + d[n-1]*α + d[n-2]*α+ ..

と、意味が変わってしまします。まったく余談ですがちなみに、RPNで上記演算を行うときは、

  d[n],→,α,*,d[n-1],→,α,*,+,d[n-2],→,α,*,+,....

高効率とかうそやん、という話もあるが、いやいや、単純に考えれば

  d[n], →, d[n-1], +, d[n-2], +, d[n-3], +,........+, d[0}, +, α, *

このようにα^nを使わないで最初の解法のnを掛ける場合は、
  d[n]をn倍して、メモリに一時保管して、次のd[n-1]と(n-1)を入力・乗算し、先ほど保存したメモリの内容と加算する
というのを繰り返すのが、普通の演算になると思います(余計に一次記憶スタックが1段必要)。

何の話をしているんだとお思いでしょうね? ここまでたどり着かず、読み飛ばしてしまった人、残念でしたね。
実は、結構重要な話をしています。では本題にはいります。

通信系で、データが流れている場合、外部メモリへ全体退避し、演算のために読み出すのではなく、データ転送時横流ししたデータを、比較的単純な回路で、積和の演算してリアルタイムに、パリティ・シンドローム演算(全データそろった時点でエラー有無の検出)できてしまうわけです。この計算において、それぞれレジスタが1つあれば、何個目のデータという意識しないで、単純に毎回αをかける、次のデータを加えるという単純作業だけで話がすみます。 そして、終わった時、計算結果を読み出して、期待値と比較すれば、合否判定は即座に可能になります。遡らないでリアルタイムの処理で計算が継続できる点が素晴らしい点です。
無判断といえば、本来は、有効桁数の許す限り永遠にリアルタイム演算続けることが可能です。有効桁数の話も、剰余系という演算体系で、実用範囲で問題なく利用できます。あとは、αの何乗まで定義できるか?という問題だけかな?

送信系の場合、アドレスの管理とか、管理情報(モード設定や、同期信号、エラー検出コード)等、いろいろ仕事ありますから、完全リアルタイムというのは、失敗のリスクが大きすぎるかもしれません。 ユーザからの依頼で書きそこないCD-Rの解析をすると、シンドローム演算している気配は感じられるけど、書くより先にご破算してしまうのか(書き落とし)ちっと不可思議な不良ディスクを見たことがあります。書き込みではシステムに余裕を持っていないとダメだという事なんでしょう。リアルタイムシンドローム回路採用なら余裕だったのかもしれません。

しかし、再生時は、データ入力完了時にエラー有無判定がすでにできていることになります(管理のオーバヘッドが軽くなる)。

通信のデータ信頼性確認の例としてCD-ROMを取り上げる、フルエラー訂正機能を実現するには、、ディスクからピックアップを通して読みだされたデータは、いったんドライブ内蔵のバッファメモリに書き込み 最終的にPCへの出力するための読み出す2回の基本のアクセスの他に、その間の作業として、訂正動作を実施するとき、ほぼ全数のデータの読み出しアクセス(数)が発生します(計3回分)。 CD-ROMだとQPという、2重のパリティつけるので、さらにほぼ1回分アクセス発生するかもしれません。大雑把に言うと4倍速CD-ROMがあったとすると、その速度の4倍の16倍相当(訂正回路1回省略なら12倍速相当)のメモリへのアクセス能力が必要になるわけです。リアルタイムシンドローム演算なら、内部演算時間はかかりますが、基本の8倍速相当のメモリアクセスですみますし、訂正が必要なときのみ、前述12倍速相当とか、16倍速相当になる場合もあるということです。
リアルタイムにシンドローム演算できるフォーマットというのは、いいもんですね。(実現するにはそれなりのコストが必要なので、コストパフォーマンスというシステム設計上の重みづけのかなめだったりするのかな?)

   エラー訂正があるから、ディスク盤面なんて汚しても、傷つけても平気平気..などと考えないでくださいね。

余談:ディスク(CD-ROM)から読みだしたデータをそのままPCに転送しない別の理由。

ディスクの再生速度は、1倍速で、44.1kHz(オーディオサンプリング)*4byte(16ビットステレオ2チャンネル)≒0.17Mbyte/sec しかありません。競争社会なので再生速度はどんどん上がりましたが、それでも、数Mbyte/sec相当速度くらいが実力上限だったかと思います。複数のピックアップを並行してデータ読み出しに使い、、バッファメモリ上で合成することで、ディスクを早くまわさなくても、50倍速以上まで高速化できるといううたい文句のシステムの発表があったようですが、結局早く(大量に)読むための、DVDやさらに次世代DVD(BD)に移行しました。

最近のPCの内蔵CPUの速度は?軽くGHzですよね?(それが命令実行サイクルとは違うけど)。すると、PCのソフトからすると、CD-ROMデータの準備は非常に遅いので、読み出すとき、準備できたかできてないかたびたび確認しないと読めないのでは(PIO方式)、無駄な時間が多いという事になります。そこで、DMAという手法を使って、準備ができたらCPUのソフト実行を一休みさせて、CD-ROMから、PCのメモリに一気にデータ転送します。CPUは、データ準備しろという命令をドライブとチップセットにだしたら、メモリ上に転送完了できましたという合図(割り込み)をもらうまで、ドライブからメモリへの転送は関知せず、必要な他の仕事をするというのが、効率的でしょう? 確かにプログラム止まる意識は無いけど、実時間ではCPUが止まっている期間ができていますから、DVDの動画再生していたら突然マウスの動作がかくかく不自然になるとか経験ありませんか?転送レートが遅くて、CPUの止まる転送時間が長くなるのが主因なのかもしれませんね(古い装置や、遅いPCの場合)。
もしPCのBIOSを見る機会があったら、HDDやCD-ROM等の設定を見ると、DMAの通信速度の表示がでているのが確認できるかもしれません。wikiによると最近のSATAの通信速度は150MB/sだとか。ディスクの読み出し速度と、PCへの転送速度の違いを吸収するために、ROMドライブにはメモリを内蔵して、DMAで、CPUの負担を減らして一気にデータ転送を実行したいわけです。

また、とりあえずファイル1つ読むための命令をCPUがドライブに出した後、つづきのファイルを読みたいと考えたとき、偶然ディスク上の連続した(でなくても近接)データだったら、ROMドライブが、最初の命令に必要なデータの後を引き続き読み続けていれば、次の命令によって、メモリ上のエラー検出判定終了しているデータを即座に、PCにデータを渡すことができます(キャッシュ読み出し)。 これが、CD-ROM内部にバッファRAMを持つ意義の一つです。

念のため:BIOSの設定壊すとPC立ち上がらなくなります。自力でなんとかできる人以外は、PCやマザーボードの取説を読むだけにするほうが無難です。


関連参照先
FX-502P

I love Hewlett-Packard Calculator

レッドブック・コンパクトディスク

イエローブック・CD-ROM

HP200LX

Tiny Forthインタープリタ

サイトマップ トップ << 電よも < <  ecc2問題点 <