ぼくのかんがえたさいきょうCPU: 2017.06 算術演算命令

 算術演算命令はデータを数として扱い、四則演算を行う。整数型や浮動小数点型はソースレジスタRaの形式に合わせて変換され、Rdに保存される。演算結果はRaと同じレジスタ幅、レーン構成になる。 概要と基本フォーマット  変換に関するルールは次のとおり。 データと型 CO1: 00nn_xxxx A1: 0001_at…
トラックバック:0
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU: 2017.05 分岐条件

 ほとんどのプロセッサは4bitの16パターンで分岐の条件を決めている。2の補数を用いた符号ありの整数演算と符号なしの整数演算の条件は以下のフラグを使う。 Z ... 演算結果がゼロ N ... 演算結果がマイナス (最上位ビットが1) V ... 演算結果が2の補数の範囲外 オーバーフロー C ... 演算結果が符号なしの…
トラックバック:2
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU: 2017.05 SIMD補足

・SIMDロード/ストアについて アドレッシングモード計算のうちRaがベクタなら、Rb(ベクタ/スカラ)や即値(スカラ)を加算し、複数の実効アドレスを生成する。 Raの各レーンが実効アドレスサイズに拡張された後、Rbや即値を加算、それぞれのレーン用の実効アドレスを得る。 →LEA命令の場合、各レーンが実効アドレスのサイズになる。 …
トラックバック:1
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU: 2017.05 データと型

 汎用レジスタで扱うデータのサイズや型について定義する。メモリ操作命令ではレジスタのサイズだけを扱い中身(型)は無視する。汎用レジスタ間の算術演算でのみ型を扱う。演算の結果、データのサイズが変わってしまっては扱いにこまるので、演算結果は2つある引数のうち最初の引数に合わせることにする。 ・用語など定義 レジスタのサイズ 2^(n…
トラックバック:1
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU: 2017.05 論理演算命令

 論理演算命令は汎用レジスタどうしでAND,ORなどの論理演算を行う。論理演算はbitごとに行われるものでデータ幅が変わっても論理演算の結果は変化しない。データ幅が変わることで結果が変わるシフト、ローテートやPOPCなどは別扱いにする。 概要と基本フォーマット CO1: 00nn_xxxx L1: 0010_log[3:…
トラックバック:1
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU: 2017.05 分岐命令

 分岐命令は条件により命令の流れを変える。相対アドレスによる分岐、1命令スキップ、Conditional Moveを行う。 概要と基本フォーマット ・基本は1バイト命令。CO1:J1フォーマットを使用。 CO1: 00_nnxxxx J1: 0000_cond cond: 分岐条件 前命令の結果から判断。 …
トラックバック:1
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU: 2017.05 メモリ操作命令

 メモリ操作命令は汎用レジスタとメモリ間の転送を行う。メモリ操作命令はデータのサイズしか意識しない。 概要と基本フォーマット ・基本は2バイト命令。CO2:M2フォーマットを使用。 CO2: 010_xxxxx_xxdddddd M2: 010_1_wwww_mm_dddddd wwwwはデータ幅、mmはモード …
トラックバック:2
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU: 2017.05 概要と基本フォーマット

 ぼくのかんがえたさいきょうCPUも考え続けていつのまにか十年くらい経ってしまった。いろいろな命令セットアーキテクチャを調べるほどにいじくりまわしたくなるのだが、そろそろまとめてみようかとおもう。 ぼくのかんがえたさいきょうCPU 2017版 ユーザモード定義 ・汎用レジスタはR0~R63の64本 ・汎用レジスタ以外のレジ…
トラックバック:4
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU:連鎖性言語の特徴を取り入れてみる

連鎖性言語  スタックを取り入れようと思うがアンダーフローやオーバーフローの管理がたいへんだ。では以下のように制限してみてはどうだろうか。 ・スタックは1段 ・オーバーフローもアンダーフローも発生しない ・次の命令でスタックからPOPしてもよい。POPしなければ捨てられる  演算結果を判定して分岐する場合 …
トラックバック:1
コメント:0

続きを読むread more

各種プロセッサのメモリオーダリングについて

 メモリに対しプロセッサからのロード/ストアが前後することのあるメモリオーダリングについて整理してみた。 メモリオーダリングまたはメモリコンシステンシに関する過去記事: ロード・ストアの順序が入れ替わるメモリコンシステンシ(メモリオーダリング) SPARCのメモリオーダリング  メモリオーダリングとは、プロセッサから発…
トラックバック:0
コメント:0

続きを読むread more

単項演算命令

 引数として1つのレジスタを入力とし、何らかの加工をして結果を返す命令を整理してみた。すぐ思いつくのは全bit反転のNOTだけど、これは論理演算命令の入力または出力を反転することで求めることができる。 (1)元のデータを加工するもの NOT bit反転 INC +1する。ADD A,1,Y と同等 DEC -1する。D…
トラックバック:0
コメント:0

続きを読むread more

メモ:Deep Learning処理向けプロセッサDLU

世界最速クラスのディープラーニング基盤と、業種・業務に対応したAIサービスを提供(富士通) 富士通、ディープラーニング専用AIプロセッサ「DLU」を開発(pc watch) 富士通、「誰でも使えるAI」の実現に向けて新たなAIサービス(マイナビニュース) 富士通、“30年磨いた”AI「Zinrai」API提供 ディープ…
トラックバック:0
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU スタック

 レジスタに属性をつけることによって何のデータを扱うかを明確にすると、命令セットも単純化できるし便利そうに思える。 ぼくのかんがえたさいきょうCPU レジスタに型(属性)をつける その2  が、割り込みなどが発生するとレジスタの値だけではなく属性と一緒に退避しなければならない。どうするか。  まずはレジスタの値に加えて属性情…
トラックバック:0
コメント:1

続きを読むread more

ARMのHPC拡張SVE(Scalable Vector Extension)

 E1丙を周回してますが伊26出ません。  HotChips28でARMv8のHPC拡張、SVE(Scalable Vector Extension)が発表された。 チップカンファレンス「Hot Chips」で次世代京コンピュータなどが発表(PC Watch) 追記: ARMの新ベクトル命令「SVE」、ポスト京に採用へ(…
トラックバック:0
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU レジスタに型(属性)をつける その2

 ぼくのかんがえたさいきょうCPU レジスタに型(属性)をつけるの再考。  まずはプロセッサで扱うデータの種類を整理する。 整数型8/16/32/64/128/256/...のbit幅、浮動小数点は半精度、単精度、倍精度、四倍精度、BCD単精度、BCD倍精度、BCD四倍精度。 そして上記データのベクタ型。 …
トラックバック:0
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU レジスタに型(属性)をつける

 SIMD系の命令を考えていたらレーンのサイズごとに命令のバリエーションが増えていくことに気付く。例えば加算のバリエーションはスカラデータ、1バイト単位×レーン数、2バイト単位×レーン数、4バイト単位×レーン数……など。さらに浮動小数点のSIMD形式もあって命令が複雑になる。で、レジスタに属性を付けて、属性によって演算の動作を変えること…
トラックバック:1
コメント:1

続きを読むread more

ロードストアアーキテクチャでもデータの加工はあるよという話

 ロードストアアーキテクチャはRISCの特徴のひとつで演算はすべてレジスタ間で行い、演算に必要な値はメモリ→レジスタへロードするだけ、演算結果をメモリに保存するときはレジスタ→メモリへストアするだけという方式のこと。  ではロードストア時にデータの加工はまったく行われないかというとそうではない。  大容量DRAMから1バイトを読…
トラックバック:0
コメント:0

続きを読むread more

スタックをどうするか?

 作業中のレジスタを一時的に保存しておいて後で取り出せるようにしておくためにスタックを使うことがある。例えばサブルーチンコールをした時に戻る番地はどこかに保存しておかなければならない。  RISC系ではJump&Link命令で戻るべき番地を指定した汎用レジスタ(または決め打ちの汎用レジスタ)に保存してサブルーチンにジャンプし、戻る…
トラックバック:0
コメント:0

続きを読むread more