さくせいちゅう

Standalone Toolchainでlibgmp (NDK)

今回はgmpは5.1.1、gmpbenchは0.2を使用しています。動作環境はTips/Standalone ToolchainでHello World (NDK)を参考に。

GMPのSourceの中にARM固有のチューニングコードが入っていて、もしかして工夫すればすげえ早くなるんじゃね?という期待により弄っています。丁寧にもベンチマークプログラムも用意されているので、気が向いたらツールも作ってみたい所存。

1. configureの実行

cd $HOME/gmp-5.1.1/
./configure --build=i686-pc-linux-gnu --host=arm-linux-androideabi --with-sysroot=$SYSROOT

2. make & make install

make
make install DESTDIR=$HOME/armeabi

/armeabi/usr/local/libに「libgmp.a」があれば概ね成功。

3. gmpbenchのmake

gmpbenchはクロスコンパイルまで考慮してくれないらしくとっとと実行に移してしまうので具合が悪い。よって予めmakeしたのを 実行環境で実行する方式を採用。取り合えずmakeから。

$CC -I ~/armeabi/usr/local/include -O3 -fomit-frame-pointer gcd.c -o gcd ~/armeabi/usr/local/lib/libgmp.a
$CC -I ~/armeabi/usr/local/include -O3 -fomit-frame-pointer gcdext.c -o gcdext ~/armeabi/usr/local/lib/libgmp.a
$CC -I ~/armeabi/usr/local/include -O3 -fomit-frame-pointer multiply.c -o multiply ~/armeabi/usr/local/lib/libgmp.a
$CC -I ~/armeabi/usr/local/include -O3 -fomit-frame-pointer divide.c -o divide ~/armeabi/usr/local/lib/libgmp.a
$CC -I ~/armeabi/usr/local/include -O3 -fomit-frame-pointer rsa.c -o rsa ~/armeabi/usr/local/lib/libgmp.a
$CC -I ~/armeabi/usr/local/include -O3 -fomit-frame-pointer pi.c -o pi -lm ~/armeabi/usr/local/lib/libgmp.a

4. 実機にコピー

adb push runbench /data/local/tmp/gmpbench

、、、ここまでやったがどうも標準のshellがしょぼいのとsed等のツールが足りなくて素直に実行できず。仕方がないので実行ファイルを個々に実行してみたがイマイチ面白みがないので、ツールを変えてみた。

5. すずきひろのぶさんのquick start pi benchmarkを改造

ベンチマークの中身はgmp+gmp-chudnovsky.c。なので取り敢えずgmp-chudnovsky.cをmakeすることに。

Key : NDK

あとでつかう


Last-modified: 2013.04.06 (土) 23:56:06 (4038d)