JETSON TK1 7/16/2014 JETSON TK1 世界初の組み込みスーパーコンピューター Tegra K1 開発キット CUDA VisionWorks 完結した開発ツールスイート 5 Watts x 12 x x 5 1,640,000 Getting Connected 1つ以上の繋げ方: Traditional display, keyboard, and mouse Over the network like SSH, VNC, web browser Gigabit Ethernet ポート Network is DHCP by default Wi-Fi は追加アダプターで有効化 PCIe-based or USB-based デフォルトのユーザネーム: ubuntu デフォルトのパスワード: ubuntu Task #0: Power on Jetson TK1 Goal: Jetson TK1 の電源をいれてデスクトップを表示する。 Terminal(端末)を起動する。 Task: 電源アダプタを Jetson TK1 に接続して初回起動します 電源ボタンはボード上にあります: 日本語キーボード用に変更: setxkbmap –layout jp CUDA Parallel Computing Platform www.nvidia.com/getcuda Programming Approaches Libraries Directives Programming Languages “Drop-in” Acceleration Easily Accelerate Apps Maximum Flexibility Development Environment Nsight IDE Linux, Mac and Windows GPU Debugging and Profiling Open Compiler Tool Chain Hardware Capabilities CUDA-GDB debugger NVIDIA Visual Profiler Enables compiling new languages to CUDA platform, and CUDA languages to other architectures SMX Dynamic Parallelism HyperQ GPUDirect Task #1: Write Simple CUDA C Program Goal: CUDA版の “Hello World” プログラムを書く Task: CTRL+ALT+T で端末を起動 以下を実行: gedit hello.cu &⏎ 右記のコードを入力 ファイルを保存してコンパイル nvcc –o hello hello.cu⏎ 実行する ./hello⏎ #include <stdio.h> __global__ void hello() { printf(“Hello from %d.%d\n”, blockIdx.x, threadIdx.x); } int main() { hello<<<2,2>>>(); cudaDeviceSynchronize(); return 0; } Task #1 – 結果例 $ ./hello Hello from Hello from Hello from Hello from 0.1 1.1 1.0 0.0 これらは並列で実行されているように行の順序は変更になる場合があります CUDA Samples NVIDIA’s CUDA Toolkit には有用なサンプルコー ドが含まれています GPUをフル活用するための方法 コンピュートとグラフィックスの組み合わせ方 デバイスのクエリー方法 等々… 本セッションで利用する Jetson TK1 には既に CUDA 6 がインストールされています Task #2: Compile & Run CUDA Samples Goal: いくつかのCUDAサンプルをコンパイルして実行する Task: サンプルをコピー (実行は一度のみ): cuda-install-samples-6.0.sh .⏎ smokeParticlesを試す: cd NVIDIA_CUDA-6.0_Samples/5_Simulations/smokeParticles/⏎ make⏎ ../../bin/armv7l/linux/release/gnueabihf/smokeParticles⏎ 他のサンプルも試してみましょう NVIDIA_CUDA-6.0_Samples/1_Utilities/deviceQuery/⏎ Task #2 – 結果例 OpenCV Introduction コンピュータビジョン、画像処理、機械学習用のオープンソース・ライブラリ 使いやすいBSD ライセンス 自由に使える (www.opencv.org) Portability リアルタイム・コンピュータビジョン (x86 MMX/SSE, ARM NEON, CUDA) C (11 years), now C++ (3 years since v2.0), Python and Java Windows, OS X, Linux, Android and iOS Usage 利用実績: 600万以上のダウンロード, 47,000 以上のユーザーグループ Google, Yahoo, Microsoft, Intel, IBM, Sony, Honda, Toyota Applications: Street view image stitching Automated inspection and surveillance Robot and driver-less car navigation and control Medical image analysis Video/image search and retrieval Movies - 3D structure from motion Interactive art installations Functionality Desktop x86 single-core (Intel started, now Itseez.com) - v2.4.5 >2500 functions (multiple algorithm options, data types) CUDA GPU (Nvidia) - 250 functions (5x – 100x speed-up) http://docs.opencv.org/modules/gpu/doc/gpu.html OpenCL GPU (3rd parties) - 100 functions (launch times ~7x slower than CUDA*) Mobile (Nvidia): Android (not optimized) Tegra – 50 functions NEON, GLSL, multi-core (1.6 – 32x speed-up) *Shengen Yan, AMD Fusion Developer Summit 2012. OpenCV Basics 異なる機能のために複数のモジュール モジュールごとにヘッダーとライブラリーのインクルードが必要 一般には core と highgui モジュールを使う 名前空間 関数/オブジェクト名の衝突を避けるため、cv 名前空間を使用する: using namespace cv; Mat オブジェクト CPU上のビデオの画像やフレームの情報/データを保持 MOG2 混合ガウスモデルベースの前景・背景分離アルゴリズム Task #3: Compile & Run OpenCV Sample Goal: OpenCV サンプルをコンパイルし実行する Task: cd ~/opencv-2.4.9/samples/c⏎ でディレクトリ移動 コンパイル: g++ adaptiveskindetector.cpp -lopencv_highgui -lopencv_core lopencv_contrib⏎ 実行 ./a.out --camera=0⏎ USBカメラで動作を確認する OpenCV + GPU GPU モジュール #include “opencv2/gpu/gpu.hpp” -lopencv_gpu 名前空間: using namespace cv::gpu; GpuMat オブジェクト Matに類似、ただGPU上の画像・フレームの保持用 GPUに画像を転送するには: Mat h_image; // CPU image GpuMat d_image; // GPU image d_image.upload( h_image ); GPUから画像をダウンロードするには: d_image.download( h_image ); OpenCV + GPU CPU上でMOG2モジュールを使う場合 #include "opencv2/video/background_segm.hpp" BackgroundSubtractorMOG2 mog2; GPU上でMOG2モジュールを使う場合 #include "opencv2/gpu/gpu.hpp" MOG2_GPU mog2; Task #4: Port CPU app to GPU Goal: 計算量の多い部分についてOpenCVがGPUを利用するようにする Task: ディレクトリの変更: cd ~/lab/bgfg⏎ CPU版のコンパイル: make cpu⏎ ./bgfg_segm_cpu –c 0⏎ cp bgfg_segm_cpu.cpp bgfg_segm_gpu.cpp⏎ 実行して結果を確認: CPU版からコピー: コピーしたファイルにGPU対応を追加 GPU版をコンパイル: 実行して性能を確認: ビデオファイルを使う場合: make gpu⏎ ./bgfg_segm_gpu –c 0⏎ ./bgfg_segm_gpu⏎ 回答はこちら bgfg_segm_solution.cpp Task #4 – 結果例 Solution source code is available at https://github.com/mebersole/TrainingMaterials/blob/master/Jets onTK1/bgfg/bgfg_segm_gpu.cpp OpenCV on the GPU 今回の BGFG サンプルの場合: ARM CPU の約4倍早く実行された 16% 少ない電力で達成! タスクに応じたプロセッサーの使用。 その他の電力効率に関する例: elinux.org/Jetson/Computer_Vision_Performance GPIO GPIO: General Purpose Input & Output(汎用入出力) 定義(Wikipedia英語版から): 入出力に使用する汎用の端子(ピン)。実行時にユーザによって操作でき、特 定の目的は持たない。設定されるまで利用されない。 利用方法: ソフトウェアで他のデバイス/回路/コンポーネントを操作可能にする ソフトウェアで他のデバイス/回路/コンポーネントからの変化を検知可能にす る 例: USBカメラからの入力に応じてサーボを制御する Working with J3A2 Header 接続するピンの場所に注意してください! (Jetson TK1の場合)GPIOピンは1.8Vしか扱えません。 それ以上の場合、ボードを損傷する可能性があります。 今回はピン43, 45, 46, and 49 を利用します ボード上のシルクスクリーンの「三角」がピン1を、「2」がピン2 を表し、そこから数えていきます Task #5: Connect Components & Test Goal: basic_blink.py を実行してLEDを点滅させる Task: LED の抵抗の付いていない側の足をピン 43 (GPIO_PU1) に接続(済) LED の抵抗の付いている側の足をピン45 (GND)に接続(済) 以下を実行: sudo python ~/lab/gpio/basic_blink.py⏎ Result: LEDが10回点滅する Task #6: Input & Output of GPIOs Goal: advanced_blink.py を実行してスイッチの入力に応じてLED 点滅 Task: タクトスイッチの片方の足をピン 46 (GPIO_PU2) に接続(済) タクトスイッチの片方の足をピン pin 49 (GPIO_PU3)に接続(済) 以下を実行: sudo python ~/lab/gpio/advanced_blink.py⏎ Result: スイッチを押している間のみLEDが素早く点滅する 追加ポイント: advanced_blink.py を変更して点滅周期を早めて みる Task #6 – 結果例 点滅速度を変更するには、次の行を変更 in advanced_blink.py BLINK_INTERVAL = 100 #milliseconds GPIO Summary ソフトウェアから1.8Vを作ったり検知したりできる 外部デバイスの制御 To learn more: http://elinux.org/Jetson/GPIO 誤接続に注意! Learning More Community Wiki: elinux.org/Jetson_TK1 Jetson TK1 Support Page: developer.nvidia.com/jetson-tk1-support 質問がある場合は: Forum: devtalk.nvidia.com -> Embedded Systems stackoverflow.com Task #6: Power down system 以下を実行: sudo poweroff⏎ LEDとスイッチを取り外してから箱にしまって下さい USBハブを USBカメラは差し上げますので、お持ち帰りください
© Copyright 2024 ExpyDoc