FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

2019-08-01から1ヶ月間の記事一覧

AWSのPythonインタフェースboto3を使用してEC2インスタンスにジョブを流し込む

AWSをコマンドラインから扱う方法についていろいろ勉強している。 最終的にはローカルマシンで実行している処理をAWSに流し込めるようになりたいが、そのためにはまずはPythonインタフェースであるboto3から、コマンドを流し込んで実行できなければならない…

AWSのPythonインタフェースboto3を使用してEC2インスタンスにコマンドを流し込む方法

AWSをコマンドラインから扱う方法についていろいろ勉強している。 最終的にはローカルマシンで実行している処理をAWSに流し込めるようになりたいが、そのためにはまずはPythonインタフェースであるboto3から、コマンドを流し込んで実行できなければならない…

AWSコマンドラインインタフェースにてS3とデータを同期する方法

AWSをコマンドラインから扱う方法についていろいろ勉強している。 例えば、ローカルマシン上のファイルやディレクトリをS3にアップロードし、それをEC2インスタンスに転送する方法などコマンドラインで実現できるようになりたい。 ローカルディレクトリのフ…

EC2インスタンスをboto3を使って立ち上げてコマンドを実行するまでの流れ

boto3を使ってEC2のインスタンスを立ち上げるところまではできるようになった。次は、立ち上げたインスタンスに対してコマンドを発行して、EC2インスタンスに任意の操作を実行できるようにする。 boto3経由でEC2インスタンスを操作するためには、SSMという機…

HotChips 2019で発表された世界最大のチップCerebras Wafer Scale Engineのホワイトペーパを読む

https://www.cerebras.net ウェブサイトより引用。 HotChips 2019の様子がTwitterで流れてきた。やはり一番大きなインパクトがあったのはCerebrasのWafer Scale Engineではないだろうか。 性能、機能性、意味はとりあえずおいておいて、そのインパクトはかな…

LLVMのバックエンドを作るための第一歩 (53. RV64 / RV32両方のサポート格闘中2)

RV64の64ビットモードでLLVMがアセンブラを生成できるように格闘している。とりあえずサンプルプログラムとして以下を用意した。 xlen64_func.cpp int64_t func() { int64_t a0 = 10; int64_t a1 = 20; int64_t ans = a0 + a1; return ans; } いろいろ奮闘し…

LLVMのバックエンドを作るための第一歩 (53. RV64 / RV32両方のサポート格闘中)

RV64の64ビットモードでLLVMがアセンブラを生成できるように格闘している。とりあえずサンプルプログラムとして以下を用意した。 xlen64_func.cpp #include <stdint.h> int64_t func() { return 0x100; } 要点としては、0x100の戻り値をint64_tのデータ型で返せるか、</stdint.h>…

AWSインスタンスをPythonで操作するためのboto3に入門する

私は普段はLLVMのビルドをローカルマシンを使って行っている。私のローカルラップトップPCはSurface Laptop2なので、LLVMをデバッグモードでビルドするのにはかなり骨が折れる(実際、ビルド中は何もできない)。 しかしサーバを購入するのはもったいないし、…

Chiselで部分代入を実現するためのいくつかのテクニック

Chiselでは、以下のようなビット列の一部に対する部分代入が許されない。 ハードウェア記述言語としてみると非常に不便だが、もともとChiselがソフトウェア記述言語Scalaがベースであるということを考えると何となく想像がつく。 val res = Wire(UInt(32.W))…

LLVMのバックエンドを作るための第一歩 (54. Compressed命令を実装する検討)

RISC-Vの命令セットは基本的に32ビット長だが、Compresed命令という16ビット長の短縮命令が定義されている。これはArmのThumb命令のようなもので、命令フェッチのサイズを減らし、性能を向上させることを目的としている。 今回はこのCompressed命令をLLVMに…

ChiselのパラメタライズによりGenericなモジュールを作成する手法

Chiselによりインタフェースのパラメタライズの検討を行う。例えば、汎用インタフェースを使用してバスのマルチプレクサを構成することを考える。 インタフェースとしては以下のものを使う。以下のGenBundleはTで汎用化されている。valid, sideband, dataの…

LLVMのバックエンドを作るための第一歩 (53. RV64 / RV32両方のサポート)

RISC-Vには32ビットモード(RV32)、64ビットモード(RV64)、128ビットモード(RV128)が定義されている。これまではRV32による32ビットのみをサポートしてきたが、RV64もサポートしたい。具体的に言えば、 RV64モードの時にレジスタ幅を64ビットとして取り扱う(…

Chiselを使ってコンフィギャラブルなモジュール設計を行う

Chiselを使うと柔軟性の高いモジュール設計が可能となる。一つの手法として、パラメータとしてクラスを渡す手法について調査した。 例えば、RISC-Vの1モジュールのPMP(Physical Memory Protection)の簡単な機能について実装を考えてみる。ただし今回はどのメ…

LLVMのバックエンドを作るための第一歩 (52. 浮動小数点のその他の命令)

比較命令以外にも、浮動小数点の様々な演算をサポートする。例えば、以下のようなものが挙げられる。 SQRT 浮動小数点符号反転 浮動小数点絶対値 符号付整数から浮動小数点への変換、符号なし整数から浮動小数点への変換 浮動小数点から符号付整数への変換、…

LLVMのオリジナルバックエンド実装をRelease 9.0のブランチに移植してみる

LLVM Release 9.0のリリースが目前だ。release_90のブランチでは日進月歩でコミットが進んでいるようだ。 github.com これまではrelease_80ブランチの上で作業していたのだが、そろそろrelease_90の上に移ってちゃんと移植できるか確かめた方が良い気がして…

高性能プロセッサの分岐予測のサーベイ論文を読んで分岐予測について学ぶ (9. ニューラル分岐予測器2)

プロセッサアーキテクチャについて再度復習その8。今回からニューラル分岐予測器。ニューラルネットを用いた分岐予測器の続き。 読んでいるのはA Survey of Techniques for Dynamic Branch Predictionという論文で、新規技術の解説ではないのだが、現在の有…

System Verilogで記述されたRISC-VコアArianeを試す (2. Arianeのキャッシュサブシステム)

Arianeは、System Verilogで記述されたインオーダの6ステージRISC-Vパイプラインプロセッサだ。 Arianeのデザインは良くできていて、System Verilogできれいに記述されている。キャッシュサブシステムなどCPUの基本構成も綺麗に設計されているので、これを機…

RustのコードをLLVM IRに変換してRISC-V LLVMバックエンドに渡してみる

RustのフロントエンドはLLVMで実装されているらしい。 Rustの文法自体は最近触っていないせいですっかり忘れてしまったが、自作LLVMバックエンドがRustの生成したLLVMを処理することができるようになれば格好いいかもしれない。 とりあえず、RustからLLVMのI…

高性能プロセッサの分岐予測のサーベイ論文を読んで分岐予測について学ぶ (8. ニューラル分岐予測器1)

プロセッサアーキテクチャについて再度復習その8。今回からニューラル分岐予測器。ニューラルネットを用いた分岐予測器。 読んでいるのはA Survey of Techniques for Dynamic Branch Predictionという論文で、新規技術の解説ではないのだが、現在の有名どこ…

LLVMのバックエンドを作るための第一歩 (51. 浮動小数点比較命令の追加)

RISC-Vには、浮動小数の比較命令命令として以下が定義されている。 funct7 rs2 rs1 funct3 rd opcode FMIN.D 0010101 rs2 rs1 000 rd 1010011 FMAX.D 0010101 rs2 rs1 001 rd 1010011 FEQ.D 1010001 rs2 rs1 010 rd 1010011 FLT.D 1010001 rs2 rs1 001 rd 10…

高性能プロセッサの分岐予測のサーベイ論文を読んで分岐予測について学ぶ (10. 高速パスベースニューラル分岐予測器)

プロセッサアーキテクチャについて再度復習その10。ニューラル分岐予測器の続き。 A Survey of Techniques for Dynamic Branch Prediction Sparsh Mittal https://arxiv.org/pdf/1804.00261.pdf パーセプトロン分岐予測器に対して、そのレイテンシの問題を改…

高性能プロセッサの分岐予測のサーベイ論文を読んで分岐予測について学ぶ (9. パーセプトロン分岐予測器の論文を読む2)

プロセッサアーキテクチャについて再度復習その9。ニューラル分岐予測器。 A Survey of Techniques for Dynamic Branch Prediction Sparsh Mittal https://arxiv.org/pdf/1804.00261.pdf その2回目。パーセプトロン分岐予測器の実装について。 調査したのは…

TensorFlow Lite on RISC-Vの論文を読む

知り合いの人からCARRV 2019 (Third Workshop on Computer Architecture Research with RISC-V)でTensorFlow Lite on RISC-Vの発表があったと聞いたので、さっそく論文をダウンロードしてみた。 carrv.github.io Towards Deep Learning using TensorFlow Lit…

高性能プロセッサの分岐予測のサーベイ論文を読んで分岐予測について学ぶ (8. パーセプトロン分岐予測器の論文を読む)

プロセッサアーキテクチャについて再度復習その8。今回からニューラル分岐予測器。 A Survey of Techniques for Dynamic Branch Prediction Sparsh Mittal https://arxiv.org/pdf/1804.00261.pdf で、パーセプトロン分岐予測器なんて勉強したこともなかった…

System Verilogで記述されたRISC-VコアArianeを試す (1. ビルドとシミュレーション)

Arianeは、System Verilogで記述されたインオーダの6ステージRISC-Vパイプラインプロセッサだ。 RISC-Vコアとしてはそこまで性能が高いわけではないが、多くのコンポーネントがSystem Verilogで記述されているということでハードウェア技術者にとっても解析…

LLVMのバックエンドを作るための第一歩 (50. 浮動小数点レジスタ向けのCalling Conventionの追加)

浮動小数点演算命令を使った算術演算は生成できるようになったが、まだ関数の引数として浮動小数点型を使用することができない。 これは、MYRISCVXのCalling Conventionに、浮動小数点を追加していないからだ。 RISC-VのCalling Conventionでは、浮動小数点…

LLVMのバックエンドを作るための第一歩 (49. 浮動小数点算術演算命令の追加)

浮動小数点のロードストア命令が生成できるようになったので、次は簡単な算術演算ができるようにする。とりあえずは、加減乗除、そして積和演算ができるようになりたい。 私たちはすでに命令定義のクラスとテンプレートを持っているので、そこに当てはめるだ…

LLVMのバックエンドを作るための第一歩 (48. 浮動小数点メモリアクセスの追加)

では、まずは簡単な浮動小数点命令の実装から入る。 演算命令を定義するところから始めてもよいが、そのまえに必ずロードストア命令が必要になるので、ロードストア命令から入る。 RISC-Vでは、単精度浮動小数点用のFLW / FSW、倍精度浮動小数点用のFLD / FS…

LLVMのバックエンドを作るための第一歩 (47. 浮動小数点レジスタの定義)

前章まででMYRISCVXの整数命令に関してLLVMバックエンドへの実装を進めてきた。 これだけでも随分と完成度が上がってきたが、まだ足りていないものがある。その一つとして、浮動小数点命令のサポートだ。 RISC-Vでは現状では2種類の浮動小数点命令が定義され…

高性能プロセッサの分岐予測のサーベイ論文を読んで分岐予測について学ぶ (7. 予測精度を上げるためのテクニック2)

プロセッサアーキテクチャについて再度復習その7。分岐予測の続き。 読んでいるのはA Survey of Techniques for Dynamic Branch Predictionという論文で、新規技術の解説ではないのだが、現在の有名どころの分岐予測技術についてまんべんなく解説してくれて…