FPGA開発日記

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

NVDLA compilerがオープンソース化されたので試してみる(1. ビルド→失敗)

https://avatars3.githubusercontent.com/u/32145751?s=280&v=4

NVDLAというのはNVIDIAが公開しているオープンソースディープラーニング向けハードウェアだが、このハードウェアで流すニューラルネットワークコンパイルすることのできるコンパイラ nvdla_compiler がついにオープンソース化された。 nvdla_compilerは昔触った時の認識では、caffeなどのモデルを入力してNVDLAが処理することのできるバイナリ形式に変換してくれるコンパイラで、NVDLAにモデルをインプットすることができるようになる。

この中身を解析すればNVDLAの内部も多少理解しやすくなるかなと思いオープンソース化を待っていたのだが、この度ようやく、という訳だ。

さっそくGitHubからリポジトリをクローンする。えらく時間がかかるなと思ったら800MB近くダウンロードされた。何が入っているんだ...

git clone https://github.com/nvdla/sw.git

さっそくコンパイルしてみる。

cd sw/umd
make compiler
caffe/ditcaffe/protobuf-2.6.1/ditcaffe.pb.h:9:10: fatal error: google/protobuf/stubs/common.h: No such file or directory                                                                  #include <google/protobuf/stubs/common.h>                                                                                                                                                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

いきなりコケた。よく見てみるとMakefileにミスがある。修正して再ビルド。

diff --git a/umd/core/src/compiler/Makefile b/umd/core/src/compiler/Makefile
index d4a24d2..140e493 100644
--- a/umd/core/src/compiler/Makefile
+++ b/umd/core/src/compiler/Makefile
@@ -34,7 +34,7 @@ BUILDOUT ?= $(ROOT)/out/core/src/compiler
 BUILDDIR := $(BUILDOUT)/$(MODULE)
 LIB := $(BUILDDIR)/$(MODULE).so

-INCLUDES := $(ROOT)/external/protobuf-2.6/src
+INCLUDES := -I$(ROOT)/external/protobuf-2.6/src
 MODULE_COMPILEFLAGS := -g -fPIC -finline -W -Wall -Wno-multichar -Wno-unused-parameter -Wno-unused-function -Werror-implicit-function-declaration
 MODULE_CFLAGS := --std=c99
 MODULE_CPPFLAGS := --std=c++11 -fexceptions -fno-rtti

すると今度はこのエラーだ。

/usr/bin/ld: libprotobuf.a(common.o): relocation R_X86_64_32S against symbol `_ZTVN6google8protobuf7ClosureE' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: libprotobuf.a(generated_message_util.o): relocation R_X86_64_32S against symbol `_ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: libprotobuf.a(message_lite.o): relocation R_X86_64_32S against symbol `_ZTVN6google8protobuf11MessageLiteE' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: libprotobuf.a(repeated_field.o): relocation R_X86_64_32S against symbol `_ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4' can not be used when making a PIE object; recompile with -fPIC
...

protobufを-fPIC付きでコンパイルしろって?そういうのは先に言ってほしい。

cd external/protobuf-2.6
./configure CFLAGS=-fPIC CXXFLAGS=-fPIC && make

protobufをリビルドしようとすると、今度はこれだ。

 make -j4
...
 cd . && /bin/bash /home/msyksphinz/work/sw/umd/external/protobuf-2.6/missing automake-1.14 --foreign
/home/msyksphinz/work/sw/umd/external/protobuf-2.6/missing: line 81: automake-1.14: command not found

Makefileから何から作り直してみる。

./autogen.sh
./configure && CFLAGS=-fPIC CXXFLAGS=-fPIC make -j8

うーん、こうやっても駄目だ。

とりあえずまだまだリリースパッケージとしては未完成な様子?