この記事は 半導体・ハードウェア開発 Advent Calendar 2017 - Qiita の15日目の記事です。
Advent-Calendarを埋めてくれるかた、今からでも募集中です!是非参加してください! 私一人では、クオリティのある記事を続けられそうにありません。。。(弱音)
目次
- NVIDIAのディープラーニングアクセラレータNVDLAをVivadoでシミュレーションする
- NVDLAの勉強 (NVDLA Primerを読んでまとめる: ハードウェア編)
- NVDLAの勉強 (NVDLA Primerを読んでまとめる: ソフトウェア編)>
- NVDLA 1.0 がVerilatorに対応している(が、ビルドできるのは潤沢な資源を持つ金持ちだけ)>
- NVIDIAのオープンソース ディープラーニングアクセラレータを試す(1. NVDLAのビルドとシミュレーション環境構築)>
- NVIDIAのオープンソース ディープラーニングアクセラレータを試す(3. NVDLAの内部ブロック)>
- NVDLA Virtual Platformの試行 (1. ビルド試行 → 失敗)>
- NVDLA Virtual Platformの試行 (2. ビルド成功 → ログイン)>
NVDLA Virtual Platform とは、簡単に言うとNVDLAを試行するための足回りや制御プロセッサなどを接続した、プラットフォームのことを言うらしい。
例えば制御コアとしてQEMU上で構成したARMプロセッサを接続したり、仮想的な外部メモリを接続してNVDLAを動作させることが出来る。 ソフトウェアプログラマは、このプラットフォームを利用してARMのプログラムを記述してNVDLAをコントロールし、実際の性能や挙動を確認することが出来るようになる、とうこと。
これには、QEMUとSystem-Cによる協調シミュレーションが利用されている。QEMUエミュレータはARMv8のものが使われており、高性能CPUをエミュレーションしている。 エミュレータは標準的なSystemCモジュールでラップされており、TLM(Transaction Level Modeling)という技術を使ってSystem-C経由で制御を行っているらしい。
仮想シミュレータプラットフォームの構築
基本的には、公式サイトの説明を参照した。
Virtual Platform — NVDLA Documentation
必要なリポジトリ
- NVDLA HW :
git clone https://github.com/nvdla/hw.git
- NVDLA VP :
git clone https://github.com/nvdla/vp.git
Ubuntu 17.10 上で構築を行った。まずはUbuntu上で必要なパッケージをインストールする。
sudo apt-get install g++ cmake libboost-dev python-dev libglib2.0-dev libpixman-1-dev liblua5.2-dev swig libcap-dev libattr1-dev
SystemCのインストール
公式サイトの説明の通りにインストールを進めることが出来る。
$ wget -O systemc-2.3.0a.tar.gz http://www.accellera.org/images/downloads/standards/systemc/systemc-2.3.0a.tar.gz $ tar -xzvf systemc-2.3.0a.tar.gz $ cd systemc-2.3.0a $ sudo mkdir -p /usr/local/systemc-2.3.0/ $ mkdir objdir $ cd objdir $ ../configure --prefix=/usr/local/systemc-2.3.0 $ make $ sudo make install
NVDLA HWの構築
NVDLA HWリポジトリをダウンロードして、環境をビルドしておく。これをNVDLA CMOD
と呼んでいる。
$ git clone https://github.com/nvdla/hw.git $ cd hw $ make $ CC=/usr/bin/gcc-5 CXX=/usr/bin/g++-5 tools/bin/tmake -build cmod_top
Ubuntu 17.10 の場合は、GCCのバージョンに気を付ける必要がある。最新版のGCC7.2ではビルド時にコンパイルエラーが発生してしまったため、GCC5を使うように環境変数を変えておく必要がある。
仮想シミュレータのビルドとインストール
これも公式サイトの説明通りに行った。また、同様にGCCの場所を切り替え、GCC5が利用されるようにしておく。
CXX=/usr/bin/g++-5 cmake -DCMAKE_INSTALL_PREFIX=build -DSYSTEMC_PREFIX=/usr/local/systemc-2.3.0/ -DNVDLA_HW_PREFIX=/home/msyksphinz/work/nvdla_hw -DNVDLA_HW_PROJECT=nv_full
次にビルドなのだが、以下のエラーが出てコンパイルが失敗してしまう。おかしいな、libpython
はちゃんとインストールしてあるのに。
ライブラリのパスなどが正しく設定されていないのかもしれない。引き続き調査が必要。
$ make ... [ 75%] Completed 'qbox' [ 75%] Built target qbox Scanning dependencies of target greenscript [ 75%] Building CXX object libs/greenlib/greenscript/lib/CMakeFiles/greenscript.dir/__/src/greenscript.cpp.o /home/msyksphinz/work/nvdla_vp/libs/greenlib/greenscript/src/greenscript.cpp: In constructor ‘gs::script::GreenScriptModule::GreenScriptModule(sc_core::sc_module_name, const char*)’: /home/msyksphinz/work/nvdla_vp/libs/greenlib/greenscript/src/greenscript.cpp:178:39: error: ‘PyString_FromString’ was not declared in this scope name_py = PyString_FromString(name()); // new ref ^ /home/msyksphinz/work/nvdla_vp/libs/greenlib/greenscript/src/greenscript.cpp: In member function ‘void gs::script::GreenScriptModule::load(const char*)’: /home/msyksphinz/work/nvdla_vp/libs/greenlib/greenscript/src/greenscript.cpp:221:46: error: ‘PyString_AsString’ was not declared in this scope std::string s(PyString_AsString(path_py)); ^ /home/msyksphinz/work/nvdla_vp/libs/greenlib/greenscript/src/greenscript.cpp: In member function ‘void gs::script::GreenScriptModule::add_to_pythonpath(const char*)’: /home/msyksphinz/work/nvdla_vp/libs/greenlib/greenscript/src/greenscript.cpp:262:47: error: ‘PyString_FromString’ was not declared in this scope PyObject *path_py = PyString_FromString(path); // new ref ^ /home/msyksphinz/work/nvdla_vp/libs/greenlib/greenscript/src/greenscript.cpp: In member function ‘bool gs::script::GreenScriptModule::private_load(const char*)’: /home/msyksphinz/work/nvdla_vp/libs/greenlib/greenscript/src/greenscript.cpp:278:68: error: ‘PyFile_FromString’ was not declared in this scope PyObject* PyFileObject = PyFile_FromString((char *)fullname, mode); ^ In file included from /usr/include/python3.7m/Python.h:116:0, from /home/msyksphinz/work/nvdla_vp/libs/greenlib/greenscript/src/greenscript.cpp:38: /home/msyksphinz/work/nvdla_vp/libs/greenlib/greenscript/src/greenscript.cpp:279:56: error: ‘PyFile_AsFile’ was not declared in this scope PyObject *ret = PyRun_File(PyFile_AsFile(PyFileObject), ^ /usr/include/python3.7m/pythonrun.h:146:23: note: in definition of macro ‘PyRun_File’ PyRun_FileExFlags(fp, p, s, g, l, 0, NULL)