2019-05-01から1ヶ月間の記事一覧
MYRISCVXISelLoweringはLLVM IRからSelectionDAG(データフローグラフ)への変換プロセスだ。バックエンドのかなり初期の部分で適用される。 ここで必要な実装はMYRISCVXISelLowering.cppを実装する必要がある。ここではLowerReturnとLowerFormalArgumentsを実…
Sipeed Maix GOはRISC-Vコアの搭載された小型ボードだ。 www.seeedstudio.com このボードのスペックについては、上記のページをそのまま引用すると、 In hardware, MAIX have powerful KPU K210 inside, it offers many excited features: 1st competitive R…
いつの間にか公開されていた、SiFive Tech Symposium in Tokyoのアジェンダを見ることができるようになった。 sifivetechsymposium.com 情報が錯綜していてどうしたらいいのか分からなかったが、これが正式なアジェンダ、なんだと思う。 結構他の都市のイベ…
printInstruction()などの命令プリントメソッドとMYRISCVXTargetMachineとの関連付けは、MCTargetDesc/MYRISCVXMCTargetDesc.cppで行われている。 LLVMInitializeMYRISCVXTargetMC()により登録されるクラス群 llvm-myriscvx/lib/Target/MYRISCVX/MCTargetDes…
命令のプリント、つまりアセンブリ命令をファイルに出力する処理は、基本的にMYRISCVXInstrInfo.tdに記述した命令の定義に基づいて生成される。 LLVMではPrintInstruction()というメソッドがその役割を担います。 このメソッドはMYRISCVXInstPrinterクラスに…
llcでLLVM IRからアセンブリ言語を生成する場合、バックエンドのターゲットとして大きく分けて以下の3つを指定する。 ./bin/llc -march=myriscvx32 -mcpu=simple32 -mattr=-64bit コマンドラインから設定されるターゲットの情報と内部変数の関係 それぞれが…
LLVM Compiler Infrastructure MYRISCVXTargetMachineはターゲットマシンを定義するファイルである。 また、MYRISCVXTargetMachineを継承したクラスとして複数のターゲットマシンを作ることができる。 MIPSなどのバイエンディアンのアーキテクチャでは、リト…
LLVM Compiler Infrastructure 前回に引き続きLLVMのバックエンドを作るために必要なファイルを読み解いていく。 MYRISCVXSubTarget.{h,cpp} サブターゲットはMYRISCVXの中でもアーキテクチャのバリエーションを付けるために使用されるもので、その名の通り…
少し前のニュースで、ASPLOS19でRISC-Vをベースとした新しいセキュアプロセッサの発表が行われたというニュースを見た。 Morpheus: A Vulnerability-Tolerant Secure Architecture Based on Ensembles of Moving Target Defenses with Churn dl.acm.org セキ…
2019/05/27(月)~2019/05/28(火)に開催されるxSIGと呼ばれるワークショップにて、RISC-Vについてチュートリアル講演を行います。 xsig.hpcc.jp xSIGというのは、「クロス・シグ」と読むらしく、「The 3rd cross-disciplinary Workshop on Computing Systems,…
LLVM Compiler Infrastructure 前回に引き続きLLVMのバックエンドを作るために必要なファイルを読み解いていく。 MCTargetDesc/MYRISCVXMCTargetDesc.{h,cpp} MYRISCVXMCTargeTDescでは明確なクラスを定義するわけではない。 その代わりに、これまでTarget D…
Intelがまた出した。Meltdown / Spectre系のCPUの脆弱性として新たに発表された"ZombieLoad"である。 これもまた論文が発表されている。これらの論文は、最新のCPUの技術を勉強するにあたって非常に有用なものだ。ZombieLoadの論文を読んで、どのような脆弱…
LLVM Compiler Infrastructure MYRISCVXCallingConv.td MYRISCVXのCalling Convention、つまり呼び出し規約について設定するTarget Descriptionファイルだ。MYRISCXVの呼び出し規約は、RISC-Vのものをそのまま使用しようと思う。 ここでは、関数呼び出しの時…
Chiselで記述されたRocket-Chipのデザインを見ていると、不思議な演算子が使われているのを見たことがあるかもしれない。 ConfigInRV32, ConfigInRV64, ConfigOutによるパラメタライズ src/main/scala/system/Configs.scala class DefaultConfig extends Con…
LLVM Compiler Infrastructure MYRISCVXTargetMachine.{h,cpp} その名の通りターゲットマシンを定義するファイルだ。MYRISCVXTargetMachineはLLVMTargetMachineを継承したクラスで、ターゲットマシンのすべての情報を集約する。 このクラスには、サブターゲ…
LLVM Compiler Infrastructure LLVMのバックエンドにオリジナルターゲットアーキテクチャを追加していくプロジェクト、MYRISCVXターゲットアーキテクチャを追加したら、今度はELFの情報を追加する必要がある。 MYRISCVXはRISC-Vのオリジナル実装なんで、ELF…
HiFive Unleashd上でDebian GNU/Linuxが動いてしまえば、あとは様々なことが可能だ。 ウェブサービスを立ち上げたり、各種アプリケーションを立ち上げることも可能となる。 例として、ngnixをインストールして、簡単なウェブサーバを立ち上げてみる。 といっ…
Rocketコアをカスタマイズし、FireSimのプラットフォームに乗せ、さらにFPGA合成したAGFIまで作成した。いよいよf1インスタンス上で動作させ、ベンチマークプログラムを動かす。 このとき、前章で紹介したようにFireSim上でBuildrootを立ち上げLinuxにログイ…
カスタムアクセラレータ付きのFireSimデザインが完成したので今度はVivadoで合成し、f1インスタンスで動作させるためのAGFIを作成する。AGFIとはAmazon Global FPGA Image IDの略称で、FPGAのイメージのようなものだ。このイメージIDを指定することで、何度…
FireSimの環境で、どうにかRocketシングルコアを動かすことができた。ここまでできれば、今度は様々なハードウェアをf1インスタンスで動かしてみたい。RocketはChiselというハードウェア記述言語で設計されているが、ChiselでオリジナルのモジュールをRocket…
RISC-Vでのハードウェア・ソフトウェア開発をするにあたり、まず必要になるのがツール群だ。 RISC-Vのソフトウェアツール群は、riscv-toolsというリポジトリにまとめられており、まずはこのリポジトリをダウンロードしてコンパイラなどを構築する必要がある…
FireSimの環境で、どうにかRocketシングルコアを動かすことができた。ここまでできれば、今度は様々なハードウェアをf1インスタンスで動かしてみたい。RocketはChiselというハードウェア記述言語で設計されているが、ChiselでオリジナルのモジュールをRocket…
SiFive社が販売しているRISC-Vボードの第3弾、Wi-Fiモジュールの搭載されたRISC-VボードHiFive1 Rev.Bが自宅に到着した。 HiFive1 Rev.Bパッケージ HiFive1 Rev.B内容物 HiFive1 Rev.Bの仕様は、SoCの部分はHiFive1と一緒だ。 動作周波数320MHz RISC-Vコア F…
FireSimのシミュレーションに使用する独自のAFIイメージを作成する。 AFIとは、Amazon FPGA Imageの略称で、AFIを作成しておけばすぐにAWS f1インスタンスにデザインをデプロイできる。 Amazon S3のアカウントをセットアップしていることを前提にする。 Amaz…
少しRISC-VのVector Extensionについて調査した。 Vector Extensionは、いわゆるベクトル命令だ。1命令で複数のデータを扱う方法といえば、SIMD(Single Instruction Multiple Data)もあるが、RISC-Vではまずはベクトル命令が定義された。現代のアーキテクチ…
RISC-Vの命令セットは、riscv.orgに掲載されているRISC-V User-Level ISA Manual V2.2 を見ればほとんどを把握することができる。 また、RISC-V Reader(日本語版 RISC-V 原典) にも命令セット一覧表が掲載されており、これを見ればRISC-Vの命令セットの概要…
巷で話題になっている書籍「ファクトフルネス」を読んだ。ゴールデンウィークで時間が少しできたので一気に読みこんだ。 単なる創造や、メディアの一方的な情報だけを信頼していると、実はより広い目で見るとそれは誤っている、という話を様々なストーリーを…
LLVM Compiler Infrastructure LLVMバックエンドを追加するにあたり、MYRISCVXアーキテクチャを定義するためのtdファイルを作成する必要がある。 tdファイルはLLVMのバックエンドを定義するためのDSLで、バックエンドを理解するためには避けては通れないもの…
LLVM Compiler Infrastructure LLVMバックエンドを追加するにあたり、MYRISCVXアーキテクチャを定義するためのtdファイルを作成する必要がある。 tdファイルはLLVMのバックエンドを定義するためのDSLで、バックエンドを理解するためには避けては通れないもの…