SlideShare a Scribd company logo
OpenCLに触れてみよう

          2011/10/29 You&I
          一般公開バージョン


    わんくま同盟 名古屋勉強会 #19
自己紹介

•   H/N   You&I(読み:ユーアンドアイ)
•   出身    生まれも育ちも名古屋市
•   年齢    30代前半
•   本職    商学部出身の職業プログラマ
•   言語    C++, C#,
          VisualBasic 6.0, 日本語COBOL
• 日記      http://d.hatena.ne.jp/youandi/
• 所属      名古屋アジャイル勉強会
          プログラミング生放送 名古屋支部
          わんくま同盟
               わんくま同盟 名古屋勉強会 #19
ナゼ、イッタイ。

• 2010/03/13に開催した名古屋勉強会#12で
  「Cell/B.Eプログラミング事始め」というセッショ
  ンを発表しました。
• その発表で時代はGPGPUだよ!って締めた
  んですが、それから放置してました。
• 最近OpenCLってGPUが無くても実行できる
  環境がある事を知ったり。
• 来年のお仕事でGPGPUを使いそう。


          わんくま同盟 名古屋勉強会 #19
用語集

• GPGPU
  – General Purpose Graphic Processing Units。
    GPUを画像処理以外の目的で利用する事。
• オフラインコンパイラ
  – デバイス上で実行するOpenCLのカーネルプログ
    ラムをプログラム実行中ではなく、実行前に作成
    する為のコンパイラ。LLVMが使われる事が多い。
• DSP(Digital Signal Processor)
  – デジタル信号処理に特化したプロセッサ。高速に
    計算を行う事ができる。
                わんくま同盟 名古屋勉強会 #19
Agenda

1.   OpenCLとは
2.   OpenCLの環境構築
3.   OpenCLの構造
4.   OpenCLを使ったデモ
5.   まとめ




            わんくま同盟 名古屋勉強会 #19
1. OpenCLとは

1.   OpenCLとは
2.   OpenCLの環境構築
3.   OpenCLの構造
4.   OpenCLを使ったデモ
5.   まとめ




            わんくま同盟 名古屋勉強会 #19
1. OpenCLとは(1/6)

• OpenCLとはOpen Computing Languageの
  略称。
• Apple社により提案された後、OpenGL等の
  標準化団体 KHRONOSグループにより標準
  が策定されている。
 – http://www.khronos.org/opencl/




               わんくま同盟 名古屋勉強会 #19
1. OpenCLとは(2/6)

• OpenCLはマルチコアCPU・GPU・Cellプロ
  セッサ・DSP等の異種混在のプロセッサーを
  利用する並列コンピューティングの為のフレー
  ムワーク。
• OpenCLを利用する事により、様々な計算資
  源に共通のインターフェースでアクセス・制御
  が可能となる。
• C99規格をベースとした「OpenCL C言語」に
  よるカーネル記述にてデバイス向けプログラ
  ムの開発を行う。
         わんくま同盟 名古屋勉強会 #19
1. OpenCLとは(3/6)

• OpenCLの歴史
 – Khronos OpenCL API Registry
   • http://www.khronos.org/registry/cl/
 – 2009年4月:OpenCL 1.0
 – 2010年6月:OpenCL 1.1
 – 2010年6月:OpenCL 1.1 C++ Bindings




                 わんくま同盟 名古屋勉強会 #19
1. OpenCLとは(4/6)

• OpenCLが出てきた背景
 – 様々なPlatform向けのSDK
 – CPU演算(CPU毎)
   • 3DNow!, MMX, SSE, AES-NI, AVX・・・
 – Cell/B.E.演算(デバイス毎)
   • Cell SDK
 – GPGPU演算(ベンダー毎)
   • ATI Stream
   • CUDA
 – ETC, …

                  わんくま同盟 名古屋勉強会 #19
1. OpenCLとは(5/6)

• 1デバイスにつき1SDK・・・。
 – まあこれは仕方ない
• Platform毎にAPI仕様が異なる・・・。
 – これは何とかして欲しい
• そこで出てきたのがOpenCL
 – デバイスにアクセスする為のAPI仕様を統一し、
   様々なPlatform向けに開発をし易くする為のフ
   レームワーク。
 – デバイスの制御を行うだけではなく、並列処理を
   行う為のAPIも提供する。
          わんくま同盟 名古屋勉強会 #19
1. OpenCLとは(6/6)

• OpenCLの発展性
 – 類似技術
   • ATI Stream:AMD
   • CUDA:NVIDIA
   • DirectCompute:Microsoft DirectX 11
 – WebCL
   • ブラウザ上でOpenGLを利用できるようにするWebGL
     に影響を受けて?ブラウザ上でOpenCLを利用できる
     ようにするWebCLという規格も策定中。
      – http://www.khronos.org/webcl/



                  わんくま同盟 名古屋勉強会 #19
2. OpenCLの環境構築

1.   OpenCLとは
2.   OpenCLの環境構築
3.   OpenCLの構造
4.   OpenCLを使ったデモ
5.   まとめ




            わんくま同盟 名古屋勉強会 #19
2. OpenCLの環境構築(1/6)

• 実行ハードウェアは?
 – AMD社 RADEONシリーズGPU
   • RADEON HD4xx0以降
   • http://ja.wikipedia.org/wiki/ATI_FirePro
 – NVIDIA社 GeForceシリーズGPU
   • http://developer.nvidia.com/cuda-gpus
 – Intel社 CoreシリーズCPU
   • SSE4.1対応品(E8x00以降, CPU上で実行時)
   • SSE3対応品(他のGPU上で実行時)



                  わんくま同盟 名古屋勉強会 #19
2. OpenCLの環境構築(2/6)

• OS及びコンパイラは?
 – OpenCL C言語のコンパイラは後述
 – Microsoft Windows
   • 利用するSDKによってはVista以降が必要
   • VisualC++(C++, C言語)
 – Linux
   • gcc(C++, C言語)
 – Apple MacOS X
   • MacOS X 10.6(Snow Leopard)以降
   • Xcode(C++, C言語, Objective-C)

              わんくま同盟 名古屋勉強会 #19
2. OpenCLの環境構築(3/6)

• OpenCL SDKの入手
 – AMD社:AMD APP SDK
   • http://developer.amd.com/appsdk
 – NVIDIA社:CUDA Toolkit, Parallel Nsight
   • http://developer.nvidia.com/cuda-toolkit
   • http://developer.nvidia.com/nvidia-parallel-nsight
 – Intel社:Intel OpenCL SDK
   • http://www.intel.com/go/opencl
 – Apple社:OSに付属(MacOS X 10.6以降)
   • /System/Library/Frameworks/OpenCL.framework

                 わんくま同盟 名古屋勉強会 #19
2. OpenCLの環境構築(4/6)

• 各SDKの特徴(1/2) ※Macは割愛
                               Visual          オフライン   その他
                         C++            デバッガ
     SDK名称                     Studio          コンパイラ   ツール
                         対応              付属
                                対応              付属     付属
AMD APP SDK
(Accelerated Parallel
Processing)
                         ○      ×       ×       ○      ○
CUDA Toolkit
                         ×      ×       ×       ○      ○
Parallel Nsight
(CUDA Toolkit+α)         ×      ○       ○       ○      ○
Intel OpenCL SDK
                         ○      ×       ×       ○      ×
                           わんくま同盟 名古屋勉強会 #19
2. OpenCLの環境構築(5/6)

• 各SDKの特徴(2/2) ※Macは割愛
                        H/Wなし
                                GPU   CPU
     SDK名称              のインス                  -   -
                                実行    実行
                         トール
AMD APP SDK
(Accelerated Parallel
Processing)
                         ○      ○     ○       -   -
CUDA Toolkit
                         ○      ○     ○       -   -
Parallel Nsight
(CUDA Toolkit+α)         ○      ○     ○       -   -
Intel OpenCL SDK
                         ×      ×     ○       -   -
                           わんくま同盟 名古屋勉強会 #19
2. OpenCLの環境構築(6/6)

• インストール先情報
 – AMD APP SDK v2.5
    • include : %ProgramFiles(x86)%¥AMD APP¥
    • sample : %UserProfile%¥My Documents¥AMD APP¥
 – Parallel Nsight v2.0
    • include : %ProgramFiles%¥NVIDIA GPU Computing
      Toolkit¥CUDA¥v4.0¥
    • sample : %ProgramFiles(x86)%¥NVIDIA Parallel Nsight
      2.0¥Samples¥
 – Intel OpenCL SDK v1.5
    • include : %ProgramFiles(x86)%¥Intel¥OpenCL SDK¥1.1¥
    • sample : %SystemDrive%¥Users¥Public¥Documents¥Intel¥O
      penCL SDK¥1.1¥

                   わんくま同盟 名古屋勉強会 #19
3. OpenCLの構造

1.   OpenCLとは
2.   OpenCLの環境構築
3.   OpenCLの構造
4.   OpenCLを使ったデモ
5.   まとめ




            わんくま同盟 名古屋勉強会 #19
3. OpenCLの構造(1/14)

• OpenCLデバイスのイメージ              OpenCLデバイス

 – OpenCLデバイスは1つ以上の            CU

   計算ユニット(CU:Computation        PE   PE   ・・・
   Unit)を持つ。
 – 計算ユニットは1つ以上の処理              CU

   エレメント(PE:Processing          PE   PE   ・・・
   Unit)で構成される。
 – これらのユニットをどのように              CU
   使うかは実装者が指示するか                PE   PE   ・・・
   OpenCLに任せる事も可能。

            わんくま同盟 名古屋勉強会 #19
3. OpenCLの構造(2/14)

• 処理の流れ(1/2)
 1.   ホストプログラム起動
 2.   デバイスハンドル取得
 3.   コマンドキュー作成
 4.   カーネルプログラムをメモリ上に読み込み
 5.   プログラムオブジェクト作成
 6.   カーネルオブジェクト作成
 7.   カーネルオブジェクトをコマンドキューに登録
 8.   コマンドキューから実行結果を取り出す

            わんくま同盟 名古屋勉強会 #19
3. OpenCLの構造(3/14)

• 処理の流れ(2/2)
                      8. メモリ
                     オブジェクト

           3. コマンド             6. カーネル
             キュー      7. 登録    オブジェクト


                               5. プログラム
           2. デバイス
                                オブジェクト



  1. ホスト                                  4. カーネル
 プログラム                                    プログラム


                わんくま同盟 名古屋勉強会 #19
3. OpenCLの構造(4/14)

• OpenCLのAPI(1/11)
  – システムで利用可能なPlatformのIDを取得
  cl_int clGetPlatformIDs(
     cl_uint          /* num_entries */,
     cl_platform_id * /* platforms */,
     cl_uint *        /* num_platforms */
  );




               わんくま同盟 名古屋勉強会 #19
3. OpenCLの構造(5/14)

• OpenCLのAPI(2/11)
  – Platformに含まれるデバイスIDのリストを返す
  cl_int clGetDeviceIDs(
     cl_platform_id   /* platform */,
     cl_device_type   /* device_type */,
     cl_uint          /* num_entries */,
     cl_device_id *   /* devices */,
     cl_uint *        /* num_devices */
  );

              わんくま同盟 名古屋勉強会 #19
3. OpenCLの構造(6/14)

• OpenCLのAPI(3/11)
  – デバイスを指定してコンテキストを作成
  cl_context clCreateContext(
     const cl_context_properties * /* properties */,
     cl_uint                /* num_devices */,
     const cl_device_id * /* devices */,
     void (CL_CALLBACK * /* pfn_notify */)(
              const char *, const void *, size_t, void *),
     void *                 /* user_data */,
     cl_int *               /* errcode_ret */
  );
                     わんくま同盟 名古屋勉強会 #19
3. OpenCLの構造(7/14)

• OpenCLのAPI(4/11)
  – 与えられたコンテキスト・デバイス用のキューを作
     成
  cl_command_queue clCreateCommandQueue(
     cl_context     /* context */,
     cl_device_id   /* device */,
     cl_command_queue_properties
                    /* properties */,
     cl_int *       /* errcode_ret */
  );
             わんくま同盟 名古屋勉強会 #19
3. OpenCLの構造(8/14)

• OpenCLのAPI(5/11)
  – バッファメモリオブジェクトを作成
  cl_mem clCreateBuffer(
     cl_context    /* context */,
     cl_mem_flags  /* flags */,
     size_t        /* size */,
     void *        /* host_ptr */,
     cl_int *      /* errcode_ret */
  );

                わんくま同盟 名古屋勉強会 #19
3. OpenCLの構造(9/14)

• OpenCLのAPI(6/11)
  – カーネルのソースコードからプログラムオブジェク
     トを作成
  cl_program clCreateProgramWithSource(
     cl_context      /* context */,
     cl_uint         /* count */,
     const char **   /* strings */,
     const size_t *  /* lengths */,
     cl_int *        /* errcode_ret */
  );
             わんくま同盟 名古屋勉強会 #19
3. OpenCLの構造(10/14)

• OpenCLのAPI(7/11)
  – 指定されたプログラムオブジェクトをビルド
  cl_int clBuildProgram(
     cl_program           /* program */,
     cl_uint              /* num_devices */,
     const cl_device_id * /* device_list */,
     const char *         /* options */,
     void (CL_CALLBACK * /* pfn_notify */)(
             cl_program, void * ),
     void *               /* user_data */
  );
                   わんくま同盟 名古屋勉強会 #19
3. OpenCLの構造(11/14)

• OpenCLのAPI(8/11)
  – ビルドしたプログラムオブジェクトからカーネルを
     作成する
  cl_kernel clCreateKernel(
     cl_program /* program */,
     const char * /* kernel_name */,
     cl_int *     /* errcode_ret */
  );



            わんくま同盟 名古屋勉強会 #19
3. OpenCLの構造(12/14)

• OpenCLのAPI(9/11)
  – カーネルの引数をセットする
  cl_int clSetKernelArg(
     cl_kernel    /* kernel */,
     cl_uint      /* arg_index */,
     size_t       /* arg_size */,
     const void * /* arg_value */
  );



                  わんくま同盟 名古屋勉強会 #19
3. OpenCLの構造(13/14)

• OpenCLのAPI(10/11)
  – カーネルを実行する為のコマンドをキューに登録
  cl_int clEnqueueTask(
     cl_command_queue/* command_queue */,
     cl_kernel         /* kernel */,
     cl_uint     /* num_events_in_wait_list */,
     const cl_event * /* event_wait_list */,
     cl_event *        /* event */
  );

                わんくま同盟 名古屋勉強会 #19
3. OpenCLの構造(14/14)

• OpenCLのAPI(11/11)
  – バッファオブジェクトからデータを読み込む為のコ
    マンドをキューに登録
  cl_int clEnqueueReadBuffer(
     cl_command_queue           /* command_queue */,
     cl_mem                     /* buffer */,
     cl_bool                    /* blocking_read */,
     size_t                     /* offset */,
     size_t                     /* cb */,
     void *                     /* ptr */,
     cl_uint                    /* num_events_in_wait_list */,
     const cl_event *           /* event_wait_list */,
     cl_event *                 /* event */
  );

                       わんくま同盟 名古屋勉強会 #19
Agenda

1.   OpenCLとは
2.   OpenCLの環境構築
3.   OpenCLの構造
4.   OpenCLを使ったデモ
5.   まとめ




            わんくま同盟 名古屋勉強会 #19
5. OpenCLを使ったデモ

• 何かデモする




           わんくま同盟 名古屋勉強会 #19
5.まとめ

1.   OpenCLとは
2.   OpenCLの環境構築
3.   OpenCLの構造
4.   OpenCLを使ったデモ
5.   まとめ




            わんくま同盟 名古屋勉強会 #19
5. まとめ

• OpenCLが出てきた背景や今後について話を
  しました。
• ホスト側の制御処理が統一されるのは嬉しい。
• デバイス側はデバイスによる機能サポートに
  よって制限をうけるが汎用的に使えるのは嬉
  しい。
• 但し、あるデバイスの性能をフルに活かすに
  はやはり専用APIを使うのが一番速い。


        わんくま同盟 名古屋勉強会 #19
参考情報等

• OpenCL入門 - マルチコアCPU・GPUのため
  の並列プログラミング
 – ISBN:9784844328148, インプレスジャパン
• OpenCL入門 - GPU&マルチコアCPU並列
  プログラミング
 – ISBN:9784798026084, 秀和システム




            わんくま同盟 名古屋勉強会 #19

More Related Content

What's hot

いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
Fixstars Corporation
 
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
UnityTechnologiesJapan002
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
Motohiro KOSAKI
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
Motonori Shindo
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
京大 マイコンクラブ
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
Etsuji Nakai
 
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
Preferred Networks
 
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Preferred Networks
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
Masahiro Sakai
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
murachue
 
Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#
Yoshifumi Kawai
 
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Masahito Zembutsu
 
MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門
torisoup
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
Yuta Imai
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
UnityTechnologiesJapan002
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
Yoshifumi Kawai
 
Protocol Buffers 入門
Protocol Buffers 入門Protocol Buffers 入門
Protocol Buffers 入門
Yuichi Ito
 

What's hot (20)

いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例いまさら聞けないarmを使ったNEONの基礎と活用事例
いまさら聞けないarmを使ったNEONの基礎と活用事例
 
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
C#×LLVM=アセンブラ!? 〜詳説・Burstコンパイラー〜
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
 
Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門Linux女子部 systemd徹底入門
Linux女子部 systemd徹底入門
 
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
Kubernetes Service Account As Multi-Cloud Identity / Cloud Native Security Co...
 
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#
 
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編 Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編
 
MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門
 
オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫オンラインゲームの仕組みと工夫
オンラインゲームの仕組みと工夫
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
Protocol Buffers 入門
Protocol Buffers 入門Protocol Buffers 入門
Protocol Buffers 入門
 

Similar to OpenCLに触れてみよう

PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門Yosuke Onoue
 
PEZY-SC programming overview
PEZY-SC programming overviewPEZY-SC programming overview
PEZY-SC programming overview
Ryo Sakamoto
 
2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境
2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境
2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境
智啓 出川
 
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
Ryuuta Tsunashima
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF
Atomu Hidaka
 
Cell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始めCell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始め
You&I
 
GTC Japan 2017
GTC Japan 2017GTC Japan 2017
GTC Japan 2017
Hitoshi Sato
 
Introduction to OpenCL (Japanese, OpenCLの基礎)
Introduction to OpenCL (Japanese, OpenCLの基礎)Introduction to OpenCL (Japanese, OpenCLの基礎)
Introduction to OpenCL (Japanese, OpenCLの基礎)
Takahiro Harada
 
Cq tse-fm3セミナー資料
Cq tse-fm3セミナー資料Cq tse-fm3セミナー資料
Cq tse-fm3セミナー資料Masaki Muranaka
 
2013 06-22osc nagoya-netmf
2013 06-22osc nagoya-netmf2013 06-22osc nagoya-netmf
2013 06-22osc nagoya-netmf
Atomu Hidaka
 
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
Keiji Ariyama
 
Andoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かすAndoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かすshobomaru
 
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
Masaki Muranaka
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF
Atomu Hidaka
 
OpenCV2.2 Install Guide ver.0.5
OpenCV2.2 Install Guide ver.0.5OpenCV2.2 Install Guide ver.0.5
OpenCV2.2 Install Guide ver.0.5
Tsukasa Sugiura
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
Preferred Networks
 
IBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみたIBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみた
You&I
 
pkgsrc とは何か? - よもやま話
pkgsrc とは何か? - よもやま話pkgsrc とは何か? - よもやま話
pkgsrc とは何か? - よもやま話
Akio OBATA
 
C#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + ClooC#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + Cloo
aokomoriuta
 
170622 02
170622 02170622 02
170622 02
openrtm
 

Similar to OpenCLに触れてみよう (20)

PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
 
PEZY-SC programming overview
PEZY-SC programming overviewPEZY-SC programming overview
PEZY-SC programming overview
 
2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境
2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境
2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境
 
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
 
2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF2014 1018 OSC-Fall Tokyo NETMF
2014 1018 OSC-Fall Tokyo NETMF
 
Cell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始めCell/B.E. プログラミング事始め
Cell/B.E. プログラミング事始め
 
GTC Japan 2017
GTC Japan 2017GTC Japan 2017
GTC Japan 2017
 
Introduction to OpenCL (Japanese, OpenCLの基礎)
Introduction to OpenCL (Japanese, OpenCLの基礎)Introduction to OpenCL (Japanese, OpenCLの基礎)
Introduction to OpenCL (Japanese, OpenCLの基礎)
 
Cq tse-fm3セミナー資料
Cq tse-fm3セミナー資料Cq tse-fm3セミナー資料
Cq tse-fm3セミナー資料
 
2013 06-22osc nagoya-netmf
2013 06-22osc nagoya-netmf2013 06-22osc nagoya-netmf
2013 06-22osc nagoya-netmf
 
Android Studioの魅力
Android Studioの魅力Android Studioの魅力
Android Studioの魅力
 
Andoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かすAndoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かす
 
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
 
2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF2015 0227 OSC-Spring Tokyo NETMF
2015 0227 OSC-Spring Tokyo NETMF
 
OpenCV2.2 Install Guide ver.0.5
OpenCV2.2 Install Guide ver.0.5OpenCV2.2 Install Guide ver.0.5
OpenCV2.2 Install Guide ver.0.5
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 
IBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみたIBM Rational Team Concertに触れてみた
IBM Rational Team Concertに触れてみた
 
pkgsrc とは何か? - よもやま話
pkgsrc とは何か? - よもやま話pkgsrc とは何か? - よもやま話
pkgsrc とは何か? - よもやま話
 
C#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + ClooC#でOpenCL with OpenTK + Cloo
C#でOpenCL with OpenTK + Cloo
 
170622 02
170622 02170622 02
170622 02
 

Recently uploaded

MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
CRI Japan, Inc.
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 

Recently uploaded (15)

MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LBカタログ
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 

OpenCLに触れてみよう

  • 1. OpenCLに触れてみよう 2011/10/29 You&I 一般公開バージョン わんくま同盟 名古屋勉強会 #19
  • 2. 自己紹介 • H/N You&I(読み:ユーアンドアイ) • 出身 生まれも育ちも名古屋市 • 年齢 30代前半 • 本職 商学部出身の職業プログラマ • 言語 C++, C#, VisualBasic 6.0, 日本語COBOL • 日記 http://d.hatena.ne.jp/youandi/ • 所属 名古屋アジャイル勉強会 プログラミング生放送 名古屋支部 わんくま同盟 わんくま同盟 名古屋勉強会 #19
  • 3. ナゼ、イッタイ。 • 2010/03/13に開催した名古屋勉強会#12で 「Cell/B.Eプログラミング事始め」というセッショ ンを発表しました。 • その発表で時代はGPGPUだよ!って締めた んですが、それから放置してました。 • 最近OpenCLってGPUが無くても実行できる 環境がある事を知ったり。 • 来年のお仕事でGPGPUを使いそう。 わんくま同盟 名古屋勉強会 #19
  • 4. 用語集 • GPGPU – General Purpose Graphic Processing Units。 GPUを画像処理以外の目的で利用する事。 • オフラインコンパイラ – デバイス上で実行するOpenCLのカーネルプログ ラムをプログラム実行中ではなく、実行前に作成 する為のコンパイラ。LLVMが使われる事が多い。 • DSP(Digital Signal Processor) – デジタル信号処理に特化したプロセッサ。高速に 計算を行う事ができる。 わんくま同盟 名古屋勉強会 #19
  • 5. Agenda 1. OpenCLとは 2. OpenCLの環境構築 3. OpenCLの構造 4. OpenCLを使ったデモ 5. まとめ わんくま同盟 名古屋勉強会 #19
  • 6. 1. OpenCLとは 1. OpenCLとは 2. OpenCLの環境構築 3. OpenCLの構造 4. OpenCLを使ったデモ 5. まとめ わんくま同盟 名古屋勉強会 #19
  • 7. 1. OpenCLとは(1/6) • OpenCLとはOpen Computing Languageの 略称。 • Apple社により提案された後、OpenGL等の 標準化団体 KHRONOSグループにより標準 が策定されている。 – http://www.khronos.org/opencl/ わんくま同盟 名古屋勉強会 #19
  • 8. 1. OpenCLとは(2/6) • OpenCLはマルチコアCPU・GPU・Cellプロ セッサ・DSP等の異種混在のプロセッサーを 利用する並列コンピューティングの為のフレー ムワーク。 • OpenCLを利用する事により、様々な計算資 源に共通のインターフェースでアクセス・制御 が可能となる。 • C99規格をベースとした「OpenCL C言語」に よるカーネル記述にてデバイス向けプログラ ムの開発を行う。 わんくま同盟 名古屋勉強会 #19
  • 9. 1. OpenCLとは(3/6) • OpenCLの歴史 – Khronos OpenCL API Registry • http://www.khronos.org/registry/cl/ – 2009年4月:OpenCL 1.0 – 2010年6月:OpenCL 1.1 – 2010年6月:OpenCL 1.1 C++ Bindings わんくま同盟 名古屋勉強会 #19
  • 10. 1. OpenCLとは(4/6) • OpenCLが出てきた背景 – 様々なPlatform向けのSDK – CPU演算(CPU毎) • 3DNow!, MMX, SSE, AES-NI, AVX・・・ – Cell/B.E.演算(デバイス毎) • Cell SDK – GPGPU演算(ベンダー毎) • ATI Stream • CUDA – ETC, … わんくま同盟 名古屋勉強会 #19
  • 11. 1. OpenCLとは(5/6) • 1デバイスにつき1SDK・・・。 – まあこれは仕方ない • Platform毎にAPI仕様が異なる・・・。 – これは何とかして欲しい • そこで出てきたのがOpenCL – デバイスにアクセスする為のAPI仕様を統一し、 様々なPlatform向けに開発をし易くする為のフ レームワーク。 – デバイスの制御を行うだけではなく、並列処理を 行う為のAPIも提供する。 わんくま同盟 名古屋勉強会 #19
  • 12. 1. OpenCLとは(6/6) • OpenCLの発展性 – 類似技術 • ATI Stream:AMD • CUDA:NVIDIA • DirectCompute:Microsoft DirectX 11 – WebCL • ブラウザ上でOpenGLを利用できるようにするWebGL に影響を受けて?ブラウザ上でOpenCLを利用できる ようにするWebCLという規格も策定中。 – http://www.khronos.org/webcl/ わんくま同盟 名古屋勉強会 #19
  • 13. 2. OpenCLの環境構築 1. OpenCLとは 2. OpenCLの環境構築 3. OpenCLの構造 4. OpenCLを使ったデモ 5. まとめ わんくま同盟 名古屋勉強会 #19
  • 14. 2. OpenCLの環境構築(1/6) • 実行ハードウェアは? – AMD社 RADEONシリーズGPU • RADEON HD4xx0以降 • http://ja.wikipedia.org/wiki/ATI_FirePro – NVIDIA社 GeForceシリーズGPU • http://developer.nvidia.com/cuda-gpus – Intel社 CoreシリーズCPU • SSE4.1対応品(E8x00以降, CPU上で実行時) • SSE3対応品(他のGPU上で実行時) わんくま同盟 名古屋勉強会 #19
  • 15. 2. OpenCLの環境構築(2/6) • OS及びコンパイラは? – OpenCL C言語のコンパイラは後述 – Microsoft Windows • 利用するSDKによってはVista以降が必要 • VisualC++(C++, C言語) – Linux • gcc(C++, C言語) – Apple MacOS X • MacOS X 10.6(Snow Leopard)以降 • Xcode(C++, C言語, Objective-C) わんくま同盟 名古屋勉強会 #19
  • 16. 2. OpenCLの環境構築(3/6) • OpenCL SDKの入手 – AMD社:AMD APP SDK • http://developer.amd.com/appsdk – NVIDIA社:CUDA Toolkit, Parallel Nsight • http://developer.nvidia.com/cuda-toolkit • http://developer.nvidia.com/nvidia-parallel-nsight – Intel社:Intel OpenCL SDK • http://www.intel.com/go/opencl – Apple社:OSに付属(MacOS X 10.6以降) • /System/Library/Frameworks/OpenCL.framework わんくま同盟 名古屋勉強会 #19
  • 17. 2. OpenCLの環境構築(4/6) • 各SDKの特徴(1/2) ※Macは割愛 Visual オフライン その他 C++ デバッガ SDK名称 Studio コンパイラ ツール 対応 付属 対応 付属 付属 AMD APP SDK (Accelerated Parallel Processing) ○ × × ○ ○ CUDA Toolkit × × × ○ ○ Parallel Nsight (CUDA Toolkit+α) × ○ ○ ○ ○ Intel OpenCL SDK ○ × × ○ × わんくま同盟 名古屋勉強会 #19
  • 18. 2. OpenCLの環境構築(5/6) • 各SDKの特徴(2/2) ※Macは割愛 H/Wなし GPU CPU SDK名称 のインス - - 実行 実行 トール AMD APP SDK (Accelerated Parallel Processing) ○ ○ ○ - - CUDA Toolkit ○ ○ ○ - - Parallel Nsight (CUDA Toolkit+α) ○ ○ ○ - - Intel OpenCL SDK × × ○ - - わんくま同盟 名古屋勉強会 #19
  • 19. 2. OpenCLの環境構築(6/6) • インストール先情報 – AMD APP SDK v2.5 • include : %ProgramFiles(x86)%¥AMD APP¥ • sample : %UserProfile%¥My Documents¥AMD APP¥ – Parallel Nsight v2.0 • include : %ProgramFiles%¥NVIDIA GPU Computing Toolkit¥CUDA¥v4.0¥ • sample : %ProgramFiles(x86)%¥NVIDIA Parallel Nsight 2.0¥Samples¥ – Intel OpenCL SDK v1.5 • include : %ProgramFiles(x86)%¥Intel¥OpenCL SDK¥1.1¥ • sample : %SystemDrive%¥Users¥Public¥Documents¥Intel¥O penCL SDK¥1.1¥ わんくま同盟 名古屋勉強会 #19
  • 20. 3. OpenCLの構造 1. OpenCLとは 2. OpenCLの環境構築 3. OpenCLの構造 4. OpenCLを使ったデモ 5. まとめ わんくま同盟 名古屋勉強会 #19
  • 21. 3. OpenCLの構造(1/14) • OpenCLデバイスのイメージ OpenCLデバイス – OpenCLデバイスは1つ以上の CU 計算ユニット(CU:Computation PE PE ・・・ Unit)を持つ。 – 計算ユニットは1つ以上の処理 CU エレメント(PE:Processing PE PE ・・・ Unit)で構成される。 – これらのユニットをどのように CU 使うかは実装者が指示するか PE PE ・・・ OpenCLに任せる事も可能。 わんくま同盟 名古屋勉強会 #19
  • 22. 3. OpenCLの構造(2/14) • 処理の流れ(1/2) 1. ホストプログラム起動 2. デバイスハンドル取得 3. コマンドキュー作成 4. カーネルプログラムをメモリ上に読み込み 5. プログラムオブジェクト作成 6. カーネルオブジェクト作成 7. カーネルオブジェクトをコマンドキューに登録 8. コマンドキューから実行結果を取り出す わんくま同盟 名古屋勉強会 #19
  • 23. 3. OpenCLの構造(3/14) • 処理の流れ(2/2) 8. メモリ オブジェクト 3. コマンド 6. カーネル キュー 7. 登録 オブジェクト 5. プログラム 2. デバイス オブジェクト 1. ホスト 4. カーネル プログラム プログラム わんくま同盟 名古屋勉強会 #19
  • 24. 3. OpenCLの構造(4/14) • OpenCLのAPI(1/11) – システムで利用可能なPlatformのIDを取得 cl_int clGetPlatformIDs( cl_uint /* num_entries */, cl_platform_id * /* platforms */, cl_uint * /* num_platforms */ ); わんくま同盟 名古屋勉強会 #19
  • 25. 3. OpenCLの構造(5/14) • OpenCLのAPI(2/11) – Platformに含まれるデバイスIDのリストを返す cl_int clGetDeviceIDs( cl_platform_id /* platform */, cl_device_type /* device_type */, cl_uint /* num_entries */, cl_device_id * /* devices */, cl_uint * /* num_devices */ ); わんくま同盟 名古屋勉強会 #19
  • 26. 3. OpenCLの構造(6/14) • OpenCLのAPI(3/11) – デバイスを指定してコンテキストを作成 cl_context clCreateContext( const cl_context_properties * /* properties */, cl_uint /* num_devices */, const cl_device_id * /* devices */, void (CL_CALLBACK * /* pfn_notify */)( const char *, const void *, size_t, void *), void * /* user_data */, cl_int * /* errcode_ret */ ); わんくま同盟 名古屋勉強会 #19
  • 27. 3. OpenCLの構造(7/14) • OpenCLのAPI(4/11) – 与えられたコンテキスト・デバイス用のキューを作 成 cl_command_queue clCreateCommandQueue( cl_context /* context */, cl_device_id /* device */, cl_command_queue_properties /* properties */, cl_int * /* errcode_ret */ ); わんくま同盟 名古屋勉強会 #19
  • 28. 3. OpenCLの構造(8/14) • OpenCLのAPI(5/11) – バッファメモリオブジェクトを作成 cl_mem clCreateBuffer( cl_context /* context */, cl_mem_flags /* flags */, size_t /* size */, void * /* host_ptr */, cl_int * /* errcode_ret */ ); わんくま同盟 名古屋勉強会 #19
  • 29. 3. OpenCLの構造(9/14) • OpenCLのAPI(6/11) – カーネルのソースコードからプログラムオブジェク トを作成 cl_program clCreateProgramWithSource( cl_context /* context */, cl_uint /* count */, const char ** /* strings */, const size_t * /* lengths */, cl_int * /* errcode_ret */ ); わんくま同盟 名古屋勉強会 #19
  • 30. 3. OpenCLの構造(10/14) • OpenCLのAPI(7/11) – 指定されたプログラムオブジェクトをビルド cl_int clBuildProgram( cl_program /* program */, cl_uint /* num_devices */, const cl_device_id * /* device_list */, const char * /* options */, void (CL_CALLBACK * /* pfn_notify */)( cl_program, void * ), void * /* user_data */ ); わんくま同盟 名古屋勉強会 #19
  • 31. 3. OpenCLの構造(11/14) • OpenCLのAPI(8/11) – ビルドしたプログラムオブジェクトからカーネルを 作成する cl_kernel clCreateKernel( cl_program /* program */, const char * /* kernel_name */, cl_int * /* errcode_ret */ ); わんくま同盟 名古屋勉強会 #19
  • 32. 3. OpenCLの構造(12/14) • OpenCLのAPI(9/11) – カーネルの引数をセットする cl_int clSetKernelArg( cl_kernel /* kernel */, cl_uint /* arg_index */, size_t /* arg_size */, const void * /* arg_value */ ); わんくま同盟 名古屋勉強会 #19
  • 33. 3. OpenCLの構造(13/14) • OpenCLのAPI(10/11) – カーネルを実行する為のコマンドをキューに登録 cl_int clEnqueueTask( cl_command_queue/* command_queue */, cl_kernel /* kernel */, cl_uint /* num_events_in_wait_list */, const cl_event * /* event_wait_list */, cl_event * /* event */ ); わんくま同盟 名古屋勉強会 #19
  • 34. 3. OpenCLの構造(14/14) • OpenCLのAPI(11/11) – バッファオブジェクトからデータを読み込む為のコ マンドをキューに登録 cl_int clEnqueueReadBuffer( cl_command_queue /* command_queue */, cl_mem /* buffer */, cl_bool /* blocking_read */, size_t /* offset */, size_t /* cb */, void * /* ptr */, cl_uint /* num_events_in_wait_list */, const cl_event * /* event_wait_list */, cl_event * /* event */ ); わんくま同盟 名古屋勉強会 #19
  • 35. Agenda 1. OpenCLとは 2. OpenCLの環境構築 3. OpenCLの構造 4. OpenCLを使ったデモ 5. まとめ わんくま同盟 名古屋勉強会 #19
  • 36. 5. OpenCLを使ったデモ • 何かデモする わんくま同盟 名古屋勉強会 #19
  • 37. 5.まとめ 1. OpenCLとは 2. OpenCLの環境構築 3. OpenCLの構造 4. OpenCLを使ったデモ 5. まとめ わんくま同盟 名古屋勉強会 #19
  • 38. 5. まとめ • OpenCLが出てきた背景や今後について話を しました。 • ホスト側の制御処理が統一されるのは嬉しい。 • デバイス側はデバイスによる機能サポートに よって制限をうけるが汎用的に使えるのは嬉 しい。 • 但し、あるデバイスの性能をフルに活かすに はやはり専用APIを使うのが一番速い。 わんくま同盟 名古屋勉強会 #19
  • 39. 参考情報等 • OpenCL入門 - マルチコアCPU・GPUのため の並列プログラミング – ISBN:9784844328148, インプレスジャパン • OpenCL入門 - GPU&マルチコアCPU並列 プログラミング – ISBN:9784798026084, 秀和システム わんくま同盟 名古屋勉強会 #19