FPGA開発日記

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

(大昔の)ThinkPad にRISC-V実験環境を構築したが、HiFive1の調子がおかしい(続き)

HiFive1の試行を引き続き行っているが、たぶんこれ誰も大規模なプログラム流したことないのかな、というのが分かってきた(気がする)。 一枚目のボードを壊してしまったぽいのだが、2枚目のボードもちょっと大きめに配列を取ってコンパイル後、流したら不正終…

(大昔の)ThinkPad にRISC-V実験環境を構築したが、HiFive1の調子がおかしい

前の記事の続き。無事にThinkPad に HiFive1の環境を構築したのだが、やはりSPI経由でプログラムを書き込もうとすると書き込めない。 いろいろSiFiveのフォーラムを見ながら試行錯誤しているのだが、どうもまだ解決策が見つからない。これは最悪もう一枚HiFi…

(大昔の)ThinkPad にRISC-V実験環境を構築する

HiFive1のボードを実験するのに、これまではWindows上のVirtualBoxにUbuntuをインストールし、その上でデバイスと接続していたのだが、時々調子が悪くなる。 解析するのも面倒なので、大昔のノートPC(ThinkPad X301)を取り出してUbuntuをインストールし、HiF…

ヘネパタ第6版はRISC-Vで全面刷新?

Amazonで調べていたら、どうやら次のヘネパタが発売されるのを発見した。 Computer Architecture, Sixth Edition: A Quantitative Approach (The Morgan Kaufmann Series in Computer Architecture and Design)作者: John L. Hennessy,David A. Patterson出…

VivadoでIPを生成する方法の調査(tclを使った生成方法)

Zynqを使ったカスタムデザインのIPが作りたくて、IPの生成方法をいろいろ調査しているのだが、どうもGUIを操作するものばかりでつまらない。 GUIの操作方法なんて一瞬で忘れてしまうので、tclとmakefileで一気に作れるような環境を用意しておきたい。 いろい…

RISC-VプロセッサHiFive1で機械学習コードを動作させる(1. コンパイル)

HiFive1ボードはRISC-Vが動作する(おそらく世界で唯一商用の?)プロセッサボードである。このHiFive1ボードの仕様は以下のようになっている。 Microcontroller: SiFive Freedom E310 (FE310) SiFive E31 Coreplex 32bit RV32IMAC (整数演算のみ、乗除算ハー…

HiFive1ボードの自作プログラムのアップロード方法

HiFive1ボードはRISC-Vが動作する(おそらく世界で唯一商用の?)プロセッサボードである。 このボードを使っていくつか試行してみたいことがあるのだが、久しぶりに立ち上げたので少しリハビリの意味も兼ねて整理しておく。 プログラムの開発には、SiFiveが公…

RocketChipの足回りを理解する(4. RISC-V FrontEnd Server)

ところで、RISC-V Rocket-Chipをシミュレーションするとき、何気なくmakeを叩いて、 make CONFIG=DefaultConfig output/rv64ui-p-add.out とかして、勝手に実行されているけど、よく考えると具体的にどのようにして動作しているのか分からない。これを理解す…

RocketChipの足回りを理解する(3. BootROM)

RocketChipのリセットが解除されると、まずはBootROMへのフェッチが始まる。 BootROMは、TestDriver/TestHarness/ExampleRocketTop/bootromに格納されている。 まずはこの周辺の波形を見てみよう。最初にBootROMにアクセスするのは、0x00010040 がアクセスさ…

RocketChipの足回りを理解する(2. TileLinkについて)

RISC-V実装のRocket-Chipでは、足回りのインタフェースとしてTileLinkというインタフェースを使っている。ところがこれ、どれだけ検索しても詳細が出てこない。TileLinkとは何なのだろう? 資料については、以下のページぐらいしか出てこない。これを読み解…

RocketChipの足回りを理解する(1. RocketChipのVerilogを読み解く)

RISC-VのUCB実装であるRocketChipはRISC-Vのプロセッサ実装の中で最も参考になるもので、例えばSoCに組み込むとなると真っ先に導入を考えるRISC-V IPの一つだ。 RocketChipはデフォルトで64ビット命令をサポートしており、シンプルなパイプラインながら性能…

CNTK 2.0 のチュートリアル試行: CNTK 103 Recognize hand written digits (OCR) with MNIST data

CNTK 2.0のチュートリアルを試行する。 今回はある程度翻訳という形で実施してみた。だいぶ誤訳はあるだろうが、ザックリ概要をつかむという形でやっていきたい。 CNTK 103のチュートリアルは4編で構成されている。MNISTの数値認識のチュートリアルについて…

CNTK 2.0 のチュートリアル試行: CNTK 102 Feed Forward network with NumPy

CNTK 2.0のチュートリアルを試行する。 今回はある程度翻訳という形で実施してみた。だいぶ誤訳はあるだろうが、ザックリ概要をつかむという形でやっていきたい。 github.com 以降の文章については、CNTK 2.0の翻訳を含んでいるが、誤訳を含んでいる可能性が…

自作RISC-Vプロセッサでriscv-testsテストパタンセットを流す

RISC-Vにはriscv-testsというテストパタンセットが用意されており、これらを流すことによりRISC-Vのアーキテクチャとして正しく実装されているかどうかをチェックすることができるようになっている。 github.com 自作RISC-Vプロセッサにおいても、このパタン…

ランニング用ボトルポーチ「YURENIKUI」購入

夏だ!夜になっても暑い!マラソンには最も適さない季節、夏の到来だ! 正直東京オリンピックなんて夏に開催してマラソンなんてできるとは思えないし、真夜中でも熱帯夜なら全然温度が下がらない。もう東京オリンピックのマラソンなんて東京マラソンで肩代わ…

フルスクラッチから作るニューラルネットワーク(10. 性能解析, ARM, RISC-V)

前回、誤差逆伝搬法をlibfixmathライブラリを使って固定小数点化した。しかし逆に固定小数点化により性能が低下してしまっている。 やはりライブラリによるオーバヘッドではないだろうかということで、性能解析を行うことにした。 Google PerfによるPerforma…

フルスクラッチから作るニューラルネットワーク (9. 精度変更、libfixmathを用いた固定小数点化)

誤差逆伝搬法を実装してMNISTの学習と認識プログラムをC言語でフルスクラッチで作る、その続き。 固定小数点化については、他社の作ったライブラリを使うほうが良い気がして来たので、調査をしていると以下のライブラリを見つけた。MITの作った固定小数点ラ…

フルスクラッチから作るニューラルネットワーク (9. 精度変更、固定小数点化検討)

誤差逆伝搬法を実装してMNISTの学習と認識プログラムをC言語でフルスクラッチで作る。 動作するコードは完成し、今度はこれを固定小数点化しなければならない。今回は固定小数点化の検討を行う。 double –> float で精度を確認する。 まず、これまでに実装し…

フルスクラッチから作るニューラルネットワーク (8. 性能解析)

誤差逆伝搬法を実装してMNISTの学習と認識プログラムをC言語でフルスクラッチで作る、動作するコードは完成したのだが、最終的にはこれらのコードをマイコンで実行させたいし、もっと軽くしなければならない。 また現状の問題点として、C言語で書いたプログ…

「GPUを支える技術」を購入

面白そうな本が出版されたので購入した。「GPUを支える技術」だ。 GPUを支える技術 ――超並列ハードウェアの快進撃[技術基礎] (WEB+DB PRESS plus)作者: Hisa Ando出版社/メーカー: 技術評論社発売日: 2017/06/30メディア: 単行本(ソフトカバー)この商品を…

RISC-V シミュレータツールチェイン rv8

こういうツールチェインが作りたいんだよなあ。見た目にも非常にきれいな、RISC-Vシミュレータツールセットだ。RISC-V命令セットからx86/64へのバイナリトランスレーション(JIT)もサポートしている。 RISC-Vのほしいツールチェイン群はすべて揃っているんじ…

フルスクラッチから作るニューラルネットワーク(7. MNIST誤差逆伝搬法の実装)

msyksphinz.hatenablog.com 誤差逆伝搬法をC言語で実装していたのだが、Pythonの結果とどうしても合わない部分がある。それどころが、学習を続けていくとどんどん正解率が下がっていったのでデバッグをしていた。 ニューラルネットワークの難しいところは、…

フルスクラッチからC言語で作るニューラルネットワーク (6. MNIST 誤差逆伝搬法の実装)

前回まででデータ処理部のバッチ処理化まで完了したので、学習のための誤差逆伝搬法をC言語で実装する。 今回も、Pythonでの実装を参考にしながら、逐次データを抽出して、計算結果を合わせ込んで実装していく。 まずは、各処理についてどのような行列演算が…

ニューラルネットワーク C言語での実装 (5. バッチサイズの導入)

ニューラルネットワークを1からC言語で記述してMNISTを動作させるプロジェクト、次はバッチサイズを導入して一度に複数の画像を処理できるように拡張する。 バッチサイズを導入する前、つまり機能の時点でのネットワークの構成は、以下のようになっていた。…

ニューラルネットワーク C/C++の実装 (4. Python環境からパラメータを引っ張ってくる)

ニューラルネットワークを1からC/C++で記述してMNISTを動作させてみる話、実装のどこが間違っているのか分からないので、Pythonの実装で重み部分を抽出し、パラメータをそのまま当てはめて検算していく。 前回Pythonからパラメータを抽出するプログラムは抽…

CARRV 2017: Computer Architecture Research with RISC-V

First Workshop on Computer Architecture Research with RISC-V (CARRV 2017) RISC-Vのワークショップはこれまでにいくつも開催されており、最近の開催ではちょうど5月に開催された、6th RISC-V Workshop in 上海だった。 これまでのRISC-Vワークショップは…

ニューラルネットワーク C/C++実装の検討(3. 学習済みデータでのネットワーク確認)

ニューラルネットワークを1からC/C++で記述してMNISTを実行してみるプロジェクト、なかなかうまく行かない。 学習のフェーズはとりあえず置いておいて、学習済みのパラメータを使ってネットワークに初期値を入力し、どのように計算されるかチェックしている…

Interface8月号購入

先月号はスキップしたけど、今月号は買ってしまった。 Raspberry-Pi3は持っているので、試してみなければ。 Interface(インターフェース) 2017年 08 月号出版社/メーカー: CQ出版発売日: 2017/06/24メディア: 雑誌この商品を含むブログを見る

DAC(Design Automation Conference) のRISC-V発表資料

DAC(Design Automation Conference)で、RISC-Vの発表が行われたようだ。MLで発表資料が流れてきている。 VectorBloxというカナダの組み込みプロセッサの会社の発表だ。 DAC presentation slides (survey results on RISC V implementations) Google グループ…

ニューラルネットワーク C/C++ 実装の検討 (2. MNISTのロード)

MNISTのデータは一般に誰でも手に入れることができる。 TensorFlowやCNTK, 「ゼロから作るディープラーニング」の書籍などでは、インターネットからMNISTのデータを直接ロードしてくる手法が用意されており、初心者でも簡単にMNISTを試すことができるような…

ニューラルネットワーク C/C++実装の検討 1.

前回までで、「機械学習と深層学習」をやり切ったのだが、これを使っていろんなことをやってみたい。 機械学習と深層学習 ―C言語によるシミュレーション―作者: 小高知宏出版社/メーカー: オーム社発売日: 2016/05/21メディア: 単行本(ソフトカバー)この商…

「深層学習と機械学習 《C言語によるシミュレーション》」を読了

ディープラーニングだけではない内容。 機械学習と深層学習 ―C言語によるシミュレーション―作者: 小高知宏出版社/メーカー: オーム社発売日: 2016/05/21メディア: 単行本(ソフトカバー)この商品を含むブログ (4件) を見る 「機械学習と深層学習」をとりあ…

「機械学習と深層学習」をやってみる(7. 深層学習: 畳み込みニューラルネットワーク)

「機械学習と深層学習」をやってみる。今回は第5章の深層学習のうち、畳み込みニューラルネットワークを実践してみる。 深層学習、いわゆるディープラーニングは、これまでのニューラルネットワークの階層をより深くしたものだが、以下の問題がある。 複雑な…

CNTK 2.0 のチュートリアル試行: CNTK 101 Logistic Regression and ML Primer

CNTK 2.0について勉強する。CNTKはTensorFlowと同様にチュートリアルが用意されており、これを進めていくことにしよう。 まずは、Logistic Regression(回帰分析)をCNTKのニューラルネットワークで構成し、回帰分析を学習してみる。 https://github.com/Micro…

「機械学習と深層学習」をやってみる(6. バックプロパゲーション)

「機械学習と深層学習」をやってみる。今回はニューラルネットワークにおけるバックプロパゲーションだ。 機械学習と深層学習 ―C言語によるシミュレーション―作者: 小高知宏出版社/メーカー: オーム社発売日: 2016/05/21メディア: 単行本(ソフトカバー)こ…

「機械学習と深層学習」をやってみる(5. ニューラルネットワーク)

「機械学習と深層学習」の書籍をやってみる。今回は第4章のニューラルネットワークの部分。ニューラルネットワーク自体はこれまでも勉強したので特に目新しいことはない。 目新しいことといえばC言語による実装くらいかなー。といっても配列を乗算しているだ…

「機械学習と深層学習」をやってみる(5. 進化的手法)

「機械学習と深層学習」の続きをやる。今回は3.2章の進化的手法、いわゆる遺伝的アルゴリズムというものだ。 機械学習と深層学習 ―C言語によるシミュレーション―作者: 小高知宏出版社/メーカー: オーム社発売日: 2016/05/21メディア: 単行本(ソフトカバー)…

Hybrid Memory Cubeのオープンソースコントローラ実装OpenHMC

www.nextplatform.com The Next Platformの記事、HMC(Hybrid Memory Cube)という言葉を久しぶりに聞いた。 japanese.engadget.com Hybrid Memory Cube(HMC)は次世代のメモリ規格であり、DDR3よりもより高性能、低消費電力を達成することのできる規格として立…

CNTK 2.0のBrainScriptを使用できるようにするための環境構築

CNTK 2.0のインストール方法は複数存在する。まず、一見簡単そうに見える、pipを使ったインストール、そして、スクリプトを使ってセットアップファイルをダウンロードしてインストールする方式だ。 pipを使ったインストール方法は簡単なのだが、Pythonインタ…

「機械学習と深層学習」をやってみる(4. 蟻コロニー最適化法)

「機械学習と深層学習」の書籍を引き続きやってみる。 機械学習と深層学習 ―C言語によるシミュレーション―作者: 小高知宏出版社/メーカー: オーム社発売日: 2016/05/21メディア: 単行本(ソフトカバー)この商品を含むブログ (4件) を見る 今回は3.1章の蟻コ…

「機械学習と深層学習」をやってみる(3. Q強化学習)

「機械学習と深層学習」の書籍を引き続きやってみる。今回は2.2節のQ強化学習をやってみた。 機械学習と深層学習 ―C言語によるシミュレーション―作者: 小高知宏出版社/メーカー: オーム社発売日: 2016/05/21メディア: 単行本(ソフトカバー)この商品を含む…

Microsoft CNTK 2.0のチュートリアル試行 (SimpleMNIST.py)

CNTK 2.0にも、フィードフォワードのMNISTのサンプルが乗っている。これを試行して、中身を可能な限り理解してみよう。 まず、MNISTのデータセットを取得する必要があるのだが、これは以下のチュートリアルに則る。 github.com cd Examples/Image/Classifica…

「機械学習と深層学習」をやってみる(2. 帰納学習)

機械学習と深層学習の書籍を読んでソースコードの実験をしてみる。第2章「機械学習の基礎」、2.1「帰納学習」について、ソースコードを見ながらトライした。 今回から、理解したことスライドにまとめてアップロードしていくことにした。 今回は帰納学習とい…

7th RISC-V Workshopは11/28-11/30でカリフォルニア開催です

RISC-V 6th workshopはNVIDIA@上海で無事に終了したが、さっそく次のWorkshopのアナウンスが出ている。次はWestern Digital@カリフォルニアミルピタス とのことだ。 開催日は2017/11/28 - 11/30 だ。 Western Digitalといえば日本の某フラッシュメモリメー…

VivadoでIPを生成するフローをスクリプト化する

Vivadoでは様々なIPを生成することが出来るが、それはIP GeneratorによってGUIで様々な操作を行う必要がある。 これは面倒なので、スクリプト化しておく。 github.com VivadoのIPは、まずIP用のプロジェクトを作成する必要があるため、スクリプトは以下のデ…

Microsoft CNTK 2.0のチュートリアル試行 (FeedForwardNet.py)

CNTKの使い方を勉強しているが、どうも上手く行かない。やはりユーザが少ないからか、きちんとフィードバックがかかっていない気がするな。 CNTK 2.0からはPythonインタフェースが利用できるようになった。Pythonインタフェースでは、TensorFlowと同様にネッ…

Microsoft CNTK 2.0がリリース (インストール試行)

TensorFlowばかりで余り目立っていないが、Microsoftの機械学習ツールキットのCNTKのv2.0がリリースされた。 CNTKって、Cognitive Toolkitの略称なのか。初めて知った気がする。 The Microsoft Cognitive Toolkit | Microsoft Docs CNTKが最初にリリースされ…

Raspberry-Pi3でTensorFlowをコンパイルして動作させるまで

以下を参考にする。 qiita.com Raspibianのインストール 以下から、NOOBSのフルインストーラ版をダウンロードした。 https://www.raspberrypi.org/downloads/noobs/ 以下のような画面が現れて、Raspberry-Pi3用のLinuxであるRaspbianのインストールが始まる…

Raspberry-Pi3のセットアップ (Android Things編)

こちらもRaspberry-Pi3。Android Thingsのセットアップをしておく。 https://developer.android.com/things/preview/download.html androidthings_rpi3_devpreview_3.zip を解凍すると、iot_rp3.imgが出てくるので、これをSDカードに書けばよいのか。 Androi…

Raspberry-Pi3のセットアップ (Windows IoT編)

ひょんなことからRaspberry-Pi3を購入したのでセットアップしたいと思う。 https://www.raspberrypi.org/downloads/ から、Windows 10 IoT Coreを選択した。 “Select Your Hardware” で “Raspberry Pi 3"を選択した。 その後現れる"Select your installation…