!
OpenCL [Open Computing Language]
とは?
ヘテロジニアス並列コンピューティング環境のための
フレームワーク
プログラミング⾔言語仕様
[OpenCL C⾔言語 ]
CPU, GPU, Cell/B.E.,DSP 等あらゆるプロセッサで動作する⾔言語
実⾏行行環境の定義
[OpenCL Runtime]
OpenCL C⾔言語で記述されたプログラムを各プロセッサで動作させるAPI
Khronos OpenCL Working Group
AMD Apple ARM Broadcom Blizzard
Codeplay Electronic Arts
Ericsson Freescale IBM
Imagination Technologies Intel Kestrel Institute Khronos
Movidia NVIDIA Nokia Qualcomm RapidMind
Renesas Seaweed Systems Sony
Symbian
Texas Instruments
PPE+SPE (Cell/B.E.) CPU+GPU CPU+DSP
!
背景(ハードウェア)
ハイブリッドシステムの流⾏行行
CPU
+DSP
PPE
+SPE(Cell/B.E.)
CPU
+GPU
ヘテロジニアスな並列実⾏行行環境 マルチコア化 SIMD演算器 [SSE, AltiVec] ⽤用途に合わせたメモリ構成 2 CPU DSP DSP DSP 制御 信号処理 CPU GPU PPE SPE SPE SPE SPE 制御 制御 HPC デスクトップ 組み込み
!
背景(ソフトウェア)
MCH T10 Device Memory (4GB) x86 Main Memory PCIE C/C++ +α CUDA拡張 C⾔言語 CUDA runtime/driver API GPU[Tesla]
様々な⼿手法
並列⾔言語・命令
並列ライブラリ
ドライバAPI
並列化コンパイラ
マルチコアの活用
ベクタ演算命令の活用
階層化されたメモリの活用
!
背景(まとめ)
既に浸透しているハイブリッドシステムの特徴
ヘテロジニアス構成
制御⽤用プロセッサ+複数の演算⽤用プロセッサ/複数の演算コア
⽤用途に適した組み合わせ
ベクタ演算命令(SIMD)
単⼀一ではないメモリ階層
それぞれに対して統⼀一されていない並列アプリケーション開発環境 制御⽤用ホスト 演算⽤用デバイス(複数) CPU(x86, PowerPC) main memory CPU/DSP/GPU/SPE device memory 制御 何とかならないか? 4!
OpenCL
の登場
The OpenCL Specification
最新版
Version: 1.0 Revision 48 [2009/10/6]
http://www.khronos.org/registry/cl/
OpenCL Architecture
ヘテロジニアス並列演算環境の定義
制御⽤用ホスト+演算⽤用デバイス
OpenCL C Programming Language
演算⽤用デバイスで動作するOpenCL C⾔言語の定義
数値演算
OpenCL Runtime
制御⽤用ホストから演算⽤用デバイスを操作するAPIの定義
各種プロセッサに対応するOpenCLの実装
→今年中にリリースされることが期待されている
!
アプリケーション開発⽅方式の統⼀一
MCH T10 Device Memory (4GB) X86 Main Memory Device Memory (4GB) PCIE OpenCL C⾔言語 マルチコア活⽤用 ベクタ操作 メモリ操作 演算⽤用デバイス側 C/C++ OpenCL Runtime API 演算デバイス制御 ・データ並列処理 ・タスク並列処理 ホスト‐デバイス間メモリ転送 制御⽤用ホスト側 プラットフォーム対応 OpenCLランタイムライブラリ CUDA対応 OpenCLコンパイラ Tesla 6 CUDA対応 OpenCLコンパイラ T10 Tesla標準化された並列処理
フレームワークを提供
!
OpenCL
のメリット
演算デバイス側 [GPU, DSP, Cell/B.E., CPU]
統⼀一された⾔言語(OpenCL C⾔言語)による記述が可能
←OpenCLコンパイラ
制御ホスト側 [CPU]
統⼀一されたAPIによる演算デバイス制御が可能
←OpenCLランタイムライブラリ
OpenCL C src 演算デバイス対応 OpenCLコンパイラGPU, DSP, Cell/B.E., CPU
演算プラットフォーム対応 OpenCLランタイムライブラリ OpenCL Runtime API 制御⽤用 src 制御 C/C++ ベンダ別API、拡張⾔言語を利⽤用する必要がなくなる!!
OpenCL
アーキテクチャ
!
プラットフォーム
ホストとデバイス
OpenCL
デバイス [
OpenCL devices
] =
演算⽤用プロセッサ
ホスト [
host
] =
制御⽤用プロセッサ
PPE+SPE
(Cell/B.E.) CPU+GPU CPU+DSP CPU DSP DSP DSP 制御 信号処理 CPU GPU PPE SPE SPE SPE SPE 制御 制御 ホスト デバイス ホスト デバイス ホスト デバイス
Tesla
!
デバイス
OpenCL
デバイス
演算ユニット[
compute units
]
プロセッシングエレメント[
processing elements
]
OpenCLデバイス 演算ユニット 演算ユニット 演算ユニット OpenCLデバイス = GPU 演算ユニット=マルチプロセッサ 演算ユニット=マルチプロセッサ 演算ユニット=マルチプロセッサ ex) NVIDIA CUDA (GPU)プロセッシングエレメント
プロセッシングエレメント = CUDA コア ホスト = CPU
!
実⾏行行モデル
ホストプログラムとカーネル
インデックス空間
ワークグループ
[
work-group
]
ワークアイテム
[
work-item
]
並列処理の単位
(関数レベル)
→OpenCL C⾔言語
OpenCLデバイス 演算ユニット 演算ユニット 演算ユニット ホスト ホストプログラム OpenCLデバイス カーネル プロセッシングエレメント ワークグループ →演算ユニットで実⾏行行 ワークアイテム →プロセッシングエレメントで実⾏行行global ID
インデックス空間内
全work-item通し番号
!
OpenCL C
⾔言語
C99
ベースの⾔言語
拡張
ベクタ型・ベクタ演算
組み込み関数
修飾⼦子
型変換
Reinterpreting
厳密な定義
型のビット幅
演算⼦子の意味
制限
関数ポインタが使えない
可変⻑⾧長配列が使えない
再帰できない
12 標準 C99 ⾔言語 拡張型 組み込み関数 拡張修飾⼦子 OpenCL C⾔言語!
カーネル
OpenCL
カーネル[
OpenCL kernel
]
OpenCL C
⾔言語で記述されたプログラム
OpenCL
コンパイラでコンパイル
オンラインコンパイル
オフラインコンパイル
ネイティブカーネル[
Native kernel
]
OpenCL
C⾔言語以外で記述されたプログラム
デバイスネイティブコンパイラでコンパイル
どちらのカーネルもOpenCLランタイムAPIで制御可能
!
メモリモデル
デバイスメモリ階層の定義
グローバルメモリ[
Global Memory
]
コンスタントメモリ[
Constant Memory
]
ローカルメモリ[
Local Memory
]
プライベートメモリ[
Private Memory
]
14 OpenCLデバイス = GPU 演算ユニット P P ローカルメモリ 演算ユニット P P ローカルメモリ グローバルメモリ コンスタントメモリ プロセッシングエレメント!
並列プログラミングモデル
データ並列プログラミングモデル
タスク並列プログラミングモデル
OpenCLデバイス 演算ユニット 演算ユニット 演算ユニット #0 #1 #2 イ ン デ ク ス 空 間 データ並列指⽰示 コマンドキュー デー タ 並 列 実 ⾏行行 OpenCLデバイス 演算ユニット 演算ユニット 演算ユニット タスク実⾏行行指⽰示 コマンドキュー タ ス ク 並 列 実 ⾏行行!
フレームワーク
OpenCL
プログラミングのための道具
OpenCL
プラットフォームレイヤー
OpenCL
の実装が認識するプラットフォーム情報を取得する
API
OpenCL
の実装が認識するデバイス情報を取得する
API
OpenCL
実⾏行行のためのコンテキスト制御
API
OpenCL
ランタイム
OpenCL
ホストプログラムがデバイスとやりとりするための
API
OpenCL
コンパイラ
OpenCL
デバイスで動作するプログラム(カーネル)を作成する
16 ホスト API OpenCLデバイス OpenCL C言語!
まとめ
OpenCL
概要
登場の背景
メリット
OpenCL
アーキテクチャ
プラットフォーム
実⾏行行モデル
メモリモデル
プログラミングモデル
フレームワーク
OpenCLデバイス 演算ユニット 演算ユニット 演算ユニット ホスト 制御 プラットフォーム API OpenCL C言語!
OpenCL
の実装状況
NVIDIA
正式リリース
CUDA2.3
対応GPUで利⽤用可能
Apple
Snow Leopard
標準装備
AMD
ATI Stream SDK 2.0 β版
IBM
OpenCL Development Kit α版 (QS-22/JS-23)
Cell/B.E., POWER系
Fixstars
FOXC(Fixstars OpenCL Cross Compiler) β
版
設⽴立立 :2002年8⽉月8⽇日 資本⾦金金 :2億1,055万円 社員数 :79名(2009/10⽉月 現在) 所在地 :東京、カリフォルニア 主要取引先 :株式会社東芝 ソニー株式会社 ⽇日本アイ・ビー・エム株式会社 NVIDIA Corporation みずほ証券株式会社 三菱総合研究所 宇宙航空研究開発機構(JAXA) 産業技術総合研究所
!
フィックスターズについて
フィックスターズは、
マルチコアプロセッサ
におけるソフ
トウェア開発のリーディングカンパニーです。
既存のプログラムを活⽤用したマルチコア向けアプリケー
ション開発を提供しています。独⾃自のノウハウにより、短
期間でマルチコア環境へ移植、プログラムの最適化を⾏行行い、
⾼高速なアプリケーションを実現します。
!
マルチコア向け最適化サービス
20 お客様 弊社 オリジナルコードを解析 し計算ボトルネックを特 定、移植⽅方針や利⽤用する ハードウェアを決定 GPU またはCell/B.E. への移植、コアへの 分散、SIMD化 移植後のコードの実製品 への組み込み作業⽀支援や 技術トランスファー オリジナルコードのご提供 最適化サービス プロファイリング 移植・最適化 サポート!
技術者向けの様々な活動
いち早くマルチコアプログラミングに取り組んで
いる当社では、マルチコアに関する様々な技術情
報を公開しています。
NVIDIA CUDA Information Site
NVIDIA
のCUDAインストールガイド、プログラミングチュート
リアルなどの情報を公開
http://gpu.fixstars.com
各種プログラミングセミナー
■
OpenCL
■
CUDA
■
Cell/B.E.
書籍
「マルチコアCPUのための並列プログラミング」
「ASCII.technologies 2009/12
!
OpenCL
⼊入⾨門本
2010
年1⽉月22⽇日 発売予定
!
OpenCL
への取り組み
効率的でポータビリティの⾼高いソフトウェアを実現する
OpenCL
ベースの製品やサービスを提供しています。
FOXC
OpenCLソースファイルを⼊入⼒力力とするSource to Sourceコンパイラ
OpenCL Source Code
FOXC
HW依存Code
バックエンドコンパイラ
Executable FOXC Runtime Library
β
版無償提供中
Fixstarsʼ’ OpenCL Solution
24
OpenCL Compiler For Intel
Multi-core Release date: 2010/4 Release date: 2010/3
OpenCL
CompilerFor Cell/B.E.
OpenCL Compiler
For custom chip
Original
Code
OpenCL
Code
!
Hybrid FOXC
様々なHost – Device 間接続に対応したOpenCL実⾏行行環境に対応
x86ホスト-x86デバイス側コンパイラ: FOXC
デバイス側コンパイラ: Chip vendor’s OpenCL
Runtime Bridge Service:2つの異なるOpenCL実⾏行行形式の接続を⾏行行う x86 – x86+OpenCL(GPU) bridge 想定するハードウエア: x86-Teslaクラスターシステム, x86クラスタ x86 GPU,Other Chips Compiler for x86 Device x86 Host Runtime Library Compiler for GPU Device GPU Host Runtime Library x86-GPUホスト
OpenCL Runtime Bridge Service
Infiniband, PCIe,
!
OpenCL Eco-system
OpenCL
環境を整備し、利⽤用しやすい開発環境の提供を
⽬目指します
統合開発環境
Eclipse べースのOpenCLプラグイン 中間⽣生成コードのデバッグ機能 Yellow Dog Enterprise Linux for Multi Core
ハイブリッドシステムのホストとなるX86サーバーをサポート 各種OpenCLコンパイラ、ライブラリ、のプリインストール CUDA等をプリインストール・サポート(商⽤用Linux OS初) OpenCL開発環境と、Linux環境の統⼀一的な技術サポート
26
OpenCLプログラミングセミナー
1⽇日間の実践コース (10:00 ‒ 17:00) ⼀一般 40,000円 早割り 32,000円(2010/1/6までに申し込み) Agenda OpenCL概要 OpenCLアーキテクチャ・⽤用語について解説 OpenCL⽂文法 OpenCL C⾔言語の⽂文法について解説 FOXC (Fixstars OpenCL Cross Compiler) 概要と使⽤用⽅方法
FOXCの構成・使い⽅方について解説 OpenCL プログラミング演習 基本的なOpenCLアプリケーション作成⽅方法の解説 OpenCLカーネルプログラムの作成 ホストプログラムの作成 OpenCLアプリケーションの性能を引き出すテクニックについて解説 ベクタ処理 データ並列処理 タスク並列処理