type t (* void *)

関数型言語や英語学習の事とか。

Jetson TX2: CUDA_sampleが動作するまで

こんなオタクデバイスを買ったのだけど、サンプルを動かすまで割とハマったのでメモしておく。
何一つ新しい情報はないけどまぁ他の人の時間が節約されて欲しい。。。。

Jetpackのインストー

Jetson TX2は買った状態で何かしらのUbuntuがはいっているけども、これを上書きしてALL in OneのパッケージであるJetpackを入れるのが正規の手段らしい。

developer.nvidia.com

最初困ったのはこのWEBページを見てもドキュメントがどこにあるのかわからないこと。
じつは「Release Noteはここだよ!」って書いてあるリンクの先がドキュメントになっている(???????????

基本的にインストールのガイダンスに従うだけでOKなのだけど、en設定のUbuntuをホストにして書き込みを行わないといけなかった。
JP設定のUbuntuでは中途半端な状態でインストールが終了してしまい、必要なツールが入っていない状態で異常終了してしまいます。

CUDAのサンプル実行

cuda-install-samples-8.0.shを実行するとサンプルプログラムが展開される。
なんとCUDAサンプルはそのままでは動かない(???????
霊感でエイヤと修正が必要。

commonの設定

下のリンクに書いてあるパッチを当てる。

https://devtalk.nvidia.com/default/topic/999381/jetpack-compiling-oceanfft-on-tx2/

libGL.soがなんか変

5_simulatorとかのサンプルを動かそうとするとリンクエラーでビルドできない。
主にlibGL周りの関数への未定義参照。

おそらく/usr/lib/aarchi64-linux-gnu/などにあるlibGL.soが腐っており、-L /usr/lib/aarch64-linux-gnu/tegraが必要。

おまけ:性能

nbody --benchmark --numbodies=256000で色々なGPUで性能を測った記事があったので同じサンプルプログラムを動作させてみた。

nvidia@tegra-ubuntu:~/sample/NVIDIA_CUDA-8.0_Samples/5_Simulations/nbody$ ./nbody --benchmark --numbodies=256000 --device=0
Run "nbody -benchmark [-numbodies=<numBodies>]" to measure performance.
        -fullscreen       (run n-body simulation in fullscreen mode)
        -fp64             (use double precision floating point values for simulation)
        -hostmem          (stores simulation data in host memory)
        -benchmark        (run benchmark to measure performance)
        -numbodies=<N>    (number of bodies (>= 1) to run in simulation)
        -device=<d>       (where d=0,1,2.... for the CUDA device to use)
        -numdevices=<i>   (where i=(number of CUDA devices > 0) to use for simulation)
        -compare          (compares simulation results running once on the default GPU and once on the CPU)
        -cpu              (run n-body simulation on the CPU)
        -tipsy=<file.bin> (load a tipsy model file for simulation)

NOTE: The CUDA Samples are not meant for performance measurements. Results may vary when GPU Boost is enabled.

> Windowed mode
> Simulation data stored in video memory
> Single precision floating point simulation
> 1 Devices used for simulation
gpuDeviceInit() CUDA Device [0]: "GP10B
> Compute 6.2 CUDA device: [GP10B]
number of bodies = 256000
256000 bodies, total time for 10 iterations: 36523.914 ms
= 17.943 billion interactions per second
= 358.866 single-precision GFLOP/s at 20 flops per interaction
nvidia@tegra-ubuntu:~/sample/NVIDIA_CUDA-8.0_Samples/5_Simulations/nbody$

qiita.com

まとめ

サンプル動作をテストしてから出荷してくれ。