FPGA開発日記

FPGAというより、コンピュータアーキテクチャかもね! カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages/

LLVM Sanitizerを試す

Zapccを評価するために、図らずも自作RISC-VシミュレータをLLVMに移植したのだった。 LLVMに移植したので、どうせならLLVMのメモリリークチェック機能などについて試行してみたい。 TuringCompleteFM にも出ていたのだが、LLVMのSanitizerはかなり優秀らしい…

「ハン・ソロ/スターウォーズ・ストーリー」を見てきた

たとえ2時間映画館に座っているのがおっくうでも、スター・ウォーズは見に行きます。 starwars.disney.co.jp あまりストーリーのネタバレは書かないけど、なるほど、米国で評価が低い気持ちは、何となくわかる気がする... 「ローグ・ワン」があれだけヒット…

TensorFlow+Kerasに入門(7. Keras2cppをimage_data_formatに対応させる)

Keras2cppを使ってKerasのモデルをC++のコードに変換したのだが、まだ問題がある。デフォルトの画像データフォーマットである image_data_format = channels_last に対応していないことだ。 バックエンド - Keras Documentation これにより、画像データをデ…

TensorFlow+Kerasに入門(6. keras2cppによるC++でのCIFAR10推論実行)

keras2cppのコードを解析していき、いくつかkeras2cppのコードがKeras2に合っていない部分を発見した。 前提条件 今回はkeras2cppの実装にある程度合わせるため、input_image_formatをchannel_firstに設定している。 これは${HOME}/.keras/keras.jsonで設定…

TensorFlow+Kerasに入門(5. keras2cppによる推論の試行→失敗の解析)

FPGAの部屋のmarseeさんの記事を見て、TensorFlow+Kerasに入門してみた。 というかmarseeさんの記事で掲載されているソースコードをほとんどCopy & Pasteして実行してみているだけだが... TensorFlow+KerasでCifar10を学習するサンプルプログラムを実行して…

Chisel-Templateを使ってオリジナルデザインを作ってみるチュートリアル (2. シミュレーションモデルの作成)

ハードウェア記述言語であるChiselのチュートリアルを試してみている。 ChiselはScalaをベースにしているDSL(ドメイン特化言語)だ。 したがって、Scalaを勉強しながら進めていく必要がある。 Chiselの理解のために、簡単なCPUを作ってChiselを使いシミュレー…

Chisel-Templateを使ってオリジナルデザインを作ってみるチュートリアル (1. デザインの作成)

RISC-Vの実装であるRocket-ChipはChiselと呼ばれるDSLで記述されているのだが、この書き方やテクニックについてはあまり知られていない(まあ知る必要もないが...) ただし、AWSで動作するFireSimを改良したりだとか、Rocket-Coreを改造する場合にはこの知識は…

「量子コンピュータ・超並列計算のからくり」を購入

師匠のブログでおすすめとのことで、すごく分かりやすいよとアピールを受けたので購入。 量子コンピュータ 超並列計算のからくり (ブルーバックス)作者: 竹内繁樹出版社/メーカー: 講談社発売日: 2013/11/08メディア: Kindle版この商品を含むブログ (1件) を…

RISC-Vにも対応できるJTAG Debugger ARM-USB-TINY-Hを買った

Freedom SoCのデバッグをしたいので、ARMのJTAG Debuggerを購入した。だいたい5000円くらい。 Strawberry Linuxで購入できるとのことだけど、クレジットカードに対応していなくて代引きのみ。 そんなの仕事してる最中にどうやって払えっていうんだよ! とい…

高速C++コンパイラZapccの試行(2. GCC / LLVM / zapcc でのコンパイル速度比較)

zapccは先日発表されたClangをベースとしたコンパイラである。基本的な高速化の手法についてはいろんなところで公開されているのでそちらをチェックして欲しい。 サーバクライアント方式にすることで高速化を図っているということなのだが、実際にはどの程度…

AWSで動作するRISC-VデザインFireSimのカスタマイズ : オリジナルデバイスをVerilog付きでシミュレーションする

前回の記事で、どうにかFixedInputStreamが実行できるようになったが、これはテストベンチまですべてScalaで記述して常に同じ動作を繰り返す環境になっている。 これは嫌なので、Verilogなどを接続して外部から引数を渡し、自由にシミュレーションを実行でき…

SiFive社から発表されたローエンド用のRISC-VコアE21/E20

SiFive社から発表されたローエンド用のRISC-VコアE21とE20、これまでのコアと比較して一覧表を作った。 www.sifive.com E21とE20はCortex-M0, M0+ を狙ったものに見える。2-stage、3-stageの構成でレイテンシ重視、さらにInterruptの本数も増えている(この辺…

AWSで動作するRISC-VデザインFireSimのカスタマイズ : Firechipにオリジナルデバイスを追加する

FireSimについてある程度動かしたので、今度はカスタマイズをしてみたい。 というわけで、FireSimの実際のデザイン部分であるFireChipを使ってみることにした。 オリジナルのデザインを追加してみることにした。 メモリマップのレジスタを作る 参考にしたの…

AWSで動作するRISC-VデザインFireSimのカスタマイズ : Firechipを試す

FireSimについてある程度動かしたので、今度はカスタマイズをしてみたい。 というわけで、Firesimの実際のデザイン部分であるFireChipを使ってみることにした。 Tutorial: Developing New Devices — FireSim documentation まずはデザインをForkしてダウンロ…

高速C++コンパイラZapccの試行(1. 現プロジェクトのインポート)

興味本位ではあるが、高速C++コンパイラとしてオープンソース化されたZapccが非常に気になっている。 LLVMがベースとなっていることだし、いつも新しいコンパイラプラットフォームが公開されたときはRISC-Vの対応について見てしまうので、アーキテクチャの移…

Microsoftのデータフロープロセッサ EDGEの論文を読む

Twitterで知った、MicrosoftのFPGA向けのインオーダスカラプロセッサの論文が出ている。ターゲットとしてはデータフロー処理だ。 プロセッサの名前としてはEDGEという。ブラウザのEdgeではなくて、Explicit Data Graph Executionの略称である。 面白そうなの…

AWS上で動作するRISC-VチップFireSimのチュートリアルを試す 4. Single Core Roctket-Chipの動作

FireSimのチュートリアルを試す続き。前回はなぜかFireSimが起動せずに終わった。 色々調べていくと、FireSimを立ち上げる際のF1インスタンスの設定で、t1.nanoで生成したVPCとサブネットを使用しなければならなかった。 AWSコンソール上でこれを確認してF1…

AWS上で動作するRISC-VチップFireSimのチュートリアルを試す 3. ソフトウェアのビルドと環境設定

AWSで動作するRISC-Vシミュレーション環境FireSimのチュートリアルその3. F1インスタンスにアクセスするために、生成したキーペアのfiresim.pemをホームディレクトリに配置しておく。 また、sshのキーと同様に、chmod 600 しておく。 $ chmod 600 ~/firesim…

Ubuntu 18.04でsbtが動かない問題(というか結果的にRocket-Chipが動かない問題)を何とかする

Ubuntuが18.04 LTSになって、さっそくバージョンアップしてRISC-Vの環境を構築しようとしたのだけれども問題にぶち当たった。 RISCV-Toolsは以下のエントリでインストールの試行はしていたし、うまく行くことは確認していたのだけれども、Rocket-Chipの試行…

Spectre & Meltdown を防ぐマイクロアーキテクチャSafeSpecの論文を読む

CPU

Hisa Ando氏のブログで知ったのだが、Spectre & Meltdownを防ぐマイクロアーキテクチャとしてSafeSpecという技術が発表されたので、これを読んでみることにした。 2.SpectreやMeltdownを防ぐSafeSpecマイクロアーキテクチャ 20180616 Boffins offer to mak…

TensorFlow+Kerasに入門(4. Keras2のConvolution2DとConv2Dの違い?)

FPGAの部屋のmarseeさんの記事を見て、TensorFlow+Kerasに入門してみた。 というかmarseeさんの記事で掲載されているソースコードをほとんどCopy & Pasteして実行してみているだけだが... TensorFlow+KerasでCifar10を学習するサンプルプログラムを実行して…

AWS上で動作するRISC-VチップFireSimのチュートリアルを試す 2. インスタンスの設定とAWSの起動

AWSで動作するRISC-Vシミュレーション環境FireSimのチュートリアルその2. [高度な詳細]を開き、テキストボックスに付録に示すようなテキストファイルを入力する。 ... 次にストレージを追加する。デフォルトでは75GBと設定されているが、これを300GBまで拡…

AWS上で動作するRISC-VチップFireSimのチュートリアルを試す 1. 立ち上げと参考文献

参考にしたのは以下。 Welcome to FireSim’s documentation! — FireSim documentation 初期セットアップ・インストール 最初にAWSのユーザグループを作成する。AWSのアカウントと支払を行っていればこのステップを実行する必要はない。 アカウントに必要なAW…

RISC-V SpikeシミュレータでC/C++のprintfを実現する仕組み (5. システムコールの呼び出し)

Hello Worldのプログラムを動かしながら、RISC-V Spikeシミュレータのログを追っていき、RISC-Vのブートシーケンスを追っていく、その2。 今回はRISC-Vプログラムのシステムコールの呼び出し部分 Spikeシミュレータの構造を調べているのだが、printf()などの…

プロセッサのメモリコンシステンシモデルについて

プロセッサ構成はますますマルチコア化しており、同期処理や各プロセッサでの通信、データ共有をどのように行うかという問題は重要になっている。 ハードウェア・ソフトウェアには「メモリモデル」というものが定義されており、共有する変数をどのようにして…

RISC-V SpikeシミュレータでC/C++のprintfを実現する仕組み (4. RISC-Vのプログラムロード)

Hello Worldのプログラムを動かしながら、RISC-V Spikeシミュレータのログを追っていき、RISC-Vのブートシーケンスを追っていく、その2。 今回はRISC-Vプログラムのロード部分。 parse_args()により関数をコールを行う。 riscv-pk/pk/pk.c static size_t par…

RISC-V SpikeシミュレータでC/C++のprintfを実現する仕組み (3. RISC-Vのブートシーケンス)

Hello Worldのプログラムを動かしながら、RISC-V Spikeシミュレータのログを追っていき、RISC-Vのブートシーケンスを追っていく。 riscv-isa-sim/riscv/sim.cc 内のリセットベクタが最初に動作する。 riscv-isa-sim/riscv/sim.cc void sim_t::make_dtb() { .…

Elfファイルからシンボルを取り出してシミュレータでトレースを表示する機能の実装

RISC-Vシミュレータにはelfファイルを読み込ませているのだが、elfファイルにはいろんな情報が取り込まれており、例えば テキスト領域の関数のヘッダアドレス グローバルデータが格納されているアドレス などの情報が格納されている。 シミュレータは、テキ…

RISC-V SpikeシミュレータでC/C++のprintfを実現する仕組み (2. Device Tree Blobと Proxy Kernel)

RISC-Vのシミュレータは、シミュレーション対象のプログラムのElfファイル以外に、いくつかの外部ライブラリをロードしている。 RISC-V の Device Tree (SpikeのビルドにDevice Tree Compiler が必要なのはこのためだ) RISC-V の Proxy Kernel (I/Oなどの本…

分散システムのコンセンサスアルゴリズムRaftについて調査

ビットコインの勉強の最中に、コンセンサスアルゴリズムについていろいろと調べていたのだが、じゃあ一般的に分散システムでコンセンサスってどうやってとるんだろう?ということに興味をもってコンセンサスアルゴリズムというものを知った。 最初は、ちょっ…