オペランド再考 オペランドについて考え直した。現行ではオペランドとオペコードを区別するMSB、即値とレジスタ指定を区別するビットを使い残り6bitで数値をあらわしていたがもうちょっと工夫する。 オペランド MSB=1 とする。オペコードはMSB=0で区別できる。 type N: オペランドなし 現オペコード|次オペコード typ… トラックバック:0 コメント:0 2020年07月31日 続きを読むread more
ぼくのかんがえたさいきょうCPU: 明示的な命令列の並列実行 EPICじゃないよ。あれは命令の明示的な並列実行の指定。これの続き。 ぼくのかんがえたさいきょうCPU:明示的な並列実行 命令列のかたまりをランと呼ぶことにする。ランは色々な演算を行った結果、最後にレジスタライトまたはメモリ書き込みで終わるような、その中の命令をOutofOrderなどで並列に実行しづらいかたまり。前回はラン… トラックバック:0 コメント:0 2020年01月28日 続きを読むread more
ぼくのかんがえたさいきょうCPU:命令エミュレーションについて 昔の汎用機(System/360以降)は上位機種から下位機種まで命令互換で価格に応じて拡張性や性能が違っていた。上位機種は最先端の半導体テクノロジーを採用し積極的に布線論理(ハードワイヤド)で実装、下位機種はこなれた半導体テクノロジーで集積度や動作速度も遅く、マイクロ命令で実装していた。ということを参考にするとよく使う命令はハードで実… トラックバック:0 コメント:0 2020年01月16日 続きを読むread more
ぼくのかんがえたさいきょうCPU: ZLSアーキテクチャ 風呂で思いついた。長いデータを格納できるレジスタをどう活用するか。 作業用のスクラッチパッドメモリというのがある。巨大な主記憶とは別にコアに近い部分にアクセス速度が早い小容量のメモリを用意し、こちらで作業することにより高速に処理できるようにする。そのスクラッチパッドメモリをどう見せるかだが、あるプロセスだけに局所的に見せようと… トラックバック:0 コメント:0 2019年10月24日 続きを読むread more
ぼくのかんがえたさいきょうCPU:ローテート/シフト命令 シフト命令:ビット単位 ROR 右ローテート ROL 左ローテート SHR 右シフト SHL 左シフト シフト命令:バイト単位 RORB 右ローテート ROLB 左ローテート SHRB 右シフト SHLB 左シフト ぼくのかんがえたさいきょうCPU 2018命令フォーマットメモ シフト命令は対象となる… トラックバック:0 コメント:0 2019年10月22日 続きを読むread more
ぼくのかんがえたさいきょうCPU:EVAL命令詳細 EVAL命令は指定したレジスタの内容を命令列として実行する。用途は自己書き換え命令の代替、マクロ命令的な利用。 ぼくのかんがえたさいきょうCPU:eval EVAL reg,step regに格納された内容を命令列として扱い、実行する。 命令列はregの下位バイトから上位バイトに向かって順に格納する。 EVA… トラックバック:0 コメント:0 2019年09月24日 続きを読むread more
ぼくのかんがえたさいきょうCPU:型とサイズとNull、符号なし演算の扱い 型: 整数型(符号付き2の補数) ー 符号なしの演算結果は%Re側に保存 アドレス型 ー 整数型に追加する属性。アドレッシングモード側に指定されたレジスタに付加。 以下はオプション: 浮動小数点型 ー IEEE754準拠と非準拠。FP16,FP32,FP64,FP128,... DP32,DP64,DP128,... BC… トラックバック:0 コメント:0 2019年09月20日 続きを読むread more
ぼくのかんがえたさいきょうCPU:バリア命令 メモリオーダリングでロードやストアの順序を入れ替えて効率よく実行させるが、いったん実行中のメモリアクセスを完了させる用途にバリア命令を用意。 命令フォーマット:01110xxx 8種類 メモリ関係: FENCE #LD この命令以前のストア命令を完了 FENCE #ST この命令以前のロード命令を完了 #… トラックバック:0 コメント:0 2018年12月02日 続きを読むread more
ぼくのかんがえたさいきょうCPU:明示的な並列実行 アウトオブオーダ実行は自動的に命令の実行順を入れ替えてできる分から効率的に済ましていく方式だが、命令で明示的に並列実行を指示するにはどうしたらよいか考えてみた。 先行する命令列Aと後続の命令列Bについて考える。 並列実行ができない実装のプロセッサでは命令列Aの実行を済ませてから命令列Bの実行を行う。並列実行ができるプロ… トラックバック:1 コメント:0 2018年11月09日 続きを読むread more
ぼくのかんがえたさいきょうCPU ISA整理 ぼくのかんがえたさいきょうCPU Rd指定はいらないのでは検討でしばらく考えた結果、うまく入りそうだったので整理した。 すべての命令は直前の命令の実行結果%Pd、予備結果%Pe、フラグ%Pfとオペランドで指定したレジスタを入力とし、演算結果を%Rd、%Re、%Rfとして次の命令に渡す。汎用レジスタに保存するときは専用のWR命令… トラックバック:0 コメント:0 2018年10月24日 続きを読むread more
ぼくのかんがえたさいきょうCPU Rd指定はいらないのでは検討 命令フォーマットだけど演算結果を保存しないで次の命令に渡す仕様、必要なときだけデスティネーションレジスタを指定できれば要らないのでは。つまり基本1バイト命令だけで済んでしまうのでは。 00_dddddd 直前の命令の結果PdをRddddddに保存する。 バイト数 フォーマット 1 01_0_0_cond 1 01_… トラックバック:1 コメント:0 2018年09月03日 続きを読むread more
ぼくのかんがえたさいきょうCPU 演算結果のバイパス 以下をもうちょっと考えてみたもの。 ぼくのかんがえたさいきょうCPU:連鎖性言語の特徴を取り入れてみる 乗算を使わずに%r1の値を3倍するコードを考えてみる。 SLL %r1,1,%r2 ; ADD %r2,%r1,%r3 SLL命令で%r2には%r1の2倍がはいり、ADDでもとの%r1と加算されて%r3に… トラックバック:0 コメント:0 2018年04月30日 続きを読むread more
ぼくのかんがえたさいきょうCPU ベクトル演算(スライド) ベクトルデータどうしの演算について https://speakerdeck.com/houmei/bokufalsekangaetasaikiyoucpu-2018-bekutoruyan-suan 【富士電機】FRN0.4C2S-2J インバーター FRENIC-Mini 三相 200V (三相モーター制… トラックバック:1 コメント:0 2018年04月24日 続きを読むread more
ぼくのかんがえたさいきょうCPU スカラ演算(スライド) スカラデータどうしの演算について https://speakerdeck.com/houmei/bokufalsekangaetasaikiyoucpu-2018-sukarayan-suan スカラ座の序曲・前奏曲・間奏曲集リッカルド・シャイー ユニバーサル ミュージック 2017-09-19売り上げラ… トラックバック:1 コメント:0 2018年04月23日 続きを読むread more
ぼくのかんがえたさいきょうCPU データ(スライド) 扱うデータと型について。 https://speakerdeck.com/houmei/bokufalsekangaetasaikiyoucpu-2018-data 異なる型どうしの演算については別スライドを作ります。 トラックバック:1 コメント:0 2018年04月19日 続きを読むread more
ぼくのかんがえたさいきょうCPU レジスタの本数と拡張 命令フォーマットでは汎用レジスタの番号指定を6bit用意している。64本が指定可能で、RISC系プロセッサの汎用レジスタ31(32)本+浮動小数点レジスタ32本をカバーできると考えた。 で、常に64本必要だろうか?インタラプトが発生した時は割り込み処理用に8本くらいでも良さそうだし、数値計算向けに大量に必要になるかもしれない。とい… トラックバック:0 コメント:0 2018年04月02日 続きを読むread more
ぼくのかんがえたさいきょうCPU 2018命令フォーマットメモ 1バイト単位の可変長命令についてドバッと思いついたのをメモ。Wikiサービスを探して整理する予定。 8bit可変長命令フォーマット 命令列 := {CO|CO OP}* CO := 0_xxxxxxx オペコード OP := 1_xxxxxxx オペランド CO := {CO1|CO2|CO3} CO1 :… トラックバック:0 コメント:0 2018年03月19日 続きを読むread more
ぼくのかんがえたさいきょうCPU オペランド簡略化 可変長8bit単位の命令フォーマットのうち、オペランド部分を変更。 ぼくのかんがえたさいきょうCPU 8bit可変長命令フォーマット続き ぼくのかんがえたさいきょうCPU 8bit可変長命令フォーマット オペコードは 0xxxxxxx で始まり、オペランドは 1xxxxxxx で始まる。 オペランドは以下の2種類… トラックバック:0 コメント:0 2018年03月18日 続きを読むread more
ぼくのかんがえたさいきょうCPU レジスタを覗く窓 ぼくのかんがえたさいきょうCPUは最大長で32768バイトの汎用レジスタを定義しているが仮に実現したとして演算器をどうするか。もうなんかドリフのコント「もし汎用レジスタが異常に長かったら」みたいなタイトルになってきてるが。 レジスタの領域をチップ内に持つのはそう難しくないだろうが、32Kバイト長と32Kバイト長を入力として演算… トラックバック:0 コメント:0 2018年03月15日 続きを読むread more
ぼくのかんがえたさいきょうCPU シフト命令のシフト量 ぼくのかんがえたさいきょうCPUは最大長で32768バイトの汎用レジスタを定義しているが実現性はさておきどんな問題が起こるか。 シフト命令のシフト量が最大262144になってしまう。18bit必要だ。こんなものバレルシフタで作ったらとんでもないことになってしまうし分割して複数サイクルでシフトするにしてもそもそもそんなにシフト量… トラックバック:0 コメント:0 2018年03月13日 続きを読むread more
ぼくのかんがえたさいきょうCPU:eval ぼくのかんがえたさいきょうCPUは最大長で32768バイトの汎用レジスタを定義しているが実現性はさておきこれをどう活用するか。 レジスタに命令列を入れて実行させるEVAL命令というのはどうか。 EVAL レジスタ番号,実行ステップ数 この命令に当たると、レジスタ番号で指定された汎用レジスタの内容をフェッチする直… トラックバック:0 コメント:0 2018年03月11日 続きを読むread more
ぼくのかんがえたさいきょうCPU ALU(スライド) ALUについて整理。 https://speakerdeck.com/houmei/2018-bksc-alu トラックバック:0 コメント:0 2018年03月07日 続きを読むread more
ぼくのかんがえたさいきょうCPU レジスタ番号と定数 演算に定数をつかうときは 1. レジスタに即値を代入する または 2. 即値をオペランドに指定する という感じになるのだけれども、1, はいったん即値を代入する操作が必要になり、2.はオペランドのフォーマットが長くなってしまう。ではどうしようか。 64本の汎用レジスタを使うことを考えると、これを表現するためには6bitあればよ… トラックバック:0 コメント:0 2018年03月05日 続きを読むread more
竹下世界塔のCPUアーキ理解2017 (スライド) 気がつけば2006年からCPUアーキテクチャについて色々調べては考えていたのだった。ということで現在までの私自身の理解をスライドにしてみました。こんなパワポ資料を作るのも十年ぶりだろうか。Keynoteだけど。 https://speakerdeck.com/houmei/2017-cpu-architeciture … トラックバック:0 コメント:0 2017年11月12日 続きを読むread more
ぼくのかんがえたさいきょうCPU: 2017.06 1バイト命令・バリア・プリフィックス 命令拡張の余地がなくなった場合に、従来未定義だった命令から始めることで続く命令列に機能を追加できる。これをプリフィックス命令という。プリフィックス命令は次の命令に対する1回だけの指示と考えることもできる。プリフィックス命令は短いほどよいので1バイト命令フォーマットから空いているところを探す。今回はメモリ操作命令の1バイトフォーマットを… トラックバック:0 コメント:0 2017年06月11日 続きを読むread more
SIMDのマルチレイヤー表現 ぼくのかんがえたさいきょうCPUは今のところレジスタの幅が32KBで四倍精度浮動小数点をSIMDで扱うと同時に2048個も扱える。が、ここまでのサイズがあると同種のデータだけ扱うのではなく構造体やタグも付加したい。ではどうやって表現しようか? 関連: ぼくのかんがえたさいきょうCPU エンディアンとタグ付きデータの扱い ぼく… トラックバック:0 コメント:0 2017年06月04日 続きを読むread more
ぼくのかんがえたさいきょうCPU: 2017.06 算術演算命令 算術演算命令はデータを数として扱い、四則演算を行う。整数型や浮動小数点型はソースレジスタRaの形式に合わせて変換され、Rdに保存される。演算結果はRaと同じレジスタ幅、レーン構成になる。 概要と基本フォーマット 変換に関するルールは次のとおり。 データと型 CO1: 00nn_xxxx A1: 0001_at… トラックバック:0 コメント:0 2017年06月02日 続きを読むread more
ぼくのかんがえたさいきょうCPU: 2017.05 分岐条件 ほとんどのプロセッサは4bitの16パターンで分岐の条件を決めている。2の補数を用いた符号ありの整数演算と符号なしの整数演算の条件は以下のフラグを使う。 Z ... 演算結果がゼロ N ... 演算結果がマイナス (最上位ビットが1) V ... 演算結果が2の補数の範囲外 オーバーフロー C ... 演算結果が符号なしの… トラックバック:2 コメント:0 2017年05月30日 続きを読むread more
ぼくのかんがえたさいきょうCPU: 2017.05 SIMD補足 ・SIMDロード/ストアについて アドレッシングモード計算のうちRaがベクタなら、Rb(ベクタ/スカラ)や即値(スカラ)を加算し、複数の実効アドレスを生成する。 Raの各レーンが実効アドレスサイズに拡張された後、Rbや即値を加算、それぞれのレーン用の実効アドレスを得る。 →LEA命令の場合、各レーンが実効アドレスのサイズになる。 … トラックバック:1 コメント:0 2017年05月26日 続きを読むread more
ぼくのかんがえたさいきょうCPU: 2017.05 データと型 汎用レジスタで扱うデータのサイズや型について定義する。メモリ操作命令ではレジスタのサイズだけを扱い中身(型)は無視する。汎用レジスタ間の算術演算でのみ型を扱う。演算の結果、データのサイズが変わってしまっては扱いにこまるので、演算結果は2つある引数のうち最初の引数に合わせることにする。 ・用語など定義 レジスタのサイズ 2^(n… トラックバック:1 コメント:0 2017年05月24日 続きを読むread more