お気に入りタイトル/ワード

タイトル/ワード名(記事数)

    鐃緒申����鐃醇�鐃緒申��申鐃醇�鐃緒申��申鐃醇�鐃緒申��申鐃醇�鐃緒申鐃緒申����鐃緒申��申鐃醇�鐃緒申鐃緒申鐃緒織�鰹申鐃処��申鐃醇�鐃緒申��申鐃醇�鐃緒申��申鐃醇�鐃緒申鐃順�鐃緒申鐃緒申�o申��膩��鰹申鐃処��申鐃醇�鐃緒申��申鐃緒申/鐃緒申�o申����鐃緒申鐃緒申�鰹申鐃緒申羝�鐃緒申��申鐃初姐�鰹申鐃緒申羝�鐃緒申��申鐃醇�鐃緒申��申鐃醇�鐃緒申鐃緒申����鐃緒申��鐃�20鐃緒申��膩��鰹申鐃緒申薜合�渇����鐃緒申鐃緒申�渇����鐃緒申�居申����鐃緒申��申鐃醇�鐃緒申鐃緒申��膩��鰹申鐃処��申鐃緒申

最近記事を読んだタイトル/ワード

タイトル/ワード名(記事数)

    LINEで4Gamerアカウントを登録
    Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた
    特集記事一覧
    注目のレビュー
    注目のムービー

    メディアパートナー

    印刷2014/07/22 12:00

    テストレポート

    Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

     2014年7月16日,NVIDIAは,GPUコンピューティング開発者イベント「GTC Japan 2014」を開催した。2014年のGTC Japanでは,組み込み機器関連のセッションが大幅に増えていた,という話は先のレポートでお伝え済みだが,そんななかでも注目したいのが,事前登録が必要でかつ有償となっていた「Jetson TK1」体験セッションだ。

    Jetson TK1
    画像集#005のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

    セッションで講師を務めたのはCUDAエヴァンジェリストであるNVIDIAのMark Ebersole(マーク・エバーソール)氏
    画像集#002のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた
     NVIDIAの組み込み向け最新SoC(System-on-a-Chip)である「Tegra K1」を搭載した開発用ボードであるJetson TK1は,国内流通が始まってはいるものの,その数が少なく,触れている人もまだそれほど多くない。
     今回4Gamerでは,そんなJetson TK1を実際に体験できるというセッションへ参加できたので,「Tegra K1搭載のワンボードコンピュータ」に触ってきた模様を簡単にまとめてみたいと思う。ゲームと直接の関係はないが,Tegra K1が気になっている人や,CUDAに興味がある人はチェックしてほしい。


    ようこそJetson TK1へ


     さて,セッションルームでは,各席にディスプレイやキーボードとの接続を終えたJetson TK1が置いてあり,受講者はすぐにJetson TK1を体験できるようになっていた。

    Jetson TK1体験セッション会場に用意されていた各受講者用デスクの模様
    画像集#003のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

    Jetson TK1の製品イメージ
    画像集#004のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた
     ディスプレイとの接続はHDMI(Type A)端子経由。Jetson TK1は1ポートのUSB 3.0ポート(Type A)を持つので,ここにUSBハブを接続すれば,その先にキーボードやマウスなどの周辺機器を接続できる。上の写真で気づいた人もいるだろうが,今回のセッションではコンピュータビジョンのサンプルを動かすために必要な周辺機器として,エレコム製のWebカメラ「UCAM-C0220FBBK」もハブ経由で接続されていた。
     キーボードやマウスは,USB接続のものならメーカーは不問で,Webカメラも,よほど特殊な仕様でない限り接続できるとのことだった。

     電源ユニットは,ノートPCに付属してきそうなACアダプターで,入力はAC100-240V/1.5A,出力はDC12V/5.0Aというスペックだ。これをJetson TK1の電源入力端子に接続すると,いきなりJetson TK1上の冷却ファンが回り始めて起動する仕様になっていた。万が一起動しない場合は,Jetson TK1上に用意された小さな[Reset]ボタンもしくは[Soft Power]ボタンを押すと再起動できるようだ。

     起動後,最初にやるべきこととして指導されたのは,[Ctrl]+[Alt]+[T]キーでコマンドプロンプトを出してからの,

    > setxkbmap -layout jp

    の入力で,これは,キーボードのレイアウトを日本語仕様へ変更する操作に相当する。

    Task #0として提示された最初の課題。電源を入れてキーボードレイアウトを変更する
    画像集#006のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

     起動してしまえば,ただのUbuntu搭載PCといった感じで,LANケーブルでネットワークと接続すれば,プリインストールの「Mozilla Firefox」からWebブラウジングも普通に行えてしまう。

    有線でインターネットに接続したJetson TK1から4Gamerを開いたところ
    画像集#007のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた


    「CUDAのプログラミングの基礎の基礎」を体験


     ここで,「Hello」を出力するだけの基礎的なプログラムの入力が課せられた。
     CUDAは,C言語ベースのプログラミング言語なのだが,「用意したデータに対してプログラムを実行させる」という概念の拡張がなされている。それを参加者に実感してもらおうというのが狙いだ。
     今回の「Hello」では,2×2のスレッドを立ち上げて,各スレッドから「Hello」を出力するようなプログラムになっていた。

    プログラム(上)とその実行結果(下)
    画像集#008のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた
    画像集#009のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

     サンプルリストはEbersole氏がスライドで示していたので,実際にやることはといえば,画面のサンプルを打ち込み,コンパイルして実行するだけだ。
     ただ,CUDAの完全な初心者からすれば,テキストエディタとして「gedit」が用意されているとか,CUDAのソースプログラムは拡張子「.cu」で作成するとか,コンパイラは「nvcc」であるとかいった基礎的なことをここで学べるのであった。


    CUDA 6のサンプルプログラムを実行する


     続いての課題は,Jetson TK1にプリインストールされているCUDA 6のサンプルプログラムをコンパイルして実行することである。

    CUDAのサンプルプログラムを実行するのがお次の課題だ
    画像集#010のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

     ここではまず,コマンドプロンプトからCUDA 6のサンプルプログラムをコピーするところから始まる。具体的には,

    > cuda-install-samples-6.0.sh .

    と入力することになる。最後のスペースとピリオドを忘れずに。

     続いて,

    > cd NVIDIA_CUDA-6.0_Samples/5_Simulations/smokeParticles/

    と入力し,カレントディレクトリをサンプルプログラム階層の下とする。長いパス名は中途まで打ち込んで[TAB]キーを押すと補完入力を行ってくれるので利用したい。
     コンパイルは,

    > make

    でOK。プログラムを書き換えない限り,コンパイルは一度実行すればそれでいい。
     実際のプログラム実行は,

    > ../../bin/armv7l/linux/release/gnueabihf/smokeParticles

    で行える。「smokeParticles」のところを別のプログラム名にすれば,別のサンプルプログラムをコンパイルして実行することも可能だ。

     サンプルプログラムを確認してみたところ,「NVIDIA_CUDA-6.0_Samples」階層下にはさまざまなものを確認できたので,Jetson TK1を入手できたら,いろいろと実行してみるといいのではなかろうか。見た目的に面白いのは,前出の「5_simulations」以外だと「2_Graphics」あたりか。


    コンピュータビジョンのサンプルプログラムを実行する


    続いての課題はOpenCVサンプルの実行なのだが,その前にWebカメラの動作確認
    画像集#011のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた
     次はWebカメラを使う実験である。
     具体的にはコンピュータビジョン用プログラミングAPI「OpenCV」のサンプルコードをJetson TK1上で実行する課題となる……のだが,その前に,Webカメラの動作を確認する必要がある。
     このカメラ動作確認プログラムは,「検出した肌色部分を緑色にマーキングする」というもので,人の顔が緑色にマーキングされればOKとなる。

    肌色に緑色マーカーが付く実験プログラム。これがうまく動けばWebカメラは正常に動作していると見なせる
    画像集#012のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

     Webカメラの動作が完了したところで,実際のCPUで実装したOpenCVサンプルプログラムを実行する。
     実行するのは,監視カメラのように定点設置されたカメラの映像から,動体と背景を分離するアルゴリズム「混合正規分布」(MOG:Mixture of Gaussian Distribution)のサンプルだ。

     コンパイル後,

    > ./bgfg_segm_cpu -c 0

    として実行されるのがCPU版MOGアルゴリズムとなる。実効フレームレートにして約5~7fpsといったところだ。

    CPUで実装したMOGアルゴリズムの実行結果。左にずらっと並んでいるのがフレームレートで,右上に4つ並んでいるのが撮影された映像とリアルタイム処理の結果だ。4つある映像のうち,右上が撮影された映像で,右下は,プログラムの起動後に動いていないと判断されたピクセルで,実行中のプログラムが背景として認識した部分になる。ディスプレイの前に座って,ほとんど動くことなく作業していたら,筆者の身体の一部も背景として認識されてしまった(笑)
    画像集#013のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

     続いては,このサンプルプログラムをGPU版に改造する課題が出されたのだが,セッション時間が短いこともあり,今回は,

    > cp bgfg_segm_solution.cpp bgfg_segm_gpu.cpp

    と打ち込み,模範回答プログラム「bgfg_segm_solution.cpp」を「bgfg_segm_gpu.cpp」としてコピーしてコンパイルするのみに留まった。具体的には,

    > make gpu
     
     でコンパイルし,

    > ./bgfg_segm_gpu -c 0

    で実行する。

    プログラムをGPU用にポーティングする課題
    画像集#014のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

     同一アルゴリズムを実行しているので,処理内容に変わりはない一方で,実効フレームレートは最大で10倍以上向上することを確認できた。これこそがGPUパワーの恩恵であり,Jetson TK1,そしてTegra K1の底力というわけである。

    実行結果は変わらないが,フレームレートに注目すると,24~60fps程度にまで向上しているのが分かる。最大では10倍以上の性能向上だ
    画像集#015のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた


    Jetson TK1でGPIOを制御する


    画像集#016のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた
     本稿の序盤で触れたとおり,Jetson TK1は組み込み機器向けの開発評価ボードである。なので「Tegra K1の演算性能を活かして,何か別のデバイスを操作したい」とか「何か別のデバイスへ出力したい」といった具合に,外部機器との連動を望むユーザーも多いはずである。
     Jetson TK1には,先に述べたUSB 3.0のほか,シリアルポートも用意されているが,それよりもさらにローレベルな入出力を行うためのGPIO(General Purpose Input & Output)ポートも備わっている。

    GPIOはこのスライドでいうところの「Expansion I/O」部にある
    画像集#017のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

     ここまでの課題は,どちらかといえば「コンピュータとしてJetson TK1をどう使うか」が対象となっていたが,最後の課題は,GPIOを使って外部デバイスとの連動を目指すものとなった。
     とはいえ,短い時間でそれほど高度なことはできないので,接点スイッチとLEDを組み合わせたシンプルな実験が行われた。

     最初の実験は,43番ピンと45番ピンに差し込まれたLEDを点滅させるという課題だ。
     プログラムは「~/lab/gpio/」フォルダに用意されているので,実際にやることは,

    > sudo python ~/lab/gpio/basic_blink.py

    として実行させるだけである。

    GPIOのクローズアップ(左)と課題(右)
    画像集#018のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた 画像集#019のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

    Jetson TK1を使ったLED点滅処理(1)

    Clik to Play
    Clik to Play
    プログラムを実行したところ,画面上の「LED on」「LED off」表示に連動して,Jetson TK1のGPIOに差したLEDが点滅する

    LEDを点滅させるプログラムはスクリプト言語Pythonで書かれたものだった
    画像集#020のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた
     LED制御のプログラムはスクリプト言語Pythonで書かれていたが,Jetson TK1における基本的なGPIO経由の入出力処理はPyhtonで制御することになっている。このあたりは,基礎実験や教育用のワンボードコンピュータとして知られる「Raspberry Pi」とよく似た部分といえるだろう。

     最後の課題は,GPIO側の46番ピンと49番ピンに接点スイッチを設け,このオン/オフを仮想的な周辺機器からの入力とし,それに呼応する形でプログラム側でLEDを点灯させるというものだ。

    最後の課題
    画像集#021のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた

     こちらもプログラム自体は保存済みなので,

    > sudo python ~/lab/gpio/advanced_blink.py

    プログラム冒頭,「BLINK_INTERVAL =」の数値を変えると明滅速度を変更できる
    画像集#022のサムネイル/Tegra K1搭載の開発キット「Jetson TK1」を動かしてみた
    として実行させるだけだが,接点スイッチを押している間だけLEDが点滅することを確認できた。
     追加のサブ課題として,LEDの点滅タイミングを変更するというのが与えられたが,これはプログラムを開いて「BLINK_INTERVAL =」の数値を変えるだけでOK。Pythonはスクリプト言語なので再コンパイルの必要もなく,すぐに数値変更の結果を反映した形で実行できるのだ。

    Jetson TK1を使ったLED点滅処理(2)

    Clik to Play
    Clik to Play


    “遊べる”評価ボードといえるJetson TK1


     まさに入門といった内容だったが,いかがだったろうか。
     Jetson TK1は組み込み機器向けの製品開発評価プラットフォームで,今のところ流通量も非常に少ないが,国内ではオリオスペックが正規品を扱っているので,2万4000円+税で次回以降の入荷分を予約できる。大学の研究室はもちろんのこと,個人レベルの電子工作用途にも応用できそうである。

    Jetson TK1を操作しているところ

    Clik to Play
    Clik to Play
    実際に筆者がJetson TK1を操作している様を録画したビデオ。Jetson TK1にプリインストールされているいくつかのデモを起動してみている

     これまで,ここまで高性能なGPUパワーを使ってさまざまな周辺機器と連動させられる安価なワンボードコンピュータはほとんどなかった。少なくとも筆者の知る限りは皆無だったように思う。Microsoftの「Kinect」が,その性能でアマチュア電子工作シーンにモーションセンシングブームを広めたように,Jetson TK1も今後,流通量が増えるにつれ,広がりを見せていくかもしれない。

    NVIDIAのJetson TK1製品情報ページ

    • 関連タイトル:

      Tegra K1

    • 関連タイトル:

      CUDA

    • この記事のURL:
    �尊�贈�造�孫�造�属�造��|�造�足�造�束 G123�造�貼�促�族�臓�村�促��

    ����続�其�臓�臓�則G123

    4Gamer.net最新情報
    スペシャルコンテンツ
    注目記事ランキング
    集計:04月03日~04月04日
    4Gamerからお知らせ