pupaにAmigaの名前がちっちゃいヘッドホンアンプ無期限なんだなOSI参照モデルが歌になりました時事クイズAVCHDを無圧縮AVIに変換する方法おバカなファンの願望twitterをしてないので。注入バルブの消耗HTML5のバリデーション子ども向けエアソフトガンの制限ベクトルプロセッサのアーキティクチャホントに知られていないとわかりました。知らずに色々と言っている人達が大勢いることもわかりました。とあるベクトルプロセッサの構成をプログラマの視線で説明したいと思います。元ネタは実在した(どこかで健気に稼働してたらご免)スーパーコンピュータのお話です。特徴(特長と書かない点に注意)は、ベクトルレジスタの存在。VR0からVR15まで16本のベクトルレジスタが...あれ?VR7までの8本だっけ20年も経つと覚えてないや。単位が「本」なんです。1本のベクトルレジスタに浮動小数点レジスタが512個入ってます。普通の(笑)フラグレジスタが512個入っています。これじゃ何故速くなるかさっぱりわかりませんよね。性能のキモを説明するために何か処理例を挙げましょう。ある計算が2,000セット必要で、1セットの内容が「A×B+C→D」としましょう。2,000セットあるのでAが2,000個、B、Cも2,000個あり、計算結果も2,000個出てきます。Mシリーズと同義)での普通のプログラムです。計算以外の処理は開発済の処理装置にやらせます。OSとアプリケーションは互換性100%って訳です。※この説明での「スカラープロセッサ」は一般の処理装置のことです。スーパーコンピュータではありません。面白いことにベクトルプロセッサを使うプログラムは、スカラープロセッサの命令が普通に並んでいます(笑)。2,000セットの計算をさせたい段階まで来ました。命令の順番は確かこんな感じ。これからベクトルプロセッサを使うよ。VR0は、Aのメモリから。VR1は、Bのメモリから。VR2は、Cのメモリから。※これは「積和計算」といって1命令になってます。VR3は、Dのメモリへ。(ここまで処理が進むと、1セットの計算方法が確定するので、準備します。1セット毎に計算方法をデコード(命令を解釈)していると遅いから。推測ですけれど、動的に電子回路を組み直してトコロテン式に計算結果が出るようにしてると思っています。現代のFPGAみたいなことを、原始的かつ高速に。ここで、2,000セットの計算は完了しています。自動的に512+512+512+464の4回に分割して計算します。512個というレジスタ数はプログラム上に出てきません。実は512個というのはS-820/80での個数なので、例えばS-820/20(128個モデル)でも同一プログラムを使えるように工夫しています。VRにできたデータ(例ではD)はメモリに入れる前に何度も使うと、同様に転送回数を減らせます。いう訳で、ベクトルレジスタ上での計算「VR0×VR1+VR2→VR3」といったものをできるだけ連続して行なうと性能が向上します。それをサポートするための命令がちゃんと用意されています。コンパイラ(当時はFORTRAN...今、笑った奴、ちょっと表へ出ろ。おまえのアセンブラより速いコードを吐くって知らんだろ。できるだけ1セットに処理を押し込みます。プログラマも1セットに入るよう工夫します。納期前の最後の性能向上で3日かけて2セットを1セットに統合したときはうれしかったなぁ。それだけで性能が数%あがったもん。このページを作っていて、20年前のプログラムの立場がようやくわかった。当時はプログラムの立場とか考えたこともなかったです、はは。私1人に開発させたもんだ。会社の度胸もスゴいと思う。mojolicious。