タグ

ブックマーク / msyksphinz.hatenablog.com (22)

  • どのように論文を読むか - FPGA開発日記

    仕事柄論文を読む機会は多くあって、自分なりの読み方、まとめ方、深堀の仕方などはある程度ルーティンがあります。しかしそれが当に最適解なのかどうかは分かりません。もっと自分に合ったやり方があるかもしれないし、今の方法がベストなのかもしれない。 "How to read a paper" という、論文、というか論文形式のメモがあり、これは当時カナダのWaterloo大学にいたSrinivasan Keshav先生が長年の経験からどのように論文を読めばよいのかというのをまとめたものになっています。これを読んでみて、なるほどなと思ったのでメモとして残しておきます。 ちなみに検索するとこの先生は現在はケンブリッジ大学の先生のようです。よく見てみると日語に訳されている方もいるようで、原文と日語訳は一読の価値があります。 http://svr-sk818-web.cl.cam.ac.uk/kesha

    どのように論文を読むか - FPGA開発日記
    peketamin
    peketamin 2022/12/30
  • 自作CPUのリグレッションテストをGitHub Actionsで行うための手法の調査 - FPGA開発日記

    自作CPUのリグレッションテストやCIをGitHub上で行いたくて、いくつか手法を調査している。 1つの手法としては、Dockerfileを使ってリグレッション環境を構築する。Dockerイメージ上にRISC-VツールチェインとVerilatorをインストールしておく。これをDockerHubに登録しておいた。 以下がDockefileの一部。VerilatorとRISC-Vツールチェインをインストールしている。 FROM ubuntu:22.04 RUN apt update ## ... 途中省略 ... # ------------------ # Install Verilator # ------------------ RUN curl -L https://github.com/verilator/verilator/archive/refs/tags/v4.228.tar.

    自作CPUのリグレッションテストをGitHub Actionsで行うための手法の調査 - FPGA開発日記
    peketamin
    peketamin 2022/11/06
  • 「RISC-V+LLVM本 付録2. 浮動小数点命令」を無償公開しました - FPGA開発日記

    「作って学ぶコンピュータアーキテクチャ」では、執筆時点ですでに500ページを超えてしまい、泣く泣く2章分を削除しています。 1つ目の付録である「付録1. 関数呼び出しのバリエーションと高度な機能」についてはすでに公開済みですが、もう一つの「付録2. 浮動小数点命令」についても公開しました。 こちらは、LLVMに浮動小数点命令を追加し、いくつかのアプリケーションを動かそうというものです。 github.com この章は、当は基的な演算や機能の実装後に挿入したかった章で、以下の範囲をカバーしています。 この章は割と頑張ったもので、浮動小数点の説明から、実装、さらにアプリケーションを2つ実装しています。 後半のレイトレーシングはかなり頑張った部分で、最後に画像が正しく出力されたときは若干感動しました。 こちらも、担当編集の方の校正が入っていないので怪しい文章やもしかしたら誤った情報が入ってい

    「RISC-V+LLVM本 付録2. 浮動小数点命令」を無償公開しました - FPGA開発日記
    peketamin
    peketamin 2022/07/11
  • オープンソースの浮動小数点演算器FPNewの調査 - FPGA開発日記

    前回、浮動小数点演算器のHardFloatを調査したが、そのままのデザインだとパイプラインレジスタが入っていないし、Rocket-Chip側のパイプライン形式のFPUを使うのも面倒なので、昔論文で読んだことのあったFPNewを使うとどんな感じだろうということでやってみた。 FPNewの論文は以下からアクセスできる。 arxiv.org なるほど、PULPのプロジェクトの一つなのか。 github.com これをそのままとりあえず自作RISC-Vプロジェクトに組み込んで、Verilatorを使ってコンパイルしてみることにした。 %Error-BLKANDNBLK: ../src/fpnew/src/fpnew_fma.sv:106:59: Unsupported: Blocked and non-blocking assignments to same variable: 'fpnew_32

    オープンソースの浮動小数点演算器FPNewの調査 - FPGA開発日記
    peketamin
    peketamin 2021/08/10
  • フルスクラッチから作って理解するQEMU (Rust編) - FPGA開発日記

    モチベーション なぜRustを選んだか? 私はQEMUは「アーキテクチャエミュレーション界のLLVM」だと思っている QEMUが高速な理由:TCG Binary Translation ゲスト命令(RISC-V) → TCGホスト命令(x86)の処理をRustで作ろう RISC-Vの命令をフェッチしてデコードする RISC-Vの命令をTCGに変換する TCGをx86に変換する 実装結果 Binary Translation実行を高速化するための様々なテクニック BasicBlock分まで複数命令をまとめて変換 TCG Block Chainingの実装 評価結果 TB Lookup and Jumpの実装 評価結果 まだ完成していないところ 一部の最適化はまだ未実装となっている ゲストアーキテクチャがx86のみとなっている。TCGによる複数プラットフォーム対応として、まずは環境のそろ

    フルスクラッチから作って理解するQEMU (Rust編) - FPGA開発日記
    peketamin
    peketamin 2020/12/29
  • Rustの並列処理についての勉強 - FPGA開発日記

    Rustで作る命令セットシミュレータの続き、どうも高速化のためには並列処理について勉強する必要が生じてきた気がするので、Rustで並列処理を実現するための方法について勉強している。 実現したいこととしては: メインスレッドでエミュレーションが実行され、MemoryMap中のメモリが更新される サブスレッドでメインスレッドを監視し、MemoryMapの特定のアドレスがある値に変更されるとそれを検出し当該処理を行う というものなのだが、これをやっているうちにかなり泥沼に迷い込んでしまった。まず、MemoryMapをスレッド間で共有することができなかった。MemoryMapは実体がmut *u8なのか?これをスレッド間で安全に共有することができない、という訳か。 そこで少しずつ実装を簡単にしていき、どこまで持って行けばスレッド間で情報を共有できるのかいろいろ調査した。最終的にArcとMutex

    Rustの並列処理についての勉強 - FPGA開発日記
    peketamin
    peketamin 2020/12/15
  • 歳を取ったエンジニアとして腕力のある若手にどうやって立ち向かおうか考えた - FPGA開発日記

    この記事はFPGA開発日記の祝2,000記事到達の記念に書いているものです。 普段の記事と比べて非常にエモい内容となっております。 FPGA開発日記を始めたのが2015年の1月4日。それからおよそ5年と10か月で2,000記事に到達した。 計算してみると2,115日での2,000記事達成となっていた。我ながらよく頑張った。 ブログを書き始めてもう5年以上経った。5年も経てば周りの状況も変わるし、生活環境も変わる。 私も歳を取り、決して若いとは言えない年齢になった。昔のように徹夜で勉強とか実装はできなくなったし、肩は凝るし集中力は続かない。夜になるとすごく眠たくなる。仕事が終わったらすぐ眠たくなってしまい、趣味やブログを執筆する時間を取るのがとても難しくなってきた。 私が年を取れば取るほど、若い実装力のある、優秀な人たちが参入してきて、私の何倍ものスピードで成果を出していく。 私が持っている

    歳を取ったエンジニアとして腕力のある若手にどうやって立ち向かおうか考えた - FPGA開発日記
    peketamin
    peketamin 2020/10/18
  • 半導体業界における「IP」とは何なのかを説明したい - FPGA開発日記

    RISC-V」という言葉が徐々にエンジニア界隈に普及し始め、技術界隈のニュースサイトだけでなく、一般的なニュースを扱うような新聞社の記事でも見かけるようになってきました。例えば以下のような記事です。 www.nikkei.com 半導体エンジニアではない人がこのような記事を書く場合、「設計IP」について正しい知識を持っておかないと、少しおかしなことになってしまいます。しかしこれは記事を書いている記者だけを責めることは出来ません。半導体設計業界はソフトウェア開発業界に比べて小さな業界で、プレーヤの数も少なく、ネット上にあまり情報も出てきません。時事ネタを速攻で記事に起こさないといけない新聞記者が「IPってなんだっけ?」「リスクファイブってなんぞや?」ということをいちいち厳密に調べてられない、ということも理解できます。 そこで、非エンジニア(というか非半導体産業の方)でも理解できるように、R

    半導体業界における「IP」とは何なのかを説明したい - FPGA開発日記
    peketamin
    peketamin 2020/10/04
  • LLVMの新しい中間言語表現 MLIRを試す(4. MLIRに関する発表資料を読む) - FPGA開発日記

    MLIRについてもう少し具体的な例を勉強するために、資料を読み込んでいくことにした。前回の続き。 以下の資料を参考にした。Chris Lattnerの所属がSiFiveに変わっているので、比較的最近の資料だ。 docs.google.com MLIR Infrastructureについて この"Batteries Included"というのは、自分自身がオペレーションを定義することができる、ということだと思う。 Op definitionの例ということで、TensorFlowのLeakyReluの例が出てくる。 TableGenによって定義されるDSLなのだが、まずはTF_LeakyReluOpは"TensorFlowの単項演算子である"という定義がなされている。プロパティの設定(パラメータの設定のようなもの:NoSideEffects)が行われている。Opの定義はSameValueTyp

    LLVMの新しい中間言語表現 MLIRを試す(4. MLIRに関する発表資料を読む) - FPGA開発日記
    peketamin
    peketamin 2020/07/21
  • CQ出版のインターフェース6月号に「Rustで作る命令セット・シミュレータ」を寄稿しました - FPGA開発日記

    インターフェースを毎号買って読んでいる方なら「おいおいこの話は先月号に載せるべき話じゃないのかい?」と言うことに気が付くと思います。私もそう思います。が、どうやら編集担当さんによりページ数のミスが発生した模様(当かどうかは知りませんが)で、なぜか私の記事が吹っ飛ばされて次号に掲載となりましたとさ。なんじゃそりゃ。 CQ出版さんの雑誌インターフェースの6月号「Rustで作る命令セット・シミュレータ」として原稿を寄稿させて頂きました。ちなみに6月号はどんな特集の内容なのか私も把握していないので、どういう話の流れでRustの特集が挿入されるのか全く知りません。たぶん単発記事として前後に関係なく載るのでしょう。 正直私はRustについてまだまだ初心者で、とても原稿を書けるような技術力の持ち主ではないのですが、C++をメインに使っている人間がRustに移行するために色々と試行錯誤した話だととらえて

    CQ出版のインターフェース6月号に「Rustで作る命令セット・シミュレータ」を寄稿しました - FPGA開発日記
    peketamin
    peketamin 2020/04/26
  • 本当に私の人生を変えた技術書10選 - FPGA開発日記

    年末ですね。年末に技術っぽいことを書いても誰も見ていないので、どうでもいいことを書こうと思います。 皆さん技術書は好きですか?好きですよね。読みもしないのに技術書典なんかに大挙して押しかけて、結局積読が増えていく。積んでいるとなんか落ち着くのかもしれません。 私は現在ハードウェア関連の技術者として働いているわけですが、短い人生の中で読んだ技術書の中で、当に私の人生を変えてしまった技術書を思い出しながら紹介してみたいと思います。 あらかじめ断っておきますが、「名著」や「良い」を紹介するのではなく、あくまでも私の人生を変えたです。逆にいうと、あまり名著は出てきません。名著の紹介はすでにいろんなところでやられているので、そちらを見ていただければ。 1. 図解で分かるPCアーキテクチャのすべて(初版) 〈最新〉図解でわかる PCアーキテクチャのすべて 作者:小泉 修出版社/メーカー: 日

    本当に私の人生を変えた技術書10選 - FPGA開発日記
    peketamin
    peketamin 2019/12/28
  • Chiselでtypedef(のようなもの)を実現する方法 - FPGA開発日記

    ハードウェア記述言語ChiselはScalaをベースにした言語であり、Scalaの言語単位をベースにして設計してある。 それでは、ハードウェアの配線や変数を表すためにどのような型が用意してあるかというと、例えば、以下のような型が用意されている。 UInt : 任意の幅を定義できる符号なしの整数を格納するための型 SInt : 任意の幅を定義できる符号ありの整数を格納するための型 Bool : 1ビットのTrue/Falseを格納するための型 例えば、配線とレジスタを定義するためには以下のようにして宣言する。WireやRegというクラスに型の情報を与え、実体化させるという訳だ。 val w_a = Wire(UInt(32.W)) val r_a = Reg(Bool()) ところで、Chiselの型の中で主に使うのは上記の3つくらいしかない。しかし、System Verilogにはtype

    Chiselでtypedef(のようなもの)を実現する方法 - FPGA開発日記
    peketamin
    peketamin 2019/09/14
  • これからの時代、少量カスタムで大量種類のチップを設計する方法とは (UCBの論文を読む) - FPGA開発日記

    UCB(University of California, Berkeley)の論文を教えてもらい、読んでみることにした(実際には大量にGoogle翻訳した)。 この論文は"Generating the Next Wave of Custom Silicon"という論文である。 著者から分かる通り、RISC-VとChiselの思いっきり関係者である。 Generating the Next Wave of Custom Silicon Borivoje Nikolić, Elad Alon, Krste Asanović, Electrical Engineering and Computer Sciences, University of California, Berkeley, CA, USA https://ieeexplore.ieee.org/xpl/mostRecentIss

    これからの時代、少量カスタムで大量種類のチップを設計する方法とは (UCBの論文を読む) - FPGA開発日記
    peketamin
    peketamin 2019/06/04
  • Intel CPUの脆弱性"ZombieLoad"の論文を読んでみる - FPGA開発日記

    Intelがまた出した。Meltdown / Spectre系のCPUの脆弱性として新たに発表された"ZombieLoad"である。 これもまた論文が発表されている。これらの論文は、最新のCPU技術を勉強するにあたって非常に有用なものだ。ZombieLoadの論文を読んで、どのような脆弱性であるのかを読み解いていくことにした。 参考にしたのは、"ZombieLoad: Cross-Privilege-Boundary Data Sampling" という論文だ。以下からダウンロードできる。 arxiv.org すべてを理解できたわけではないが、ZombieLoadの質は、Intel CPUのハードウェア的なバグであるというところであると言える。アーキテクチャ上のバグではないため、AMD、Armでは現れない。Intelの実装が単純に問題だった、ということになりそうだ。 そもそもMeltd

    Intel CPUの脆弱性"ZombieLoad"の論文を読んでみる - FPGA開発日記
    peketamin
    peketamin 2019/05/19
  • 毎日技術ブログを書いていたら、権威のある国際学会(の併設ワークショップ)で講演することになった話 - FPGA開発日記

    年末なので技術以外のことも日記に書きたいと思います。1年に1回くらいは、エモい記事を書いてもいいでしょう。 まあ今年のまとめみたいな記事です。 今年も飽きもせずほぼ毎日技術ブログを書いていました。今見たら今年の投稿数は340件に近いので、まあほとんど毎日といってもいいと思います。 書いているテーマは多岐に渡っている、と自分では思っていますが、結局ほとんどの内容はコンピュータアーキテクチャの話だったり、RISC-Vの話だったり、あとは量子コンピュータも少しハマりました。 そんな感じでハードウェアばっかり触っています。 「FPGA開発日記」のはずなんですが、業務も含めプライベートでもFPGAはあまり触っておらず、もっぱらソフトウェア作って遊んでいるか、ハードウェア作ってもVivadoで論理合成して終わっているか、シミュレーションして終わりです。 全然FPGA関係ありませんね。 ブログを始めるき

    毎日技術ブログを書いていたら、権威のある国際学会(の併設ワークショップ)で講演することになった話 - FPGA開発日記
    peketamin
    peketamin 2018/12/20
    すげえええ
  • 2018年のRISC-V関係の(私の)講演資料をすべて公開しました - FPGA開発日記

    ずいぶんとアップロードするのを忘れていましたが、今年の予定しているRISC-V関係の講演はすべてやり切ったので、発表資料をすべて公開したいと思います。 今年は4件講演しました。秋頃から集中したのでずいぶんと息切れしました。 特にDesign Solution Forumは40分、ET & IoT Techonolgyのテクニカルセッションは90分なのでかなりきつい。 あとは、RISC-V Day WorkshopでMICRO51の会場で発表できたのは個人的にうれしかった。 RISC-V Day Workshopの資料はriscv.orgに載るはずなんですが、未だにアップロードされていないので私の資料は勝手に公開します。 RISC-V FoundationのAsia支部、どうなってんの? 2018年09月12日 Design Solution Forum 2018 RISC-V Day To

    2018年のRISC-V関係の(私の)講演資料をすべて公開しました - FPGA開発日記
    peketamin
    peketamin 2018/11/16
  • PortSmashで学ぶ高性能プロセッサの同時マルチスレッディング - FPGA開発日記

    CPUの脆弱性として新たに報告された "PortSmash" 、どういう脆弱性なのかを調べるために論文を探すと公開されていた。 Port Contention for Fun and Profit https://eprint.iacr.org/2018/1060.pdf "Port Contention for Fun and Profit" という論文として公開されている。 どうでもいいけれども、"Fun and Profit" (趣味と実益)っていう名前がついているのは謎である。 読み進めていくと、結構理屈としては分かりやすい攻撃手法だということが分かった。 ちなみにこのPortという言葉は、SSHなどのポートのことではない。 現代のアウトオブオーダのプロセッサには、命令の種類に応じて実行されるユニットが分けられている。 例えば算術演算命令ならばALUユニット、メモリアクセス命令だっ

    PortSmashで学ぶ高性能プロセッサの同時マルチスレッディング - FPGA開発日記
    peketamin
    peketamin 2018/11/10
  • APSで連載しているRISC-V入門全8回がすべて公開されました - FPGA開発日記

    今年の初めくらいからAPSさんにRISC-Vの記事を寄稿していたのですが、全8回分が今回すべて公開されました。 www.aps-web.jp APSさんでの連載はこれにて終了になります。 今年の2月から1か月に1ずつ、合計8回分投稿させていただきました。 もともと入門者向けということであまりハードウェアの細かいところには触れず、使い方の部分に軽く触れるように説明しました。 あまり詳細なところには触れることはできませんでしたが、RISC-Vを始めたい人のイントロダクションにできればと思います。 www.aps-web.jp www.aps-web.jp www.aps-web.jp www.aps-web.jp www.aps-web.jp www.aps-web.jp www.aps-web.jp www.aps-web.jp

    APSで連載しているRISC-V入門全8回がすべて公開されました - FPGA開発日記
    peketamin
    peketamin 2018/10/18
  • 128bitまで対応したRISC-VエミュレータでLinuxが動く (しかも超高速) - FPGA開発日記

    ダウンロードとビルド riscvemuを動作させる riscvemuの実行方法 risvemuを利用したSimple Linuxの起動 Fedoraのディスクイメージでの起動 シレっとRISC-Vメーリングリストに投稿されたこれ、QEMUの開発者でもあるFabrice BellardがRISC-Vの128bitモードまで対応したエミュレータを開発したという話だ。 RISCVEMU groups.google.com ダウンロードとビルド ダウンロードしてみるとソースコードの量も少なく非常にシンプル、こんなのでRISC-Vをサポートしてしまうのか。 makeを一発叩くだけでビルドできるのだが、私の環境の場合ではfreadのエラーを回避するためにオプションを若干変更する必要があった。 gcc -O2 -Wall -g -Werror -D_FILE_OFFSET_BITS=64 -D_LARG

    128bitまで対応したRISC-VエミュレータでLinuxが動く (しかも超高速) - FPGA開発日記
    peketamin
    peketamin 2018/08/06
  • Microsoftのデータフロープロセッサ EDGEの論文を読む - FPGA開発日記

    Twitterで知った、MicrosoftFPGA向けのインオーダスカラプロセッサの論文が出ている。ターゲットとしてはデータフロー処理だ。 プロセッサの名前としてはEDGEという。ブラウザのEdgeではなくて、Explicit Data Graph Executionの略称である。 面白そうなので、読んでみることにした。 Now Microsoft ports Windows 10, Linux to homegrown CPU design • The Register Towards an Area-Efficient Implementation of a High ILP EDGE Soft Processor https://arxiv.org/pdf/1803.06617.pdf EDGEの考え方 EDGEの考え方は、複雑なアウトオブオーダのプロセッサを設計するのではなく、な

    Microsoftのデータフロープロセッサ EDGEの論文を読む - FPGA開発日記
    peketamin
    peketamin 2018/06/25