竹下世界塔のCPUアーキ理解2017 (スライド)

 気がつけば2006年からCPUアーキテクチャについて色々調べては考えていたのだった。ということで現在までの私自身の理解をスライドにしてみました。こんなパワポ資料を作るのも十年ぶりだろうか。Keynoteだけど。 https://speakerdeck.com/houmei/2017-cpu-architeciture …
トラックバック:0
コメント:0

続きを読むread more

割り込みの分類

 割り込みはパイプラインのどのステージで起こるかの続き。  TRONCHIPでは割り込みをEITという言葉で整理している。EITとは ・Exception (例外) ・Interrupt (割り込み) ・Trap (トラップ) で、Exceptionはハードウェア障害など深刻度が大きい割り込み、Interruptは外部信号…
トラックバック:0
コメント:0

続きを読むread more

SPARC64系のFMAについて

 きっかけは次の記事を読んで、SPARC64でのFMA(Fused Multiply Add : 積和演算)の実装がSPARC64VIという記述に「いやSPARC64IIIからあったはず」と思ったので確認してみようと思ったこと。 FMA (Fused Multiply-Add) について色んな観点でまとめてみた(小清水さんとコンピ…
トラックバック:0
コメント:0

続きを読むread more

ぼくのかんがえたさいきょうCPU: 2017.06 1バイト命令・バリア・プリフィックス

 命令拡張の余地がなくなった場合に、従来未定義だった命令から始めることで続く命令列に機能を追加できる。これをプリフィックス命令という。プリフィックス命令は次の命令に対する1回だけの指示と考えることもできる。プリフィックス命令は短いほどよいので1バイト命令フォーマットから空いているところを探す。今回はメモリ操作命令の1バイトフォーマットを…
トラックバック:0
コメント:0

続きを読むread more

SIMDのマルチレイヤー表現

 ぼくのかんがえたさいきょうCPUは今のところレジスタの幅が32KBで四倍精度浮動小数点をSIMDで扱うと同時に2048個も扱える。が、ここまでのサイズがあると同種のデータだけ扱うのではなく構造体やタグも付加したい。ではどうやって表現しようか? 関連: ぼくのかんがえたさいきょうCPU エンディアンとタグ付きデータの扱い ぼく…
トラックバック:0
コメント:0

続きを読むread more

ぼくのかんがえたさいきょう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