CUDA
NVIDIA
JetsonTK1
Tegra
More than 3 years have passed since last update.

先日Maker Faire Tokyo 2014というイベントに行ったところ、うっかりNVIDIAのTegra K1を搭載した開発キットJetson TK1を衝動買いしてしまいました。

せっかくなので色々遊んでみたいと思います。

接続

ACアダプターを接続すると起動します。LANケーブルを接続してから起動するとDHCPでネットワークに接続しますので、なんらかの方法で割り振られたIPアドレスを調べればSSHでシェルに接続できます。

OSは普通のUbuntu 14.04(ARMアーキテクチャ)になっています。

HDMI端子があるので、モニターとUSBのキーボード・マウスを繋げばスタンドアローンで使えるようです(試してません)。

アップデート

購入したJetson TK1にインストールされていたドライバーはR19というバージョンのものでした。
R19ではCUDA Toolkit 6.0(最新は6.5)までの対応のようなので、さっそくR21にアップデートしました。

アップデートにはUbuntu 14.04(x64)をインストールしたPCが必要になります(私は仮想マシンを使いました)。
下記のURLからJetson TK1 Development Pack (JetPack TK1)をダウンロードし、

https://developer.nvidia.com/jetson-tk1-development-pack

下記のURLの手順に従ってインストールします。

http://docs.nvidia.com/jetpack-tk1/index.html#developertools/mobile/jetpack_install.htm

内蔵Flash上のファイルシステムの更新のためにJetson TK1の接続を求められますので、USBケーブルでPCとJetson TK1を接続しましょう。

次にJetson TK1のIPアドレスとユーザ名・パスワードの入力が求められます。ユーザ名・パスワードはともに「ubuntu」になっています。
(デフォルトだと入力しなくていいような文言がありますが、ちゃんと入力しないとうまくインストールが行われませんでした。)

その後サンプルをインストールするか聞かれます。Yesを選ぶとサンプルがクロスコンパイルされ、Jetson TK1にインストールされます。

インストールが完了したらさっそくサンプルを実行してみましょう。
SSHで接続し、下記のコマンドを実行します。

ubuntu@tegra-ubuntu:~$ NVIDIA_CUDA-6.5_Samples/bin/armv7l/linux/release/gnueabihf/deviceQuery

以下のように、CUDAデバイスの情報が表示されます。

NVIDIA_CUDA-6.5_Samples/bin/armv7l/linux/release/gnueabihf/deviceQuery Starting...

 CUDA Device Query (Runtime API) version (CUDART static linking)

Detected 1 CUDA Capable device(s)

Device 0: "GK20A"
  CUDA Driver Version / Runtime Version          6.5 / 6.5
  CUDA Capability Major/Minor version number:    3.2
  Total amount of global memory:                 1743 MBytes (1827323904 bytes)
  ( 1) Multiprocessors, (192) CUDA Cores/MP:     192 CUDA Cores
  GPU Clock rate:                                852 MHz (0.85 GHz)
  Memory Clock rate:                             924 Mhz
  Memory Bus Width:                              64-bit
  L2 Cache Size:                                 131072 bytes
  Maximum Texture Dimension Size (x,y,z)         1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
  Maximum Layered 1D Texture Size, (num) layers  1D=(16384), 2048 layers
  Maximum Layered 2D Texture Size, (num) layers  2D=(16384, 16384), 2048 layers
  Total amount of constant memory:               65536 bytes
  Total amount of shared memory per block:       49152 bytes
  Total number of registers available per block: 32768
  Warp size:                                     32
  Maximum number of threads per multiprocessor:  2048
  Maximum number of threads per block:           1024
  Max dimension size of a thread block (x,y,z): (1024, 1024, 64)
  Max dimension size of a grid size    (x,y,z): (2147483647, 65535, 65535)
  Maximum memory pitch:                          2147483647 bytes
  Texture alignment:                             512 bytes
  Concurrent copy and kernel execution:          Yes with 1 copy engine(s)
  Run time limit on kernels:                     No
  Integrated GPU sharing Host Memory:            Yes
  Support host page-locked memory mapping:       Yes
  Alignment requirement for Surfaces:            Yes
  Device has ECC support:                        Disabled
  Device supports Unified Addressing (UVA):      Yes
  Device PCI Bus ID / PCI location ID:           0 / 0
  Compute Mode:
     < Default (multiple host threads can use ::cudaSetDevice() with device simultaneously) >

deviceQuery, CUDA Driver = CUDART, CUDA Driver Version = 6.5, CUDA Runtime Version = 6.5, NumDevs = 1, Device0 = GK20A
Result = PASS

雑感

まだ触り始めたばかりですが、OSが普通のUbuntuなので非常に開発しやすい感がありますね!