FPGA開発日記

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

2016-02-01から1ヶ月間の記事一覧

Ubuntu on ZedBoardにTensorFlowをインストールして夢を見たい(と思い奮闘中)

Ubuntu on ZedBoard、コンソールが出るところまで到達し、とても感動している。さて、コンソールが出たら今度は何をやろう(ちゃんとGUIを立ち上げろ、というところではあるが)。 という訳で、最近流行りのTensorFlowだって、Ubuntuが動作しているんだからイ…

1FPGAに400コアのRISC-Vプロセッサを実装するプロジェクト"GRVI Phalanx"

RISC-V界隈の調査をしていたところ、なかなか面白い文献を発見した。 3rd RISC-V Workshopにて発表されたものだが、なんでもFPGA上に400個ものRISC-Vプロセッサを実装し、動作させたようだ。 その意味や、何に使うの?というのはともかく、実装面の挑戦とし…

ZedBoard向けUbuntu Linuxのビルド(GUI付きで立ち上げるための調査)

前回の記事で修正。U-Bootのビルドについて、以下のサイトを参考にする必要がある。どうやらブートアドレスなどの仕組みが変わっているらしい? qiita.com zynq_common.hなどの修正はこれを参考にすること。それ以外は、これまでやってきたことで問題ない。 …

ZedBoard向けUbuntu Linuxのビルド(U-bootのビルド)

前回に引き続き、今回はU-bootのビルドにトライした。 1. ZedBoard向けU-bootのビルドにトライ U-Bootのビルドも、marseeさんのブログとほぼ同一の内容で成功した。 ブランチをxilinx-v2015.2に変更するだけで、それ以外はほぼ変えるところが無い。 FPGAの部…

ZedBoard向けUbuntu Linuxのビルド(VivadoによるPLの作成)

ZedBoardを使ってARM上でUbuntu Linuxを動作させたい。数年前に FPGAの部屋のmarseeさんによって既に実現されているのだが、同じ過程を辿ろうとすると、当該記事ではPlatform BuilderとPlanAheadが使われており、現在のVivadoの環境では使えないことが分かっ…

TensorFlow Serving実行環境をVagrantで構築する(Pythonのバージョンで引っ掛かる部分)

前回のTensorFlow ServingをVagrantで自動的に構築する話、もう一度自分でやってみると、いろんな部分で動作しない部分があった。bazelとか、grpcとかのバージョンはいろいろ注意深くやらなければならない。 特にPythonのバージョンで引掛った。Ubuntuのバー…

機械学習初心者がGoogleのディープラーニング入門講座を受講した感想(まだChapter-1しか見てないけど)

仕事で機械学習の知識を生かせるかというと全然そんなことはなく、最早趣味の領域で勉強している機械学習だが、Googleがまた粋なサービスを公開したようだ。 googledevjp.blogspot.jp それこそ去年の暮れに勉強を始めたばかりだし、趣味の領域でまだまだ初学…

TensorFlow Servingのチュートリアルを翻訳してMNISTにトライ

TensorFlow Serving、思ったより騒がれてませんね(笑)まあ、API群というか、機械学習本体ではなく、その外部の話なので、ちょっと話題性は低いのかもしれない。 とはいえ、TensorFlow Servingを使ったチュートリアルもしっかり公開されている。今回は、そ…

ノートPCスタンドが欲しかったけどブックスタンドで十分だったわ、という話

珍しく技術系以外の話だけれども、僕は仕事用のノートPCと、家のプライベートのデスクトップPCを使っている。 で、こじんまりと生活するのが大好きな僕は机もちょっと狭く、ちょっと窮屈な生活をしているのだが、ノートPCって結構な場所を消費する。 キーボ…

ブログを始めてから400記事に到達

ブログを始めたのは去年の1月4日なのだが、それから一年と二ヶ月で400記事に到達した。おおよそ一日に一本のペースで推移させることが出来ている。 最近(というか去年も)はずっと実装の方針についてブログに書いていたりしているが、もうちょっと調査した内…

RISC-Vにおける32ビットモードと64ビットモードの違い

RISC-Vには、32ビットと64ビットの実装が定義されている(ちなみに128ビットもある)が、それぞれにおいて実装の違いが存在する。 それにより、ISSの挙動も変わるし、ちょっとした違いというか、ビット長が異なることにより様々な取扱も変わってくる。そのあた…

cocotbでテストパタンを記述する(どんな記述ができる?)

前回に引き続き、cocotbによりテストパタンを書いている。 AXIの挙動を真似るのは大変だ。でも、このあたりがうまく攻略できるようになると、例えばISSにPythonのIFを供えれば、ISSとの協調シミュレーションも可能になるのではないか。 あとは、なるべくラン…

cocotbでAXIインタフェースのチェックパタンを書こう

久し振りにVerilogで回路を書き始めている。ユニットずつ実装をしているのだが、まずはAXI経由でメモリにアクセスする回路を書かなければ。 その際、バッファが溢れないようにAXIインタフェースをちゃんと制御できるか、ちゃんと設計結果を検証することは、…

CMakeでVerilogシミュレーション環境を構築する

Verilogで久し振りに回路設計をしているのだが、ビルドの標準環境としてCMakeを使いたい。 CMakeでVerilogを構築する手法については、以下の日記でトライしてみた。これを今度は実用してみよう。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com 1. Vi…

TensorFlow Servingが公開されたのでVagrantで環境の自動構築に挑戦

毎度のネタである。最近はCNTKばかりやっていたのだが、TensorFlowにも新しい話題が上がってきた。TensorFlowを使うためのフレームワーク、というかTensorFlowを内包するアプリケーションを開発するためのフレームワークが公開されたようだ。その名をTensorF…

RISC-VのISSを修正してテストパタンが通るように調整

RISC-VのISSのメンテナンスを継続している。前回から殆ど調整していなかったが、RISC-VのテストパタンをパスできるようにISSを調整していこう。 github.com github.com ISSの実装を進めていった結果、Failになっているパタンは以下となった。 The following …

Microsoftの機械学習ツールキットCNTKの実行結果をVisual Profilerで解析する

前回、CNTKをGPGPUで動作させることに成功した。今回は、標準的なMNISTを使って、どのようにしてGPGPUが呼ばれているのかを解析していこう。 利用したのは、NVIDIAのプロファイラであるVisual Profilerだ。このツールはGPGPUでどのような関数がどれくらいの…

Microsoftの機械学習ツールキットCNTKをGPGPUで実行してその威力を知る(Windows編)

前回の記事でCNTKをWindowsに無事にインストールできたので、早速GPGPUで実行してどれくらい加速されるのか確かめてみよう。 CNTKの威力は、GPGPUで実行されたときのその速度にある。それを確認するためには、関数のプロファイリングとかを取ってみたいとこ…

Microsoftの機械学習ツールキットCNTKをGPGPU付きでインストールする(Windows編)

やはりCNTKは、GPGPU付きで使いたい。そのためには、今までのようにVagrantの上で動作するLinuxで動かすより、Windows上で動作させる方が良いだろう。 Windows上にCNTKの環境をセットアップする方法について探っていこう。 1. Windows上にCNTKをインストール…

ISSにシステムレジスタ読み書きの機能を実装する

ISS

MIPSのシステムレジスタ読み書きの機能を実装する xv6のデバッグをしていて、何か動作がおかしいなと思っていたら、システムレジスタを定義していたものの、読み書きの動作を定義していなかった! そりゃ、うまくいかない。 github.com とりあえず、システム…

xv6のプロセス切り替えの仕組みと最初のプロセス生成

xv6

xv6のプロセス切り替えの仕組み xv6をMIPSに移植しながら、プロセス切り替えの仕組みを確認しているんだけれども、ISSの機能が実装できてなさ過ぎて泣けてくる。 xv6が最初に立ち上がったとき、処理はmpmain()へと移り、それからスケジューラに移動する。基…

ISSにウォッチポイント機能を実装する

デバッグを効率的に進めるためには、ウォッチポイントの実装が不可欠だ。GDBでは、以下のウォッチポイントが実装されているようだ。 watch : 特定のメモリアドレスに対して書き込みが発生すると停止する rwatch : 特定のメモリアドレスに対して読み込みが発…

高速検索ツールHighwayを導入してみる

いままで文字列検索ツールといえばgrep、grepは古いといえばag、だったが、それよりも高速なhighwayというツールがあるらしい。 どれくらい速いのだろう?早速導入してみよう。 github.com highway という高速検索ツールを作りました · けんごのお屋敷 マル…

GDBとISSを利用しながらプロセスがSwitchされる挙動を追い掛けていく

xv6

プロセスが開始される前に、xv6ではinitlog()が起動し、ログをディスクに書き込むための準備が行われる。 msyksphinz.hatenablog.com msyksphinz.hatenablog.com proc.c if (first) { // Some initialization functions must be run in the context // of a …

xv6の割り込みに必要な機能を実装する

xv6

xv6のデバッグを進めるためにGDBの整備は進んだのだが、ディスクアクセスなどの機能がまだサポートできていない。 また、重要な問題として、割り込みの機能を実装ができていないのだ。ディスクアクセスについて、ディスクからの読み込みが完了すると割り込み…

CNTK Tutorialの計算ネットワークの仕組みを読み解く (2.1 - 2.2章)

最近仕事が忙しく徹夜続きになってしまっている。あまり趣味の実装が続かないのだが、とりあえず勉強のために読んでいる資料を読み解いていこう。 http://research.microsoft.com/pubs/226641/CNTKBook-20160121.pdf この資料には、CNTKの使い方はもちろん、…

ISSとGDBを接続してxv6をデバッグ

GCC

前回、GDBの挙動を確認したので、ISSの実装に移っていこう。 ブレークポイントを設定する際、PCの位置としては、 ブレークポイントを設定した位置で停止する ただし当該命令は実行されていない という位置で止まるのだった。これを実現すれば良い。 msyksphi…

CNTKを使って関数のフィッティングに挑戦(NDLを使ってネットワーク構築に挑戦)

以下のやってみた日記は、機械学習初心者が書いているため、間違っている内容が含まれている可能性があります。 間違いがあれば、ご指摘頂ければうれしいです。 前回、CNTKを使って、シンプルなネットワークを構築して関数のフィッティングに挑戦した。 その…

CNTKを使って関数フィッティングに挑戦(CNTKの構造を理解する)

以下のやってみた日記は、機械学習初心者が書いているため、間違っている内容が含まれている可能性があります。 間違いがあれば、ご指摘頂ければうれしいです。 CNTKのリファレンスとして、チュートリアルをたくさんやってきたが、まだCNTKを理解できている…

ISSとGDBを接続してxv6をデバッグ(x86のGDBで挙動確認)

GCC

今日は月曜日から飲み会になってしまい、進捗が少ない。。。 msyksphinz.hatenablog.com GDBの動きは結局どうなっているんだろうね?命令の実行前で止まるのか、そしてそのときのPCはどこを差しているのか? まあ、あれこれ文献調べるよりも、実際に試してみ…