FPGA開発日記

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

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

CNTKのチュートリアル(MNIST)の読み解きに挑戦

またまたCNTKである。次に、どこでもかしこでも登場してくるMNISTの認識(手書き文字認識)のチュートリアルに挑戦してみよう。 (僕の思う)CNTKとTensorFlowにおけるネットワーク構成方法の違い TensorFlowでも、MNISTは最初のチュートリアルで登場してきた。…

ISSとGDBを接続してxv6をデバッグする環境を構築する

xv6

自作ISSに、GDBのインタフェースを追加したので、これを使ってxv6のデバッグを行いたい。何となくMIPSの移植は出来ているので、プロセスの切り替えとか、GDBで観察できれば、よりデバッグが容易になると思うんだ。 xv6のコードは、どなたかがMIPSに移植して…

CNTKのSimple2dに対して別のデータセットを与えて特徴を掴む(はずが謎が深まる)

仕事をしながら考えていたのだが、前回のSimple2dの問題は、0と1に分類するときに、どの程度の確率で0と1に分類されるかについて示されているんじゃないかと思った。 という訳で、もう一度データを見ながらリトライしてみよう。 注意: この記事は機械学習初…

CNTKのチュートリアル(Simple2d)の読み解きに挑戦

とりあえず前回までにCNTKのインストールは完了したので、サンプルを見ながら何が出来るのか、調査していこう。 msyksphinz.hatenablog.com 目次 目次 Simple2dをCNTKで実行する 何が起きているのか? Simple2dのサンプルで実行しているのは、CNNの構築 トレ…

Microsoftの機械学習ツールキットCMTKが公開されたので使ってみる(CPUオプションのみでインストール)

前回、CMTKを頑張ってソースコードからインストールしようとして、途中で大量のエラーが出て失敗してしまった。いったい何が駄目だったのだろう? msyksphinz.hatenablog.com 良く見てみると、僕の環境はUbuntu-12.10を使っていた。これが古すぎるのかもしれ…

Microsoftの機械学習ツールキットが公開されたので使ってみる(インストール)

TensorFlowに続いて、Microsoftの機械学習ツールキットもオープンソースとして公開された。最近は機械学習のツールを公開するのが流行っているのかね? ある意味では、自社の技術力を宣伝するのには良いのかもしれない。クローズに開発しても良いものではな…

Node.jsの本を買った。あと環境をVagrantとAnsibleで構築しようとしたらハマった

Node.jsの本を買った。最近JavaScriptとNode.jsが流行っているので、どんなものなのかを勉強するためだ。 JS+Node.jsによるWebクローラー/ネットエージェント開発テクニック作者: クジラ飛行机出版社/メーカー: ソシム発売日: 2015/08/31メディア: 単行本こ…

GDBリモートサーバを自作ISSに実装する(レジスタ、メモリ値取得とKillコマンド)

GCC

msyksphinz.hatenablog.com ブレークポイントとステップ実行が何となく動くようになったので、データの取得のためのレジスタ値取得コマンドとメモリ設定コマンドを調整していこう。 現在対象としているアーキテクチャはMIPS64のため、これに合うように、まず…

GDBリモートデバッグサーバを自作ISSに実装する(stepの実装とパケットの注意点)

GCC

前回の実装では、continue命令を実装したのだった。次は、step操作を実装していこう。 msyksphinz.hatenablog.com step実行は、GDBの中ではどのように実装されるのだろうか? Howto: GDB Remote Serial Protocol In the RSP, the s packet indicates steppin…

GDBリモートデバッグサーバを自作ISSに実装する(continueの実装とトレース)

GCC

msyksphinz.hatenablog.com いよいよプログラムの実行に移る。GDB側からプログラムの実行として、stepかcontinueを実装していく。まずは、continueからだ。 その前に、continueで正確に停止できるように、breakpointの設定を行っていこう。 breakpointの実装…

GDBのプロトコルを読み解く(GDBのリンク確立とプログラムのダウンロード)

GCC

msyksphinz.hatenablog.com 前回までで、GDBのパケットの仕組みについて学んだ。今度は、GDBのリンク確立とプログラムのダウンロードだ。 まずは適当にGDBのフロンドエンドからパケットを受信して、どのような形式のパケットがやってくるか観察してみる。 GD…

GDBのプロトコルを読み解く(GDBクライアントからの受信パケットの解析)

GCC

前回、GDBのパケット通信の確立方法について学んだ。次は、実際にどのようなパケットが送信されているのか、観察してみることにしよう。 msyksphinz.hatenablog.com https://github.com/msyksphinz/swimmer_iss/tree/feature/gdb_implgithub.com GDBリモート…

GDBリモートデバッグサーバを自作ISSに実装する

GCC

さて、前回でGDBのリモートデバッグプロトコルについて分かってきた。 今度は、これを実装していこう。 基本的には、OpenRISCのISSであるor1ksimの実装を参考にする。 といっても、or1ksimはC言語で実装してあるので、必要な部分はC++に置き換えていく必要が…

ISSとGDBを接続してリモートデバッグを実現するための調査

GCC

これまで、自作ISSに様々な機能を組み込んできた。Luaのインタフェースを使ってインタラクティブなデバッガを実現したり、elfを読み込むことで関数トレースや、関数フローを表示できるような改良を施してきた。 ベンチマークを実行したときに、関数をどのよ…

RISC-Vのアトミック演算について

RISC-VのISS実装を進めていっている。今回はアトミック演算についてだ。 アトミック演算は、Read Modify Writeを使って実現している。ReadModifyWriteは、メモリからの読み込み、値の変更、メモリへのストアを1つの命令で実現しており、またこれらのメモリア…

GMPライブラリをつかって64ビット同士の乗算を実装する

C++

RISC-Vに限らず、大概の64ビットプロセッサには64ビット同士の乗算を行う命令が存在する。RISC-Vでは、以下の命令が定義されている。 MUL : 64bit signed × 64bit signed → 下位64ビットを結果として格納 MULH : 64bit signed × 64bit signed → 上位64ビット…

RISC-VのISS修正中...

msyksphinz.hatenablog.com RISC-VのISSを引き続き修正している。 MMUの実装と、ベクタの部分が間違っていたので修正した。RISC-Vでは、ECALLという命令を使って一つ上の権限に移ることができる。 RISC-Vには4つの権限があり、上から Machine Mode Hyperviso…

RISC-Vのメモリ仮想化の方式について

RISC-Vのテストパタン(riscv-tests)をパスさせるにあたり、RISC-Vの持つ仮想化の方式について勉強する必要が生じた。 これを機に、RISC-Vの仮想化の方式についてまとめてみよう。 RISC-Vの持つ仮想化のモード RISC-Vには、オペレーションモードに応じていく…

Travis-CIで最新のツールを使ってリグレッションしたいときの対処法

僕のISSを、Travis-CIを使ってリグレッションをしてみることにした。基本的には、既にコンパイルしたパタンを一緒にアップロードしておき、これを流すことでリグレッションとする。 リグレッションには、CTestを使い、既にriscv-toolsより提供されているrisc…

32ビットモードと64ビットモードの両方をサポートするためのRISC-V ISSの実装

ISS

RISC-V用のISSで、倍精度と単精度の浮動小数点をサポートをするために、RISC-V ISSで32ビットモードと64ビットモードをサポートしよう。 32ビットモードと64ビットモードのレジスタファイル対応 まずは、レジスタファイルの大きさとアドレスの範囲を64ビット…

RISC-Vの浮動小数点命令をISSに実装する

ISS

MIPSの浮動小数点命令についても、大分実装が進んできたので、RISC-Vの実装を進めていこう。 RISC-Vにも単精度、倍精度の浮動小数点演算命令が定義されている。 Download - RISC-V RISC-Vの浮動小数点命令をISSに実装する ISSの実装についてはMIPSのそれと殆…

「高速化プログラミング入門」を購入

本屋にふらっとよった時に発見。まさに本日発売でした。 高速化プログラミング入門作者: 北山洋幸出版社/メーカー: カットシステム発売日: 2016/01メディア: 単行本この商品を含むブログを見る 内容としては、高速化の基礎から、メモリアクセス回数の削減、…

CMakeによりVerilogのビルドを管理するための調査(2. CTestによるテスト追加)

前回までで、どうにかこうにかCMakeでVivado Simulatorのビルド環境を構築した。 ここまで出来たら、実はCTestによるテストの追加は容易なのだ。 CMakeLists.txtに以下を追加してみた。 # CTest enable_testing() add_test (NAME basic_test COMMAND /cygdri…

CMakeによりVerilogのビルドを管理するための調査(1. CMakeによるビルド環境の構築)

ブログのコメントで、CMakeを使ってVerilogのプロジェクトを扱うためにはどのようにすれば良いのか、という話を頂いた。 確かに、CMakeがサポートしているのはC++とか、ソフトウェアのプロジェクトばかりだ。 Verilogをプロジェクトをサポートするためにはど…

TOEICの結果と感想

msyksphinz.hatenablog.com 昨年12月に受験したTOEICの結果が出てきた。結果としては、前回受験(ほぼ1年前)に比べて40点アップ。これによりついにTOEIC高得点の大台にのった感じになった。 TOEICを受験し始めたのは高校三年生のときからで、かれこれそれから…

softfloatを使ってISSの浮動小数点命令を実装しよう(1)

ISS

softfloatは、浮動小数点をソフトウェアで実現するためのライブラリだ。 Berkeley SoftFloat 今までは整数命令ばかり実装していたけど、MIPS64やRISC-Vも注目を浴びてきたということもあり、浮動小数点の命令も実装していこう。 そのためには、x86の命令を使…

RISC-VプロジェクトにHP, Oracle, Googleが参加

徐々にRISC-Vに注目が集まってきましたね。 www.publickey1.jp www.eetimes.com オープンなプロセッサということで、ARMなどと違い無料で利用することができるという点や、ARMに拘束されるよりもオープンに開発した方が良いという点も挙げられるが、個人的に…

Odooを構築するVagrantの環境をAnsibleで作ろう

Odooというのは、昔はOpenERPと呼ばれていたのだが、その名の通りERP(Enterprise Resource Planning)を行うためのWebツールだ。 通常Redmineであれば開発プロジェクトとか、特定のエンジニア向けのツールしか用意されていないが、Odooはそれ以外に在庫管理、…

CMakeとISSテスト環境を構築する手順

ISS

ISSのリグレッションテストを実行するための環境を構築していこう。 CMakeを使ってリグレッションの環境を構築する CMakeLists.txtの記述 CTestのためのパッケージを追加 Travis-CIを使ってリグレッションを実行する .travis.ymlを記述する Travis-CIのCMake…

ISSのコア部とインタフェース部を分離するためのCMakeLists.txtを記述する

ISS

ISSのインタフェースを統一するために、まずはコア部とインタフェース部を分離する。 現在のISSは、基本的に以下のようなインタフェースを持っている。 図では、コントロール部とCPUコア部を分離して記述しているが、実際には同じ階層としてビルドしていた。…