SlideShare a Scribd company logo
CUDA入門      CUDA30分クッキング
株式会社フィックスターズ
プログラマ 飯塚拓郎
本日のメニュー
単色




     Antipasto       CUDA環境構築

     Primo Piatto    配列をxxする

     Second Piatto   リアルタイムレイトレーシング

     Dolce           パフォーマンス測定
Antipasto CUDA環境構築
単色
Antipasto CUDA環境構築
✓ お題
単色




     - Windowsでお手軽CUDAプログラミング環境を整えましょう

✓ 材料

     - NVIDIA Driver : NVIDIA GPUのドライバ
     - NVIDIA CUDA Toolkit : CUDAコンパイラ、ランタイムライブラリ等
     - NVIDIA GPU Computing SDK : サンプルコード、ユーティリティ等

     - Visual Studio 20xx : ホストコードのコンパイラ

     - CMake(お好みで) : クロスプラットフォームなビルドシステム
Antipasto CUDA環境構築
単色




✓ Cooking Point

     - Windowsならインストーラ4, 5個

     - Macでもほとんど同じ
     One More Thing ...

     - Linuxディストリビューションのインストールチュートリアルはこちら

        - http://gpu.fixstars.com/index.php/CUDAのインストール
Primo Piatto 配列をxxする
単色
Primo Piatto 配列をxxする
単色
✓ お題

     - ゼロからGPUプログラム作りましょう

✓ 材料

     - cudaMalloc
     - cudaFree
     - cudaMemcpy
     - <<<>>>
     - C++ template、よくできたエディタ、よくできたキーボード
CUDA APIとCUDA構文
✓ メモリアロケーション
単色




     - cudaMalloc(void** devPtr, size_t size)
     - cudaFree(void* devPtr)
✓ メモリコピー

     - cudaMemcpy(void* dst, void* src,
              size_t size, enum cudaMemcpyKind kind)

     カーネル呼び出し

     - <<<1, threadNum>>>kernel_name(...)
       - kernel_nameというカーネルをtheadNum個のCUDAスレッドで実行す
CUDAスレッドとカーネル
単色



                         CUDAカーネルには
                        各スレッドの処理を記述


           CUDAスレッドは
          CUDAカーネルを実行




             CUDAコアは
         CUDAスレッドを順次実行
CUDAカーネル
✓ 今回のカーネルを書く上で覚えなきゃいけないこと
単色




     - dim3 threadIdx
       - CUDAカーネルの組み込み変数で、スレッドIDが格納されます

       - スレッド空間が一次元なら、threadIdx.xがスレッドIDになる



      これだけ!
Primo Piatto 配列をxxする
単色


✓ Cooking Point

     - ホスト側はメモリ領域が連続していることが保証できていればSTLでもOK

     - c++ templateで汎用性もバッチリ

     - たった50行


     One More Thing ...

     - これってGPUのコードがほとんどそのままホストコードとして動きます
Second Piatto リアルタイムレイトレーシング

単色
Second Piatto リアルタイムレイトレーシング

単色




✓ お題

     - C++なCPUコードをCUDA化しましょう
✓ 材料
     - 並列化できそうなCPUコード
レイトレーシングについて

単色
          光源     レンダリング対象物




     視点
                 レイ


           仮想スクリーン
設計図
単色
                            Sceneは複数の
          Scene                             Primitive
                            Primitiveをもつ
     --------------                        ----------
           ---                                 --
      Pixel render(int x,                  intersect() = 0
   ピクセルごとに
                            Primitiveインタフェースを
 rende()を呼び出す
                                      実装
       DrawImage
                                     Sphere            Triangle
       ----------
                                    --------          --------
           --
          compute()                     -                  -
設計図
                      ここ全部CUDA化
単色

          Scene                  Primitive
     --------------             ----------
           ---                      --
      Pixel render(int x,       intersect() = 0




       DrawImage
                             Sphere         Triangle
       ----------
                            --------       --------
           --
          compute()             -               -
CUDA カーネル C++ compatibility

単色

✓ CUDA3.xまでは・・・

     - リソースアロケーションとかできない

     - そもそも本当の意味でのfunction callはできなかった

     - (関数は全部inline)
✓ CUDA4.0では・・・

     - カーネル内部でnew/delete可能!

     - function callが実装され、virtualが使えるようになった!
Second Piatto リアルタイムレイトレーシング

単色




✓ Cooking Point

     - 全体が約1700行、うち50行程度を追加しただけ

     - ループを見よ!CUDAで並列化できるところは大体ループ
✓ One More Thing
     - CUDAのC++サポートが大分いい感じ

      - SDKのnewdeleteというサンプルにスレッドセーフなコンテナの実装アリ
Dolce パフォーマンス測定
単色
Dolce パフォーマンス測定
単色




✓ お題

     - パフォーマンスを測ってみましょう

✓ 材料
     - 十分な精度のタイマ関数(とそのユーティリティ)

     - さっきのレイトレーシングプログラム
Dolce パフォーマンス測定
✓ Cooking Point
単色




     - パフォーマンス測定値は見やすい形で!

✓ One More Thing

     - パフォーマンスメトリクス
      - ベースとなるのは計算時間
      - 重要なのは、計算時間のうち何がどのくらい占めているのかということ

        - 計算がネック:compute bound

        - 転送がネック:memory bound
Free Lunch is Over,
     Let s Have a Dinner !
単色
Free Lunch is Over,
        Let s Have a Dinner !
単色




✓ Cooking Point

     - C/C++を知っていれば、CUDAプログラミングはむずかしくない

     - 既存のソースコードも、動かすだけなら最低限の努力でOK
✓ One More Thing
     - 今回使用したソースコードを公開します

      - http://github.com/iitaku/gtc2011
Happy Programming,
         Everyone !

More Related Content

What's hot

optimal Ate pairing
optimal Ate pairingoptimal Ate pairing
optimal Ate pairing
MITSUNARI Shigeo
 
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapiJavaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapiKen'ichi Sakiyama
 
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
Unity Technologies Japan K.K.
 
Does LUNA-88K2 dream of PC Card? / Using PC Card on OpenBSD/luna88k
Does LUNA-88K2 dream of PC Card? / Using PC Card on OpenBSD/luna88kDoes LUNA-88K2 dream of PC Card? / Using PC Card on OpenBSD/luna88k
Does LUNA-88K2 dream of PC Card? / Using PC Card on OpenBSD/luna88k
Kenji Aoyama
 
Lisp Meet Up #19, cl-cuda: a library to use NVIDIA CUDA in Common Lisp
Lisp Meet Up #19, cl-cuda: a library to use NVIDIA CUDA in Common LispLisp Meet Up #19, cl-cuda: a library to use NVIDIA CUDA in Common Lisp
Lisp Meet Up #19, cl-cuda: a library to use NVIDIA CUDA in Common Lisp
masayukitakagi
 
Coma studyroom
Coma studyroomComa studyroom
Coma studyroomCohei Aoki
 
並列化による高速化
並列化による高速化 並列化による高速化
並列化による高速化
sakura-mike
 
デザイナーがTkinterで遊んでみました。
デザイナーがTkinterで遊んでみました。デザイナーがTkinterで遊んでみました。
デザイナーがTkinterで遊んでみました。
Chachamaru
 
Interactive Music II SuperCollider入門 2 - 関数とUGen
Interactive Music II SuperCollider入門 2 - 関数とUGenInteractive Music II SuperCollider入門 2 - 関数とUGen
Interactive Music II SuperCollider入門 2 - 関数とUGenAtsushi Tadokoro
 
Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門Atsushi Tadokoro
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
MITSUNARI Shigeo
 
GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)
なおき きしだ
 
怠惰なRubyistへの道
怠惰なRubyistへの道怠惰なRubyistへの道
怠惰なRubyistへの道
nagachika t
 
オセロの終盤ソルバーを100倍以上高速化した話
オセロの終盤ソルバーを100倍以上高速化した話オセロの終盤ソルバーを100倍以上高速化した話
オセロの終盤ソルバーを100倍以上高速化した話
京大 マイコンクラブ
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
MITSUNARI Shigeo
 
非静力学海洋モデルkinacoのGPUによる高速化
非静力学海洋モデルkinacoのGPUによる高速化非静力学海洋モデルkinacoのGPUによる高速化
非静力学海洋モデルkinacoのGPUによる高速化
Takateru Yamagishi
 
iOSプログラマへ。HTML5 Canvasがおもしろい!
iOSプログラマへ。HTML5 Canvasがおもしろい!iOSプログラマへ。HTML5 Canvasがおもしろい!
iOSプログラマへ。HTML5 Canvasがおもしろい!cocopon
 
Processing workshop v3.0
Processing workshop v3.0Processing workshop v3.0
Processing workshop v3.0
Wataru Kani
 

What's hot (20)

optimal Ate pairing
optimal Ate pairingoptimal Ate pairing
optimal Ate pairing
 
Javaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapiJavaで簡単にgpgpu aparapi
Javaで簡単にgpgpu aparapi
 
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
 
Does LUNA-88K2 dream of PC Card? / Using PC Card on OpenBSD/luna88k
Does LUNA-88K2 dream of PC Card? / Using PC Card on OpenBSD/luna88kDoes LUNA-88K2 dream of PC Card? / Using PC Card on OpenBSD/luna88k
Does LUNA-88K2 dream of PC Card? / Using PC Card on OpenBSD/luna88k
 
Lisp Meet Up #19, cl-cuda: a library to use NVIDIA CUDA in Common Lisp
Lisp Meet Up #19, cl-cuda: a library to use NVIDIA CUDA in Common LispLisp Meet Up #19, cl-cuda: a library to use NVIDIA CUDA in Common Lisp
Lisp Meet Up #19, cl-cuda: a library to use NVIDIA CUDA in Common Lisp
 
Coma studyroom
Coma studyroomComa studyroom
Coma studyroom
 
並列化による高速化
並列化による高速化 並列化による高速化
並列化による高速化
 
デザイナーがTkinterで遊んでみました。
デザイナーがTkinterで遊んでみました。デザイナーがTkinterで遊んでみました。
デザイナーがTkinterで遊んでみました。
 
Interactive Music II SuperCollider入門 2 - 関数とUGen
Interactive Music II SuperCollider入門 2 - 関数とUGenInteractive Music II SuperCollider入門 2 - 関数とUGen
Interactive Music II SuperCollider入門 2 - 関数とUGen
 
Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
 
Sc13 gpu
Sc13 gpuSc13 gpu
Sc13 gpu
 
GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)
 
怠惰なRubyistへの道
怠惰なRubyistへの道怠惰なRubyistへの道
怠惰なRubyistへの道
 
オセロの終盤ソルバーを100倍以上高速化した話
オセロの終盤ソルバーを100倍以上高速化した話オセロの終盤ソルバーを100倍以上高速化した話
オセロの終盤ソルバーを100倍以上高速化した話
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
仮想記憶の構築法
仮想記憶の構築法仮想記憶の構築法
仮想記憶の構築法
 
非静力学海洋モデルkinacoのGPUによる高速化
非静力学海洋モデルkinacoのGPUによる高速化非静力学海洋モデルkinacoのGPUによる高速化
非静力学海洋モデルkinacoのGPUによる高速化
 
iOSプログラマへ。HTML5 Canvasがおもしろい!
iOSプログラマへ。HTML5 Canvasがおもしろい!iOSプログラマへ。HTML5 Canvasがおもしろい!
iOSプログラマへ。HTML5 Canvasがおもしろい!
 
Processing workshop v3.0
Processing workshop v3.0Processing workshop v3.0
Processing workshop v3.0
 

Viewers also liked

La educación virtual
La educación virtualLa educación virtual
La educación virtual
eliana Florez
 
2006 Q4 Google Earnings Slides
2006 Q4 Google Earnings Slides2006 Q4 Google Earnings Slides
2006 Q4 Google Earnings Slides
earningsreport
 
Stad In Bedrijf
Stad In BedrijfStad In Bedrijf
Stad In Bedrijf
Siebo Hakse
 
Mentale Weerbaarheid
Mentale WeerbaarheidMentale Weerbaarheid
Mentale Weerbaarheid
Siebo Hakse
 
Succión y Deglución
Succión y DegluciónSucción y Deglución
Succión y Deglución
guest621bd4
 
Damien and grainne casey's wedding
Damien and grainne casey's weddingDamien and grainne casey's wedding
Damien and grainne casey's wedding
Peter Casey
 
Slides
SlidesSlides
Slides
Evalena
 
Cidadania 2.0 - um projeto
Cidadania 2.0 - um projetoCidadania 2.0 - um projeto
Cidadania 2.0 - um projeto
Ana Neves
 
Gestão do Conhecimento e Aprendizagem Organizacional
Gestão do Conhecimento e Aprendizagem OrganizacionalGestão do Conhecimento e Aprendizagem Organizacional
Gestão do Conhecimento e Aprendizagem Organizacional
Francisco Fernandes
 
ใส่หัวตารางอัตโนมัติ Microsoft word
ใส่หัวตารางอัตโนมัติ Microsoft word ใส่หัวตารางอัตโนมัติ Microsoft word
ใส่หัวตารางอัตโนมัติ Microsoft word พัน พัน
 
ARTICULO articulos basicos IS
ARTICULO articulos basicos ISARTICULO articulos basicos IS
ARTICULO articulos basicos IS
Barbara Viader
 
Law of robots and AIs - Future of Lawyers - Lecture 3
Law of robots and AIs - Future of Lawyers - Lecture 3Law of robots and AIs - Future of Lawyers - Lecture 3
Law of robots and AIs - Future of Lawyers - Lecture 3
Nicolas Petit
 
11 petunjuk layanan_atm_bni
11 petunjuk layanan_atm_bni11 petunjuk layanan_atm_bni
11 petunjuk layanan_atm_bni
Alvin Setiawan
 
A outra face
A outra faceA outra face
A outra face
pietra bravo
 
Aquarelle Paintings
Aquarelle Paintings Aquarelle Paintings
Aquarelle Paintings
Marco Belzoni
 
Publicar una presentación de slideshare en blogger
Publicar una presentación de slideshare en bloggerPublicar una presentación de slideshare en blogger
Publicar una presentación de slideshare en blogger
Koldo Parra
 
Ferma risk and insurance report 2016 full report with questions
Ferma risk and insurance report 2016  full report with questionsFerma risk and insurance report 2016  full report with questions
Ferma risk and insurance report 2016 full report with questions
Laetitia Fung
 
Mensagem manhã
Mensagem manhãMensagem manhã
Mensagem manhã
Hugo Machado
 
Taylorismo
TaylorismoTaylorismo
Taylorismo
doraviridiana
 

Viewers also liked (20)

La educación virtual
La educación virtualLa educación virtual
La educación virtual
 
2006 Q4 Google Earnings Slides
2006 Q4 Google Earnings Slides2006 Q4 Google Earnings Slides
2006 Q4 Google Earnings Slides
 
Stad In Bedrijf
Stad In BedrijfStad In Bedrijf
Stad In Bedrijf
 
Mentale Weerbaarheid
Mentale WeerbaarheidMentale Weerbaarheid
Mentale Weerbaarheid
 
Succión y Deglución
Succión y DegluciónSucción y Deglución
Succión y Deglución
 
Damien and grainne casey's wedding
Damien and grainne casey's weddingDamien and grainne casey's wedding
Damien and grainne casey's wedding
 
Slides
SlidesSlides
Slides
 
Cidadania 2.0 - um projeto
Cidadania 2.0 - um projetoCidadania 2.0 - um projeto
Cidadania 2.0 - um projeto
 
Gestão do Conhecimento e Aprendizagem Organizacional
Gestão do Conhecimento e Aprendizagem OrganizacionalGestão do Conhecimento e Aprendizagem Organizacional
Gestão do Conhecimento e Aprendizagem Organizacional
 
ใส่หัวตารางอัตโนมัติ Microsoft word
ใส่หัวตารางอัตโนมัติ Microsoft word ใส่หัวตารางอัตโนมัติ Microsoft word
ใส่หัวตารางอัตโนมัติ Microsoft word
 
ARTICULO articulos basicos IS
ARTICULO articulos basicos ISARTICULO articulos basicos IS
ARTICULO articulos basicos IS
 
prueba
pruebaprueba
prueba
 
Law of robots and AIs - Future of Lawyers - Lecture 3
Law of robots and AIs - Future of Lawyers - Lecture 3Law of robots and AIs - Future of Lawyers - Lecture 3
Law of robots and AIs - Future of Lawyers - Lecture 3
 
11 petunjuk layanan_atm_bni
11 petunjuk layanan_atm_bni11 petunjuk layanan_atm_bni
11 petunjuk layanan_atm_bni
 
A outra face
A outra faceA outra face
A outra face
 
Aquarelle Paintings
Aquarelle Paintings Aquarelle Paintings
Aquarelle Paintings
 
Publicar una presentación de slideshare en blogger
Publicar una presentación de slideshare en bloggerPublicar una presentación de slideshare en blogger
Publicar una presentación de slideshare en blogger
 
Ferma risk and insurance report 2016 full report with questions
Ferma risk and insurance report 2016  full report with questionsFerma risk and insurance report 2016  full report with questions
Ferma risk and insurance report 2016 full report with questions
 
Mensagem manhã
Mensagem manhãMensagem manhã
Mensagem manhã
 
Taylorismo
TaylorismoTaylorismo
Taylorismo
 

Similar to GTC2011 Japan

NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012Takuro Iizuka
 
C#, C/CLI と CUDAによる画像処理ことはじめ
C#, C/CLI と CUDAによる画像処理ことはじめC#, C/CLI と CUDAによる画像処理ことはじめ
C#, C/CLI と CUDAによる画像処理ことはじめ
NVIDIA Japan
 
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティングCMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティングComputational Materials Science Initiative
 
Hello, DirectCompute
Hello, DirectComputeHello, DirectCompute
Hello, DirectCompute
dasyprocta
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門
NVIDIA Japan
 
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてSECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
t-sin
 
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
Preferred Networks
 
Maxwell と Java CUDAプログラミング
Maxwell と Java CUDAプログラミングMaxwell と Java CUDAプログラミング
Maxwell と Java CUDAプログラミング
NVIDIA Japan
 
FM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作ったFM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作った
CHY72
 
CUDA1日(?)体験会 (再アップロード)
CUDA1日(?)体験会 (再アップロード)CUDA1日(?)体験会 (再アップロード)
CUDA1日(?)体験会 (再アップロード)
RinKuriyama
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
京大 マイコンクラブ
 
Implementation of Counters in ScopedBASIC
Implementation of Counters in ScopedBASICImplementation of Counters in ScopedBASIC
Implementation of Counters in ScopedBASIC
Kazuhiro Hishinuma
 
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門Yosuke Onoue
 
NVIDIA Deep Learning SDK を利用した画像認識
NVIDIA Deep Learning SDK を利用した画像認識NVIDIA Deep Learning SDK を利用した画像認識
NVIDIA Deep Learning SDK を利用した画像認識
NVIDIA Japan
 
CUDA1日(?)体験会
CUDA1日(?)体験会CUDA1日(?)体験会
CUDA1日(?)体験会
RinKuriyama
 
TVM の紹介
TVM の紹介TVM の紹介
TVM の紹介
Masahiro Masuda
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)Takeshi Yamamuro
 
8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティング8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティング
Takeshi Takaishi
 
あるRISC-V CPUの 浮動小数点数(異常なし)
あるRISC-V CPUの 浮動小数点数(異常なし)あるRISC-V CPUの 浮動小数点数(異常なし)
あるRISC-V CPUの 浮動小数点数(異常なし)
たけおか しょうぞう
 

Similar to GTC2011 Japan (20)

NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012NVIDIA Japan Seminar 2012
NVIDIA Japan Seminar 2012
 
C#, C/CLI と CUDAによる画像処理ことはじめ
C#, C/CLI と CUDAによる画像処理ことはじめC#, C/CLI と CUDAによる画像処理ことはじめ
C#, C/CLI と CUDAによる画像処理ことはじめ
 
Cuda
CudaCuda
Cuda
 
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティングCMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
 
Hello, DirectCompute
Hello, DirectComputeHello, DirectCompute
Hello, DirectCompute
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門
 
SECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについてSECDマシン 実装と動きとその他もろもろについて
SECDマシン 実装と動きとその他もろもろについて
 
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
 
Maxwell と Java CUDAプログラミング
Maxwell と Java CUDAプログラミングMaxwell と Java CUDAプログラミング
Maxwell と Java CUDAプログラミング
 
FM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作ったFM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作った
 
CUDA1日(?)体験会 (再アップロード)
CUDA1日(?)体験会 (再アップロード)CUDA1日(?)体験会 (再アップロード)
CUDA1日(?)体験会 (再アップロード)
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
 
Implementation of Counters in ScopedBASIC
Implementation of Counters in ScopedBASICImplementation of Counters in ScopedBASIC
Implementation of Counters in ScopedBASIC
 
PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門PyOpenCLによるGPGPU入門
PyOpenCLによるGPGPU入門
 
NVIDIA Deep Learning SDK を利用した画像認識
NVIDIA Deep Learning SDK を利用した画像認識NVIDIA Deep Learning SDK を利用した画像認識
NVIDIA Deep Learning SDK を利用した画像認識
 
CUDA1日(?)体験会
CUDA1日(?)体験会CUDA1日(?)体験会
CUDA1日(?)体験会
 
TVM の紹介
TVM の紹介TVM の紹介
TVM の紹介
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティング8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティング
 
あるRISC-V CPUの 浮動小数点数(異常なし)
あるRISC-V CPUの 浮動小数点数(異常なし)あるRISC-V CPUの 浮動小数点数(異常なし)
あるRISC-V CPUの 浮動小数点数(異常なし)
 

Recently uploaded

ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
Takayuki Nakayama
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
論文紹介: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
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 

Recently uploaded (9)

ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
論文紹介: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...
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 

GTC2011 Japan

  • 1. CUDA入門 CUDA30分クッキング 株式会社フィックスターズ プログラマ 飯塚拓郎
  • 2. 本日のメニュー 単色 Antipasto CUDA環境構築 Primo Piatto 配列をxxする Second Piatto リアルタイムレイトレーシング Dolce パフォーマンス測定
  • 4. Antipasto CUDA環境構築 ✓ お題 単色 - Windowsでお手軽CUDAプログラミング環境を整えましょう ✓ 材料 - NVIDIA Driver : NVIDIA GPUのドライバ - NVIDIA CUDA Toolkit : CUDAコンパイラ、ランタイムライブラリ等 - NVIDIA GPU Computing SDK : サンプルコード、ユーティリティ等 - Visual Studio 20xx : ホストコードのコンパイラ - CMake(お好みで) : クロスプラットフォームなビルドシステム
  • 5. Antipasto CUDA環境構築 単色 ✓ Cooking Point - Windowsならインストーラ4, 5個 - Macでもほとんど同じ One More Thing ... - Linuxディストリビューションのインストールチュートリアルはこちら - http://gpu.fixstars.com/index.php/CUDAのインストール
  • 7. Primo Piatto 配列をxxする 単色 ✓ お題 - ゼロからGPUプログラム作りましょう ✓ 材料 - cudaMalloc - cudaFree - cudaMemcpy - <<<>>> - C++ template、よくできたエディタ、よくできたキーボード
  • 8. CUDA APIとCUDA構文 ✓ メモリアロケーション 単色 - cudaMalloc(void** devPtr, size_t size) - cudaFree(void* devPtr) ✓ メモリコピー - cudaMemcpy(void* dst, void* src, size_t size, enum cudaMemcpyKind kind) カーネル呼び出し - <<<1, threadNum>>>kernel_name(...) - kernel_nameというカーネルをtheadNum個のCUDAスレッドで実行す
  • 9. CUDAスレッドとカーネル 単色 CUDAカーネルには 各スレッドの処理を記述 CUDAスレッドは CUDAカーネルを実行 CUDAコアは CUDAスレッドを順次実行
  • 10. CUDAカーネル ✓ 今回のカーネルを書く上で覚えなきゃいけないこと 単色 - dim3 threadIdx - CUDAカーネルの組み込み変数で、スレッドIDが格納されます - スレッド空間が一次元なら、threadIdx.xがスレッドIDになる これだけ!
  • 11. Primo Piatto 配列をxxする 単色 ✓ Cooking Point - ホスト側はメモリ領域が連続していることが保証できていればSTLでもOK - c++ templateで汎用性もバッチリ - たった50行 One More Thing ... - これってGPUのコードがほとんどそのままホストコードとして動きます
  • 13. Second Piatto リアルタイムレイトレーシング 単色 ✓ お題 - C++なCPUコードをCUDA化しましょう ✓ 材料 - 並列化できそうなCPUコード
  • 14. レイトレーシングについて 単色 光源 レンダリング対象物 視点 レイ 仮想スクリーン
  • 15. 設計図 単色 Sceneは複数の Scene Primitive Primitiveをもつ -------------- ---------- --- -- Pixel render(int x, intersect() = 0 ピクセルごとに Primitiveインタフェースを rende()を呼び出す 実装 DrawImage Sphere Triangle ---------- -------- -------- -- compute() - -
  • 16. 設計図 ここ全部CUDA化 単色 Scene Primitive -------------- ---------- --- -- Pixel render(int x, intersect() = 0 DrawImage Sphere Triangle ---------- -------- -------- -- compute() - -
  • 17. CUDA カーネル C++ compatibility 単色 ✓ CUDA3.xまでは・・・ - リソースアロケーションとかできない - そもそも本当の意味でのfunction callはできなかった - (関数は全部inline) ✓ CUDA4.0では・・・ - カーネル内部でnew/delete可能! - function callが実装され、virtualが使えるようになった!
  • 18. Second Piatto リアルタイムレイトレーシング 単色 ✓ Cooking Point - 全体が約1700行、うち50行程度を追加しただけ - ループを見よ!CUDAで並列化できるところは大体ループ ✓ One More Thing - CUDAのC++サポートが大分いい感じ - SDKのnewdeleteというサンプルにスレッドセーフなコンテナの実装アリ
  • 20. Dolce パフォーマンス測定 単色 ✓ お題 - パフォーマンスを測ってみましょう ✓ 材料 - 十分な精度のタイマ関数(とそのユーティリティ) - さっきのレイトレーシングプログラム
  • 21. Dolce パフォーマンス測定 ✓ Cooking Point 単色 - パフォーマンス測定値は見やすい形で! ✓ One More Thing - パフォーマンスメトリクス - ベースとなるのは計算時間 - 重要なのは、計算時間のうち何がどのくらい占めているのかということ - 計算がネック:compute bound - 転送がネック:memory bound
  • 22. Free Lunch is Over, Let s Have a Dinner ! 単色
  • 23. Free Lunch is Over, Let s Have a Dinner ! 単色 ✓ Cooking Point - C/C++を知っていれば、CUDAプログラミングはむずかしくない - 既存のソースコードも、動かすだけなら最低限の努力でOK ✓ One More Thing - 今回使用したソースコードを公開します - http://github.com/iitaku/gtc2011
  • 24. Happy Programming, Everyone !

Editor's Notes

  1. &amp;#x307F;&amp;#x306A;&amp;#x3055;&amp;#x3093;&amp;#x3001;CUDA&amp;#x30C1;&amp;#x30E5;&amp;#x30FC;&amp;#x30C8;&amp;#x30EA;&amp;#x30A2;&amp;#x30EB;&amp;#x7B2C;&amp;#x4E8C;&amp;#x5F3E;&amp;#x3001;CUDA30&amp;#x5206;&amp;#x30AF;&amp;#x30C3;&amp;#x30AD;&amp;#x30F3;&amp;#x30B0;&amp;#x3078;&amp;#x3088;&amp;#x3046;&amp;#x3053;&amp;#x305D;&amp;#x3002;\n&amp;#x307C;&amp;#x304F;&amp;#x306F;&amp;#x30D5;&amp;#x30A3;&amp;#x30C3;&amp;#x30AF;&amp;#x30B9;&amp;#x30BF;&amp;#x30FC;&amp;#x30BA;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x4F1A;&amp;#x793E;&amp;#x3067;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DE;&amp;#x3092;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3001;&amp;#x98EF;&amp;#x585A;&amp;#x3068;&amp;#x7533;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x3069;&amp;#x3046;&amp;#x305E;&amp;#x3088;&amp;#x308D;&amp;#x3057;&amp;#x304F;&amp;#x304A;&amp;#x9858;&amp;#x3044;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n&amp;#x3055;&amp;#x3066;&amp;#x3001;&amp;#x3044;&amp;#x307E;&amp;#x3053;&amp;#x3053;&amp;#x306B;&amp;#x3044;&amp;#x308B;&amp;#x307F;&amp;#x306A;&amp;#x3055;&amp;#x3093;&amp;#x306F;&amp;#x3001;CUDA&amp;#x3092;&amp;#x3053;&amp;#x308C;&amp;#x304B;&amp;#x3089;&amp;#x5B66;&amp;#x3076;&amp;#x3001;&amp;#x3042;&amp;#x308B;&amp;#x3044;&amp;#x306F;&amp;#x65E2;&amp;#x306B;&amp;#x5B66;&amp;#x3093;&amp;#x3067;&amp;#x3044;&amp;#x308B;&amp;#x65B9;&amp;#x3060;&amp;#x3068;&amp;#x601D;&amp;#x308F;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x3053;&amp;#x306E;&amp;#x30C1;&amp;#x30E5;&amp;#x30FC;&amp;#x30C8;&amp;#x30EA;&amp;#x30A2;&amp;#x30EB;&amp;#x306E;&amp;#x76EE;&amp;#x7684;&amp;#x306F;&amp;#x3001;CUDA&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x6577;&amp;#x5C45;&amp;#x304C;&amp;#x3069;&amp;#x308C;&amp;#x304F;&amp;#x3089;&amp;#x3044;&amp;#x306E;&amp;#x9AD8;&amp;#x3055;&amp;#x306A;&amp;#x306E;&amp;#x304B;&amp;#x3001;&amp;#x5B9F;&amp;#x611F;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x77E5;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x305F;&amp;#x3060;&amp;#x304F;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x3053;&amp;#x3053;&amp;#x3067;&amp;#x7D39;&amp;#x4ECB;&amp;#x3059;&amp;#x308B;&amp;#x30C4;&amp;#x30FC;&amp;#x30EB;&amp;#x3084;&amp;#x30C6;&amp;#x30AF;&amp;#x30CB;&amp;#x30C3;&amp;#x30AF;&amp;#x306F;&amp;#x73FE;&amp;#x5834;&amp;#x3067;&amp;#x4F7F;&amp;#x308F;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x3082;&amp;#x306E;&amp;#x3067;&amp;#x3042;&amp;#x308A;&amp;#x3001;CUDA&amp;#x306E;&amp;#x4F7F;&amp;#x7528;&amp;#x3092;&amp;#x691C;&amp;#x8A0E;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x308B;&amp;#x65B9;&amp;#x3001;&amp;#x4ECA;&amp;#x307E;&amp;#x3055;&amp;#x306B;&amp;#x5B66;&amp;#x7FD2;&amp;#x4E2D;&amp;#x306E;&amp;#x65B9;&amp;#x306B;&amp;#x306F;&amp;#x3001;&amp;#x5FC5;&amp;#x305A;&amp;#x5F79;&amp;#x306B;&amp;#x7ACB;&amp;#x3064;&amp;#x3082;&amp;#x306E;&amp;#x3068;&amp;#x4FE1;&amp;#x3058;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n\n\n\n\n
  2. &amp;#x305D;&amp;#x308C;&amp;#x3067;&amp;#x306F;&amp;#x3001;&amp;#x672C;&amp;#x65E5;&amp;#x306E;&amp;#x30E1;&amp;#x30CB;&amp;#x30E5;&amp;#x30FC;&amp;#x3092;&amp;#x3054;&amp;#x7D39;&amp;#x4ECB;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n&amp;#x524D;&amp;#x83DC;&amp;#x306F;&amp;#x3001;CUDA&amp;#x74B0;&amp;#x5883;&amp;#x69CB;&amp;#x7BC9;&amp;#x3067;&amp;#x3059;&amp;#x3002;CUDA&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0;&amp;#x3092;&amp;#x884C;&amp;#x3046;&amp;#x306B;&amp;#x5F53;&amp;#x305F;&amp;#x3063;&amp;#x3066;&amp;#x3001;&amp;#x4F55;&amp;#x304C;&amp;#x5FC5;&amp;#x8981;&amp;#x306A;&amp;#x306E;&amp;#x304B;&amp;#x3092;&amp;#x7C21;&amp;#x5358;&amp;#x306B;&amp;#x3054;&amp;#x8AAC;&amp;#x660E;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x30E1;&amp;#x30A4;&amp;#x30F3;1&amp;#x76BF;&amp;#x76EE;&amp;#x306B;&amp;#x306F;&amp;#x3001;&amp;#x914D;&amp;#x5217;&amp;#x3092;xx&amp;#x3059;&amp;#x308B;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30E0;&amp;#x3001;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x3082;&amp;#x306E;&amp;#x3092;&amp;#x30BC;&amp;#x30ED;&amp;#x304B;&amp;#x3089;&amp;#x5B9F;&amp;#x88C5;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x30E1;&amp;#x30A4;&amp;#x30F3;2&amp;#x76BF;&amp;#x76EE;&amp;#x306B;&amp;#x306F;&amp;#x3001;C++&amp;#x3067;&amp;#x5B9F;&amp;#x88C5;&amp;#x3055;&amp;#x308C;&amp;#x305F;&amp;#x30EA;&amp;#x30A2;&amp;#x30EB;&amp;#x30BF;&amp;#x30A4;&amp;#x30E0;&amp;#x30EC;&amp;#x30A4;&amp;#x30C8;&amp;#x30EC;&amp;#x30FC;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30E0;&amp;#x3092;CUDA&amp;#x306B;&amp;#x79FB;&amp;#x690D;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x305D;&amp;#x3057;&amp;#x3066;&amp;#x30C7;&amp;#x30B6;&amp;#x30FC;&amp;#x30C8;&amp;#x306B;&amp;#x306F;&amp;#x3001;&amp;#x7C21;&amp;#x5358;&amp;#x306B;&amp;#x30D1;&amp;#x30D5;&amp;#x30A9;&amp;#x30FC;&amp;#x30DE;&amp;#x30F3;&amp;#x30B9;&amp;#x6E2C;&amp;#x5B9A;&amp;#x3092;&amp;#x884C;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  3. &amp;#x65E9;&amp;#x901F;&amp;#x3001;CUDA&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0;&amp;#x306E;&amp;#x74B0;&amp;#x5883;&amp;#x69CB;&amp;#x7BC9;&amp;#x3092;&amp;#x884C;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x304D;&amp;#x307E;&amp;#x3057;&amp;#x3087;&amp;#x3046;&amp;#x3002;\n
  4. &amp;#x4ECA;&amp;#x56DE;&amp;#x306F;Windows&amp;#x306B;&amp;#x304A;&amp;#x3051;&amp;#x308B;&amp;#x304A;&amp;#x624B;&amp;#x8EFD;CUDA&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0;&amp;#x74B0;&amp;#x5883;&amp;#x3092;&amp;#x69CB;&amp;#x7BC9;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x6750;&amp;#x6599;&amp;#x306F;&amp;#x3053;&amp;#x3061;&amp;#x3089;&amp;#x306E;&amp;#x901A;&amp;#x308A;&amp;#x3002;&amp;#x30C9;&amp;#x30E9;&amp;#x30A4;&amp;#x30D0;&amp;#x3001;&amp;#x30C4;&amp;#x30FC;&amp;#x30EB;&amp;#x30AD;&amp;#x30C3;&amp;#x30C8;&amp;#x3001;SDK&amp;#x3001;Visual Studio&amp;#x306A;&amp;#x3069;&amp;#x30DB;&amp;#x30B9;&amp;#x30C8;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x306E;&amp;#x30B3;&amp;#x30F3;&amp;#x30D1;&amp;#x30A4;&amp;#x30E9;&amp;#x3001;&amp;#x307E;&amp;#x305F;&amp;#x30AF;&amp;#x30ED;&amp;#x30B9;&amp;#x30D7;&amp;#x30E9;&amp;#x30C3;&amp;#x30C8;&amp;#x30D5;&amp;#x30A9;&amp;#x30FC;&amp;#x30E0;&amp;#x306A;&amp;#x30D3;&amp;#x30EB;&amp;#x30C9;&amp;#x30B7;&amp;#x30B9;&amp;#x30C6;&amp;#x30E0;CMake&amp;#x3092;&amp;#x5C0E;&amp;#x5165;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n= Live =\n&amp;#x3068;&amp;#x3044;&amp;#x3063;&amp;#x3066;&amp;#x3082;&amp;#x96E3;&amp;#x3057;&amp;#x3044;&amp;#x3053;&amp;#x3068;&amp;#x306F;&amp;#x306A;&amp;#x304F;&amp;#x3001;&amp;#x3053;&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306B;Web&amp;#x30DA;&amp;#x30FC;&amp;#x30B8;&amp;#x304B;&amp;#x3089;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30C8;&amp;#x30FC;&amp;#x30E9;&amp;#x3092;&amp;#x30C0;&amp;#x30A6;&amp;#x30F3;&amp;#x30ED;&amp;#x30FC;&amp;#x30C9;&amp;#x3057;&amp;#x3001;&amp;#x30EF;&amp;#x30F3;&amp;#x30AF;&amp;#x30EA;&amp;#x30C3;&amp;#x30AF;&amp;#x3067;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30C8;&amp;#x30FC;&amp;#x30EB;&amp;#x3092;&amp;#x884C;&amp;#x3046;&amp;#x3060;&amp;#x3051;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n\n
  5. Windows&amp;#x3084;Mac&amp;#x306A;&amp;#x3089;&amp;#x3001;&amp;#x3053;&amp;#x306E;&amp;#x3068;&amp;#x304A;&amp;#x308A;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30C8;&amp;#x30FC;&amp;#x30E9;&amp;#x3092;4, 5&amp;#x767A;&amp;#x5B9F;&amp;#x884C;&amp;#x3057;&amp;#x3066;&amp;#x3001;&amp;#x304A;&amp;#x307E;&amp;#x3051;&amp;#x306B;&amp;#x518D;&amp;#x8D77;&amp;#x52D5;&amp;#x3059;&amp;#x308B;&amp;#x304F;&amp;#x3089;&amp;#x3044;&amp;#x3067;&amp;#x3059;&amp;#x307F;&amp;#x307E;&amp;#x3059;&amp;#x3002;Linux&amp;#x74B0;&amp;#x5883;&amp;#x3060;&amp;#x3068;&amp;#x30C9;&amp;#x30E9;&amp;#x30A4;&amp;#x30D0;&amp;#x306E;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30C8;&amp;#x30FC;&amp;#x30EB;&amp;#x5468;&amp;#x308A;&amp;#x3067;&amp;#x3082;&amp;#x3046;&amp;#x5C11;&amp;#x3057;&amp;#x8907;&amp;#x96D1;&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x3053;&amp;#x308C;&amp;#x306B;&amp;#x3064;&amp;#x3044;&amp;#x3066;&amp;#x306F;&amp;#x5F0A;&amp;#x793E;&amp;#x306E;CUDA Information site&amp;#x306B;&amp;#x3066;&amp;#x30A4;&amp;#x30F3;&amp;#x30B9;&amp;#x30C8;&amp;#x30FC;&amp;#x30EB;&amp;#x624B;&amp;#x9806;&amp;#x3092;&amp;#x516C;&amp;#x958B;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x3054;&amp;#x53C2;&amp;#x8003;&amp;#x306B;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x305F;&amp;#x3060;&amp;#x3051;&amp;#x308C;&amp;#x3070;&amp;#x3068;&amp;#x601D;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  6. &amp;#x3055;&amp;#x3066;&amp;#x3001;&amp;#x3053;&amp;#x308C;&amp;#x3067;CUDA&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0;&amp;#x74B0;&amp;#x5883;&amp;#x306F;&amp;#x6574;&amp;#x3044;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;&amp;#x6B21;&amp;#x306F;&amp;#x3044;&amp;#x3088;&amp;#x3044;&amp;#x3088;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0;&amp;#x306E;&amp;#x6642;&amp;#x9593;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  7. &amp;#x304A;&amp;#x984C;&amp;#x306F;&amp;#x3001;&amp;#x30BC;&amp;#x30ED;&amp;#x304B;&amp;#x3089;GPU&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30E0;&amp;#x3092;&amp;#x4F5C;&amp;#x308A;&amp;#x307E;&amp;#x3057;&amp;#x3087;&amp;#x3046;&amp;#x30FB;&amp;#x30FB;&amp;#x30FB;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x4ECA;&amp;#x56DE;&amp;#x306F;&amp;#x3001;&amp;#x914D;&amp;#x5217;&amp;#x306B;&amp;#x5BFE;&amp;#x3057;&amp;#x3066;&amp;#x4EFB;&amp;#x610F;&amp;#x306E;&amp;#x64CD;&amp;#x4F5C;&amp;#x3092;&amp;#x95A2;&amp;#x6570;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x5B9F;&amp;#x88C5;&amp;#x3057;&amp;#x3001;&amp;#x3053;&amp;#x308C;&amp;#x3092;&amp;#x5B9F;&amp;#x884C;&amp;#x3059;&amp;#x308B;GPU&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30E0;&amp;#x3092;&amp;#x4F5C;&amp;#x6210;&amp;#x3057;&amp;#x3066;&amp;#x307F;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n&amp;#x6750;&amp;#x6599;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x3001;&amp;#x3044;&amp;#x304F;&amp;#x3064;&amp;#x304B;&amp;#x306E;CUDA API&amp;#x3068;CUDA&amp;#x306E;&amp;#x6587;&amp;#x6CD5;&amp;#x3092;&amp;#x899A;&amp;#x3048;&amp;#x3066;&amp;#x304A;&amp;#x304D;&amp;#x307E;&amp;#x3057;&amp;#x3087;&amp;#x3046;&amp;#x3002;\n&amp;#x307E;&amp;#x305F;&amp;#x3001;C++ template&amp;#x3068;&amp;#x3088;&amp;#x304F;&amp;#x3067;&amp;#x304D;&amp;#x305F;&amp;#x30A8;&amp;#x30C7;&amp;#x30A3;&amp;#x30BF;&amp;#x3001;&amp;#x3088;&amp;#x304F;&amp;#x3067;&amp;#x304D;&amp;#x305F;&amp;#x30AD;&amp;#x30FC;&amp;#x30DC;&amp;#x30FC;&amp;#x30C9;&amp;#x3082;&amp;#x5FC5;&amp;#x8981;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n\n&amp;#x3061;&amp;#x306A;&amp;#x307F;&amp;#x306B;&amp;#x50D5;&amp;#x306B;&amp;#x3068;&amp;#x3063;&amp;#x3066;&amp;#x306E;&amp;#x300C;&amp;#x3088;&amp;#x304F;&amp;#x3067;&amp;#x304D;&amp;#x305F;&amp;#x300D;&amp;#x306F;vim&amp;#x3068;Happy Hacking Keyboard&amp;#x306A;&amp;#x306E;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x30FB;&amp;#x30FB;&amp;#x30FB;\n&amp;#x6642;&amp;#x9593;&amp;#x3082;&amp;#x306A;&amp;#x3044;&amp;#x306E;&amp;#x3067;&amp;#x3053;&amp;#x308C;&amp;#x306B;&amp;#x3064;&amp;#x3044;&amp;#x3066;&amp;#x306E;&amp;#x306E;&amp;#x8B70;&amp;#x8AD6;&amp;#x306F;&amp;#x307E;&amp;#x305F;&amp;#x3044;&amp;#x3064;&amp;#x304B;&amp;#x3002;\n\n= Live =\n1.CMakeLists.txt&amp;#x3092;&amp;#x3064;&amp;#x304F;&amp;#x308B;\n2. main&amp;#x304B;&amp;#x304F;\n
  8. &amp;#x3055;&amp;#x3066;&amp;#x3001;CUDA API&amp;#x3068;CUDA&amp;#x306E;&amp;#x62E1;&amp;#x5F35;&amp;#x69CB;&amp;#x6587;&amp;#x306B;&amp;#x3064;&amp;#x3044;&amp;#x3066;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x5FC5;&amp;#x8981;&amp;#x306A;&amp;#x306E;&amp;#x306F;&amp;#x5168;&amp;#x90E8;&amp;#x3067;&amp;#x305F;&amp;#x3063;&amp;#x305F;&amp;#xFF14;&amp;#x3064;&amp;#x3067;&amp;#x3059;&amp;#x3002;\nGPU&amp;#x306F;&amp;#x5C02;&amp;#x7528;&amp;#x306E;&amp;#x30E1;&amp;#x30E2;&amp;#x30EA;&amp;#x7A7A;&amp;#x9593;&amp;#x3092;&amp;#x6301;&amp;#x3063;&amp;#x3066;&amp;#x304A;&amp;#x308A;&amp;#x3001;&amp;#x3053;&amp;#x306E;&amp;#x30E1;&amp;#x30E2;&amp;#x30EA;&amp;#x7A7A;&amp;#x9593;&amp;#x306E;&amp;#x30A2;&amp;#x30ED;&amp;#x30B1;&amp;#x30FC;&amp;#x30B7;&amp;#x30E7;&amp;#x30F3;&amp;#x306B;&amp;#x4F7F;&amp;#x7528;&amp;#x3059;&amp;#x308B;&amp;#x306E;&amp;#x304C;cudaMalloc&amp;#x3068;cudaFree&amp;#x3067;&amp;#x3059;&amp;#x3002;\n&amp;#x307E;&amp;#x305F;&amp;#x3001;CPU&amp;#x5074;&amp;#x306E;&amp;#x30E1;&amp;#x30E2;&amp;#x30EA;&amp;#x3068;&amp;#x306E;&amp;#x9593;&amp;#x306E;&amp;#x30C7;&amp;#x30FC;&amp;#x30BF;&amp;#x306E;&amp;#x30B3;&amp;#x30D4;&amp;#x30FC;&amp;#x306F;cudaMemcpy&amp;#x3068;&amp;#x3044;&amp;#x3046;API&amp;#x3092;&amp;#x4F7F;&amp;#x7528;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n&amp;#x305D;&amp;#x3057;&amp;#x3066;&amp;#x3001;&amp;#x30AB;&amp;#x30FC;&amp;#x30CD;&amp;#x30EB;&amp;#x3068;&amp;#x547C;&amp;#x3070;&amp;#x308C;&amp;#x308B;GPU&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30E0;&amp;#x306E;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x306B;&amp;#x306F;&amp;#x3001;CUDA&amp;#x306E;&amp;#x62E1;&amp;#x5F35;&amp;#x6587;&amp;#x6CD5;&amp;#x3092;&amp;#x4F7F;&amp;#x7528;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n&amp;#x3053;&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306B;&amp;#x30A2;&amp;#x30F3;&amp;#x30B0;&amp;#x30EB;&amp;#x30D6;&amp;#x30E9;&amp;#x30B1;&amp;#x30C3;&amp;#x30C8;&amp;#x3092;&amp;#x30AB;&amp;#x30FC;&amp;#x30CD;&amp;#x30EB;&amp;#x95A2;&amp;#x6570;&amp;#x306E;&amp;#x524D;&amp;#x306B;&amp;#x4ED8;&amp;#x3051;&amp;#x3001;nvcc&amp;#x3067;&amp;#x30B3;&amp;#x30F3;&amp;#x30D1;&amp;#x30A4;&amp;#x30EB;&amp;#x3059;&amp;#x308B;&amp;#x3068;&amp;#x3001;\n&amp;#x30AB;&amp;#x30FC;&amp;#x30CD;&amp;#x30EB;&amp;#x306E;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x89E3;&amp;#x91C8;&amp;#x3055;&amp;#x308C;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n= Live =\nCUDA API&amp;#x3092;&amp;#x4F7F;&amp;#x7528;&amp;#x3057;&amp;#x305F;&amp;#x30DB;&amp;#x30B9;&amp;#x30C8;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x3092;&amp;#x4F5C;&amp;#x6210;&amp;#x3059;&amp;#x308B;\n
  9. &amp;#x3055;&amp;#x3066;&amp;#x3001;CUDA&amp;#x30B9;&amp;#x30EC;&amp;#x30C3;&amp;#x30C9;&amp;#x3068;&amp;#x30AB;&amp;#x30FC;&amp;#x30CD;&amp;#x30EB;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x8A00;&amp;#x8449;&amp;#x304C;&amp;#x51FA;&amp;#x3066;&amp;#x304D;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x306D;&amp;#x3002;&amp;#x3053;&amp;#x308C;&amp;#x306B;&amp;#x3064;&amp;#x3044;&amp;#x3066;&amp;#x8AAC;&amp;#x660E;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\nGPU&amp;#x306F;&amp;#x3001;&amp;#x6570;&amp;#x4E07;&amp;#x3068;&amp;#x3044;&amp;#x3046;CUDA&amp;#x30B9;&amp;#x30EC;&amp;#x30C3;&amp;#x30C9;&amp;#x3092;&amp;#x6570;&amp;#x767E;&amp;#x306E;CUDA&amp;#x30B3;&amp;#x30A2;&amp;#x3067;&amp;#x4E26;&amp;#x5217;&amp;#x51E6;&amp;#x7406;&amp;#x3059;&amp;#x308B;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x5B9F;&amp;#x884C;&amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x3092;&amp;#x6301;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;CUDA&amp;#x30AB;&amp;#x30FC;&amp;#x30CD;&amp;#x30EB;&amp;#x306F;&amp;#x3001;CUDA&amp;#x30B9;&amp;#x30EC;&amp;#x30C3;&amp;#x30C9;&amp;#x306E;&amp;#x51E6;&amp;#x7406;&amp;#x5185;&amp;#x5BB9;&amp;#x3092;&amp;#x8A18;&amp;#x8FF0;&amp;#x3059;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x306E;&amp;#x3082;&amp;#x306E;&amp;#x3067;&amp;#x3001;__global__&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x8B58;&amp;#x5225;&amp;#x5B50;&amp;#x3092;&amp;#x95A2;&amp;#x6570;&amp;#x306E;&amp;#x5148;&amp;#x982D;&amp;#x306B;&amp;#x4ED8;&amp;#x3051;&amp;#x308B;&amp;#x3068;&amp;#x3001;&amp;#x305D;&amp;#x308C;&amp;#x304C;CUDA&amp;#x30AB;&amp;#x30FC;&amp;#x30CD;&amp;#x30EB;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n= Live =\nCUDA&amp;#x30AB;&amp;#x30FC;&amp;#x30CD;&amp;#x30EB;&amp;#x306E;&amp;#x30B9;&amp;#x30BF;&amp;#x30D6;&amp;#x3092;&amp;#x66F8;&amp;#x304F;\n
  10. CUDA&amp;#x30AB;&amp;#x30FC;&amp;#x30CD;&amp;#x30EB;&amp;#x5185;&amp;#x90E8;&amp;#x3067;&amp;#x306F;&amp;#x3001;&amp;#x3044;&amp;#x304F;&amp;#x3064;&amp;#x304B;&amp;#x306E;&amp;#x7279;&amp;#x6B8A;&amp;#x306A;&amp;#x7D44;&amp;#x307F;&amp;#x8FBC;&amp;#x307F;&amp;#x95A2;&amp;#x6570;&amp;#x3084;&amp;#x5909;&amp;#x6570;&amp;#x304C;&amp;#x4F7F;&amp;#x7528;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x4ECA;&amp;#x56DE;&amp;#x306F;&amp;#x3001;threadIdx&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x7D44;&amp;#x307F;&amp;#x8FBC;&amp;#x307F;&amp;#x5909;&amp;#x6570;&amp;#x306E;&amp;#x307F;&amp;#x3092;&amp;#x4F7F;&amp;#x7528;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x3053;&amp;#x306E;&amp;#x5909;&amp;#x6570;&amp;#x306F;&amp;#x3001;&amp;#x305D;&amp;#x306E;&amp;#x30AB;&amp;#x30FC;&amp;#x30CD;&amp;#x30EB;&amp;#x3092;&amp;#x5B9F;&amp;#x884C;&amp;#x3059;&amp;#x308B;CUDA&amp;#x30B9;&amp;#x30EC;&amp;#x30C3;&amp;#x30C9;&amp;#x306E;ID&amp;#x3092;&amp;#x683C;&amp;#x7D0D;&amp;#x3057;&amp;#x3066;&amp;#x304A;&amp;#x308A;&amp;#x3001;CUDA&amp;#x30B9;&amp;#x30EC;&amp;#x30C3;&amp;#x30C9;&amp;#x3054;&amp;#x3068;&amp;#x306B;&amp;#x9055;&amp;#x3046;&amp;#x5909;&amp;#x6570;&amp;#x3092;&amp;#x53D6;&amp;#x5F97;&amp;#x3067;&amp;#x304D;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n= Live =\n&amp;#x30AB;&amp;#x30FC;&amp;#x30CD;&amp;#x30EB;&amp;#x3092;&amp;#x5B9F;&amp;#x88C5;\n&amp;#x95A2;&amp;#x6570;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3092;&amp;#x5B9F;&amp;#x88C5;&amp;#x3057;&amp;#x3001;&amp;#x95A2;&amp;#x6570;&amp;#x306B;__device__&amp;#x8B58;&amp;#x5225;&amp;#x5B50;&amp;#x3092;&amp;#x4ED8;&amp;#x3051;&amp;#x308B;\n
  11. &amp;#x3055;&amp;#x3066;&amp;#x3001;CUDA&amp;#x3092;&amp;#x4F7F;&amp;#x7528;&amp;#x3057;&amp;#x305F;&amp;#x7C21;&amp;#x5358;&amp;#x306A;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x3092;&amp;#x4F5C;&amp;#x6210;&amp;#x3057;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;&amp;#x305F;&amp;#x3063;&amp;#x305F;&amp;#xFF15;&amp;#xFF10;&amp;#x884C;&amp;#x306E;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x307E;&amp;#x305F;&amp;#x3001;&amp;#x30DB;&amp;#x30B9;&amp;#x30C8;&amp;#x5074;&amp;#x306F;&amp;#x30E1;&amp;#x30E2;&amp;#x30EA;&amp;#x9818;&amp;#x57DF;&amp;#x304C;&amp;#x9023;&amp;#x7D9A;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x308C;&amp;#x3070;STL&amp;#x3067;&amp;#x3082;&amp;#x554F;&amp;#x984C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;&amp;#x307E;&amp;#x305F;&amp;#x30AB;&amp;#x30FC;&amp;#x30CD;&amp;#x30EB;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x3067;&amp;#x306F;C++ template&amp;#x3092;&amp;#x4F7F;&amp;#x7528;&amp;#x3067;&amp;#x304D;&amp;#x308B;&amp;#x305F;&amp;#x3081;&amp;#x3001;&amp;#x67D4;&amp;#x8EDF;&amp;#x306A;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0;&amp;#x304C;&amp;#x53EF;&amp;#x80FD;&amp;#x306A;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x308F;&amp;#x304B;&amp;#x308A;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;\n\n&amp;#x307E;&amp;#x305F;&amp;#x3001;&amp;#x3053;&amp;#x306E;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x5B9F;&amp;#x884C;&amp;#x3055;&amp;#x308C;&amp;#x308B;&amp;#x30ED;&amp;#x30B8;&amp;#x30C3;&amp;#x30AF;&amp;#x306E;&amp;#x307B;&amp;#x3068;&amp;#x3093;&amp;#x3069;&amp;#x3092;&amp;#x3001;CPU&amp;#x3068;GPU&amp;#x3067;&amp;#x5171;&amp;#x6709;&amp;#x3059;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x53EF;&amp;#x80FD;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x3053;&amp;#x308C;&amp;#x306B;&amp;#x3088;&amp;#x3063;&amp;#x3066;&amp;#x3001;&amp;#x30C7;&amp;#x30D0;&amp;#x30C3;&amp;#x30B0;&amp;#x3057;&amp;#x3084;&amp;#x3059;&amp;#x3044;&amp;#x3001;&amp;#x4FDD;&amp;#x5B88;&amp;#x3057;&amp;#x3084;&amp;#x3059;&amp;#x3044;&amp;#x3001;&amp;#x307E;&amp;#x305F;&amp;#x3053;&amp;#x308C;&amp;#x306F;&amp;#x7279;&amp;#x306B;&amp;#x30C1;&amp;#x30E5;&amp;#x30FC;&amp;#x30CB;&amp;#x30F3;&amp;#x30B0;&amp;#x3044;&amp;#x306A;&amp;#x3044;&amp;#x5834;&amp;#x5408;&amp;#x306B;&amp;#x9650;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x30D1;&amp;#x30D5;&amp;#x30A9;&amp;#x30FC;&amp;#x30DE;&amp;#x30F3;&amp;#x30B9;&amp;#x6BD4;&amp;#x8F03;&amp;#x304C;&amp;#x3057;&amp;#x3084;&amp;#x3059;&amp;#x3044;&amp;#x3001;&amp;#x306A;&amp;#x3069;&amp;#x306E;&amp;#x30E1;&amp;#x30EA;&amp;#x30C3;&amp;#x30C8;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n= Live =\ncpu_gpu_vecxx.cu&amp;#x3092;&amp;#x898B;&amp;#x305B;&amp;#x308B;\n\n
  12. &amp;#x305D;&amp;#x308C;&amp;#x3067;&amp;#x306F;&amp;#x3001;&amp;#x30E1;&amp;#x30A4;&amp;#x30F3;&amp;#xFF12;&amp;#x76BF;&amp;#x76EE;&amp;#x3001;&amp;#x30EA;&amp;#x30A2;&amp;#x30EB;&amp;#x30BF;&amp;#x30A4;&amp;#x30E0;&amp;#x30EC;&amp;#x30A4;&amp;#x30C8;&amp;#x30EC;&amp;#x30FC;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x306B;&amp;#x3064;&amp;#x3044;&amp;#x3066;&amp;#x3002;\n\n
  13. &amp;#x3053;&amp;#x3053;&amp;#x306B;&amp;#x3001;C++&amp;#x3067;&amp;#x66F8;&amp;#x304B;&amp;#x308C;&amp;#x305F;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30E0;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x3053;&amp;#x308C;&amp;#x3092;GPU&amp;#x306B;&amp;#x79FB;&amp;#x690D;&amp;#x3057;&amp;#x3088;&amp;#x3046;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x306E;&amp;#x304C;&amp;#x3001;&amp;#x4ECA;&amp;#x56DE;&amp;#x306E;&amp;#x30C6;&amp;#x30FC;&amp;#x30DE;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n\n= Live =\n1. build&amp;#x306F;&amp;#x3057;&amp;#x3066;&amp;#x304A;&amp;#x304F;\n2. ./cpu_renderer&amp;#x3059;&amp;#x308B;&amp;#x3060;&amp;#x3051;\n
  14. &amp;#x30EC;&amp;#x30A4;&amp;#x30C8;&amp;#x30EC;&amp;#x30FC;&amp;#x30B7;&amp;#x30F3;&amp;#x30B0;&amp;#x306F;&amp;#x3001;&amp;#x305D;&amp;#x306E;&amp;#x540D;&amp;#x306E;&amp;#x3068;&amp;#x304A;&amp;#x308A;&amp;#x3001;&amp;#x8996;&amp;#x70B9;&amp;#x304B;&amp;#x3089;&amp;#x4EEE;&amp;#x60F3;&amp;#x30B9;&amp;#x30AF;&amp;#x30EA;&amp;#x30FC;&amp;#x30F3;&amp;#x306B;&amp;#x5BFE;&amp;#x3059;&amp;#x308B;&amp;#x5149;&amp;#x7DDA;&amp;#x3092;&amp;#x8FFD;&amp;#x8DE1;&amp;#x3057;&amp;#x3066;&amp;#xFF13;D&amp;#x30E2;&amp;#x30C7;&amp;#x30EB;&amp;#x3092;&amp;#xFF12;D&amp;#x306B;&amp;#x30DE;&amp;#x30C3;&amp;#x30D4;&amp;#x30F3;&amp;#x30B0;&amp;#x3059;&amp;#x308B;&amp;#x3082;&amp;#x306E;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x3053;&amp;#x306E;&amp;#x7D75;&amp;#x306B;&amp;#x306F;&amp;#x30EC;&amp;#x30A4;&amp;#x306F;&amp;#x4E00;&amp;#x672C;&amp;#x3057;&amp;#x304B;&amp;#x66F8;&amp;#x304B;&amp;#x308C;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x304C;&amp;#x3001;&amp;#x6700;&amp;#x4F4E;&amp;#x3067;&amp;#x3082;&amp;#x30B9;&amp;#x30AF;&amp;#x30EA;&amp;#x30FC;&amp;#x30F3;&amp;#x306E;&amp;#x30D4;&amp;#x30AF;&amp;#x30BB;&amp;#x30EB;&amp;#x6570;&amp;#x306E;&amp;#x30EC;&amp;#x30A4;&amp;#x3092;&amp;#x8FFD;&amp;#x8DE1;&amp;#x3059;&amp;#x308B;&amp;#x5FC5;&amp;#x8981;&amp;#x304C;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  15. &amp;#x3053;&amp;#x306E;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30E0;&amp;#x306E;&amp;#x304A;&amp;#x304A;&amp;#x307E;&amp;#x304B;&amp;#x306A;&amp;#x4F5C;&amp;#x308A;&amp;#x306F;&amp;#x3053;&amp;#x3061;&amp;#x3089;&amp;#x3002;DrawImage&amp;#x306E;compute&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x304C;&amp;#x30D4;&amp;#x30AF;&amp;#x30BB;&amp;#x30EB;&amp;#x3054;&amp;#x3068;&amp;#x306B;Scene&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x306E;render()&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3092;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;Scene&amp;#x306B;&amp;#x306F;&amp;#x8907;&amp;#x6570;&amp;#x306E;&amp;#x30EC;&amp;#x30F3;&amp;#x30C0;&amp;#x30EA;&amp;#x30F3;&amp;#x30B0;&amp;#x5BFE;&amp;#x8C61;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x304C;&amp;#x542B;&amp;#x307E;&amp;#x308C;&amp;#x3066;&amp;#x304A;&amp;#x308A;&amp;#x3001;Primitive&amp;#x30A4;&amp;#x30F3;&amp;#x30BF;&amp;#x30D5;&amp;#x30A7;&amp;#x30FC;&amp;#x30B9;&amp;#x3092;&amp;#x901A;&amp;#x3058;&amp;#x3066;&amp;#x5FC5;&amp;#x8981;&amp;#x306A;&amp;#x30E1;&amp;#x30BD;&amp;#x30C3;&amp;#x30C9;&amp;#x3092;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  16. &amp;#x4ECA;&amp;#x56DE;&amp;#x306F;&amp;#x3001;Scene&amp;#x30AF;&amp;#x30E9;&amp;#x30B9;&amp;#x4EE5;&amp;#x4E0B;&amp;#x3059;&amp;#x3079;&amp;#x3066;&amp;#x3092;CUDA&amp;#x5316;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x3053;&amp;#x308C;&amp;#x3092;&amp;#x884C;&amp;#x3046;&amp;#x305F;&amp;#x3081;&amp;#x306B;&amp;#x3001;&amp;#x3069;&amp;#x306E;&amp;#x304F;&amp;#x3089;&amp;#x3044;&amp;#x306E;&amp;#x4F5C;&amp;#x696D;&amp;#x304C;&amp;#x5FC5;&amp;#x8981;&amp;#x306B;&amp;#x306A;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x3057;&amp;#x3087;&amp;#x3046;&amp;#x304B;&amp;#xFF1F;&amp;#x3067;&amp;#x306F;&amp;#x65E9;&amp;#x901F;&amp;#x3084;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x304D;&amp;#x307E;&amp;#x3057;&amp;#x3087;&amp;#x3046;&amp;#x3002;\n\n= Live =\n1. CMakeLists.txt&amp;#x3072;&amp;#x3089;&amp;#x304D;&amp;#x3001;CUDA_NVCC_FLAGS&amp;#x306B;-D USE_CUDA -arch=sm_20&amp;#x3092;&amp;#x30BB;&amp;#x30C3;&amp;#x30C8;&amp;#x3057;&amp;#x3001;cuda_add_executable&amp;#x3059;&amp;#x308B;\n2. porting.h &amp;#x3092;&amp;#x3072;&amp;#x3089;&amp;#x304D;&amp;#x3001;FUNC_DECL&amp;#x306B;__host__ __device__&amp;#x3064;&amp;#x3051;&amp;#x308B;\n3. main.cpp &amp;#x3092; main.cu&amp;#x306B;&amp;#x30B3;&amp;#x30D4;&amp;#x30FC;&amp;#x3059;&amp;#x308B;\n4. DrawImage&amp;#x306B;d_image_&amp;#x3092;&amp;#x8FFD;&amp;#x52A0;&amp;#x3059;&amp;#x308B;\n5. DrawImage::init&amp;#x306B;cudaMalloc(&amp;d_image...)&amp;#x3068;cudaMemset(d_image...)&amp;#x304B;&amp;#x304F;\n6. DrawImage::finish&amp;#x306B;cudaFree(d_image)&amp;#x3092;&amp;#x304B;&amp;#x304F;\n\n
  17. &amp;#x3055;&amp;#x3066;&amp;#x3001;&amp;#x3053;&amp;#x3053;&amp;#x3067;&amp;#x308F;&amp;#x304B;&amp;#x308B;&amp;#x3068;&amp;#x304A;&amp;#x308A;&amp;#x3001;Scene&amp;#x4EE5;&amp;#x4E0B;&amp;#x3092;CUDA&amp;#x5316;&amp;#x3059;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x3059;&amp;#x304B;&amp;#x3089;&amp;#x3001;CUDA&amp;#x30AB;&amp;#x30FC;&amp;#x30CD;&amp;#x30EB;&amp;#x5185;&amp;#x90E8;&amp;#x3067;C++&amp;#x306E;&amp;#x30AA;&amp;#x30D6;&amp;#x30B8;&amp;#x30A7;&amp;#x30AF;&amp;#x30C8;&amp;#x3092;&amp;#x751F;&amp;#x6210;&amp;#x3067;&amp;#x304D;&amp;#x306A;&amp;#x304F;&amp;#x3066;&amp;#x306F;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;&amp;#x3053;&amp;#x3053;&amp;#x3067;&amp;#x3001;CUDA4.0&amp;#x304B;&amp;#x3089;&amp;#x30B5;&amp;#x30DD;&amp;#x30FC;&amp;#x30C8;&amp;#x3055;&amp;#x308C;&amp;#x305F;new/delete&amp;#x304C;&amp;#x6D3B;&amp;#x8E8D;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n= Live =\n1. DrawImage&amp;#x306B;d_scene_p_&amp;#x3092;&amp;#x8FFD;&amp;#x52A0;\n2. &amp;#x30B0;&amp;#x30ED;&amp;#x30FC;&amp;#x30D0;&amp;#x30EB;&amp;#x7A7A;&amp;#x9593;&amp;#x306B;new_kernel&amp;#x3068;delete_kernel&amp;#x3092;&amp;#x8FFD;&amp;#x52A0;\n3. DrawImage::init&amp;#x306B;cudaMalloc(&amp;d_scene_p_, ...)&amp;#x3068;new_kernel&amp;#x306E;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x3092;&amp;#x304B;&amp;#x304F;\n4. DrawImage::finish&amp;#x306B;cudaFree(d_scene_p_)&amp;#x3068;delete_kernel&amp;#x306E;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x3092;&amp;#x304B;&amp;#x304F;\n5. &amp;#x30B0;&amp;#x30ED;&amp;#x30FC;&amp;#x30D0;&amp;#x30EB;&amp;#x7A7A;&amp;#x9593;&amp;#x306B;render_kernel&amp;#x3068;displace_light_kernel&amp;#x3092;&amp;#x304B;&amp;#x304F;\n5. DrawImage::compute&amp;#x306B;render_kernel&amp;#x306E;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x3092;&amp;#x304B;&amp;#x304F;\n6. DrawImage::displace_light&amp;#x306B;displace_light_kernel&amp;#x306E;&amp;#x547C;&amp;#x3073;&amp;#x51FA;&amp;#x3057;&amp;#x3092;&amp;#x304B;&amp;#x304F;\n\n&amp;#x30D3;&amp;#x30EB;&amp;#x30C9;&amp;#x3057;&amp;#x3066;&amp;#x52D5;&amp;#x304B;&amp;#x3059;\n\n
  18. &amp;#x3055;&amp;#x3066;&amp;#x3001;&amp;#x30DD;&amp;#x30A4;&amp;#x30F3;&amp;#x30C8;&amp;#x3067;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x4ECA;&amp;#x56DE;&amp;#x884C;&amp;#x3063;&amp;#x305F;&amp;#x4F5C;&amp;#x696D;&amp;#x306F;&amp;#x308F;&amp;#x305A;&amp;#x304B;&amp;#xFF15;&amp;#xFF10;&amp;#x884C;&amp;#x7A0B;&amp;#x5EA6;&amp;#x306E;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x306E;&amp;#x8FFD;&amp;#x52A0;&amp;#x3067;&amp;#x3059;&amp;#x3002;Scene&amp;#x4EE5;&amp;#x4E0B;&amp;#x306E;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x306F;&amp;#xFF11;&amp;#x884C;&amp;#x3082;&amp;#x89E6;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x306A;&amp;#x3044;&amp;#x3053;&amp;#x3068;&amp;#x306B;&amp;#x304A;&amp;#x6C17;&amp;#x3065;&amp;#x304D;&amp;#x3067;&amp;#x3059;&amp;#x304B;&amp;#xFF1F;&amp;#x809D;&amp;#x5FC3;&amp;#x306E;&amp;#x30EC;&amp;#x30F3;&amp;#x30C0;&amp;#x30EA;&amp;#x30F3;&amp;#x30B0;&amp;#x30ED;&amp;#x30B8;&amp;#x30C3;&amp;#x30AF;&amp;#x306F;&amp;#x3001;CPU&amp;#x3068;GPU&amp;#x3067;&amp;#x5B8C;&amp;#x5168;&amp;#x306B;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x3092;&amp;#x5171;&amp;#x6709;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n&amp;#x3053;&amp;#x308C;&amp;#x304C;&amp;#x3067;&amp;#x304D;&amp;#x305F;&amp;#x306E;&amp;#x3082;&amp;#x3001;CUDA4.0&amp;#x3067;C++&amp;#x30B5;&amp;#x30DD;&amp;#x30FC;&amp;#x30C8;&amp;#x304C;&amp;#x3060;&amp;#x3044;&amp;#x3076;&amp;#x62E1;&amp;#x5145;&amp;#x3055;&amp;#x308C;&amp;#x305F;&amp;#x3053;&amp;#x3068;&amp;#x304C;&amp;#x7406;&amp;#x7531;&amp;#x306E;&amp;#x4E00;&amp;#x3064;&amp;#x3067;&amp;#x3059;&amp;#x3002;SDK&amp;#x306B;newdelete&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x30B5;&amp;#x30F3;&amp;#x30D7;&amp;#x30EB;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x304C;&amp;#x3042;&amp;#x308B;&amp;#x306E;&amp;#x3067;&amp;#x3001;&amp;#x8208;&amp;#x5473;&amp;#x306E;&amp;#x3042;&amp;#x308B;&amp;#x65B9;&amp;#x306F;&amp;#x305D;&amp;#x3061;&amp;#x3089;&amp;#x3082;&amp;#x307F;&amp;#x3066;&amp;#x307F;&amp;#x3066;&amp;#x304F;&amp;#x3060;&amp;#x3055;&amp;#x3044;&amp;#x3002;\n
  19. &amp;#x3055;&amp;#x3066;&amp;#x3001;&amp;#x6700;&amp;#x5F8C;&amp;#x306B;&amp;#x30D1;&amp;#x30D5;&amp;#x30A9;&amp;#x30FC;&amp;#x30DE;&amp;#x30F3;&amp;#x30B9;&amp;#x306E;&amp;#x6E2C;&amp;#x5B9A;&amp;#x3092;&amp;#x884C;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  20. &amp;#x30D1;&amp;#x30D5;&amp;#x30A9;&amp;#x30FC;&amp;#x30DE;&amp;#x30F3;&amp;#x30B9;&amp;#x6E2C;&amp;#x5B9A;&amp;#x306B;&amp;#x4F7F;&amp;#x3046;&amp;#x306E;&amp;#x306F;&amp;#x5148;&amp;#x7A0B;&amp;#x79FB;&amp;#x690D;&amp;#x3057;&amp;#x305F;&amp;#x306E;&amp;#x30EC;&amp;#x30F3;&amp;#x30C0;&amp;#x30E9;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x305B;&amp;#x3063;&amp;#x304B;&amp;#x304F;CUDA&amp;#x306B;&amp;#x3057;&amp;#x305F;&amp;#x306E;&amp;#x3060;&amp;#x304B;&amp;#x3089;&amp;#x3001;&amp;#x305D;&amp;#x306E;&amp;#x30B9;&amp;#x30D4;&amp;#x30FC;&amp;#x30C9;&amp;#x3092;&amp;#x6570;&amp;#x5B57;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x307F;&amp;#x305F;&amp;#x3044;&amp;#x3067;&amp;#x3059;&amp;#x3088;&amp;#x306D;&amp;#x3002;&amp;#x4ECA;&amp;#x56DE;&amp;#x306F;FPS&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x3001;&amp;#x3064;&amp;#x307E;&amp;#x308A;&amp;#x4E00;&amp;#x79D2;&amp;#x9593;&amp;#x306B;&amp;#x4F55;&amp;#x679A;&amp;#x30EC;&amp;#x30F3;&amp;#x30C0;&amp;#x30EA;&amp;#x30F3;&amp;#x30B0;&amp;#x3067;&amp;#x304D;&amp;#x305F;&amp;#x306E;&amp;#x304B;&amp;#x3001;&amp;#x753B;&amp;#x9762;&amp;#x4E0A;&amp;#x306B;&amp;#x8868;&amp;#x793A;&amp;#x3057;&amp;#x3066;&amp;#x307F;&amp;#x308B;&amp;#x3053;&amp;#x3068;&amp;#x306B;&amp;#x3057;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n= Live = \n1. display_callback&amp;#x306B;Performance perf(&amp;#x201C;all&amp;#x201D;)&amp;#x3092;&amp;#x5BA3;&amp;#x8A00;&amp;#x3001;compute()&amp;#x3068;display()&amp;#x306E;&amp;#x3042;&amp;#x3068;&amp;#x3067;perf.stop()&amp;#x3057;&amp;#x3066;&amp;#x3001;1e3f&amp;#x3092;perf_mean_ms()&amp;#x3067;&amp;#x308F;&amp;#x308A;&amp;#x3001;fps&amp;#x3068;&amp;#x3059;&amp;#x308B;\n2. stringstream ss&amp;#x306B;&amp;#x9069;&amp;#x5F53;&amp;#x306B;&amp;#x6587;&amp;#x5B57;&amp;#x5217;&amp;#x3068;&amp;#x3057;&amp;#x3066;&amp;#x7A81;&amp;#x3063;&amp;#x8FBC;&amp;#x307F;&amp;#x3001;glutSetWindowtitle(ss.str().c_str())&amp;#x3059;&amp;#x308B;\n3. &amp;#x30D3;&amp;#x30EB;&amp;#x30C9;&amp;#x3057;&amp;#x3066;cpu&amp;#x7248;&amp;#x3068;gpu&amp;#x7248;&amp;#x3092;&amp;#x6BD4;&amp;#x3079;&amp;#x308B;&amp;#x3002;10&amp;#x500D;&amp;#x304F;&amp;#x3089;&amp;#x3044;&amp;#x9055;&amp;#x3046;&amp;#x30CF;&amp;#x30BA;\n
  21. &amp;#x4ECA;&amp;#x56DE;&amp;#x306F;fps&amp;#x3001;&amp;#x3064;&amp;#x307E;&amp;#x308A;&amp;#x5358;&amp;#x7D14;&amp;#x306A;&amp;#x8A08;&amp;#x7B97;&amp;#x6642;&amp;#x9593;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x5F62;&amp;#x3067;&amp;#x30D1;&amp;#x30D5;&amp;#x30A9;&amp;#x30FC;&amp;#x30DE;&amp;#x30F3;&amp;#x30B9;&amp;#x3092;&amp;#x8868;&amp;#x793A;&amp;#x3057;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x304C;&amp;#x3001;&amp;#x672C;&amp;#x5F53;&amp;#x306B;&amp;#x5927;&amp;#x4E8B;&amp;#x306A;&amp;#x306E;&amp;#x306F;&amp;#x8A08;&amp;#x7B97;&amp;#x6642;&amp;#x9593;&amp;#x306E;&amp;#x3046;&amp;#x3061;&amp;#x3001;&amp;#x3069;&amp;#x306E;&amp;#x3088;&amp;#x3046;&amp;#x306A;&amp;#x51E6;&amp;#x7406;&amp;#x304C;&amp;#x3069;&amp;#x306E;&amp;#x304F;&amp;#x3089;&amp;#x3044;&amp;#x306E;&amp;#x5272;&amp;#x5408;&amp;#x3092;&amp;#x5360;&amp;#x3081;&amp;#x308B;&amp;#x306E;&amp;#x304B;&amp;#x3068;&amp;#x3044;&amp;#x3046;&amp;#x3053;&amp;#x3068;&amp;#x3067;&amp;#x3059;&amp;#x3002;&amp;#x3053;&amp;#x308C;&amp;#x306B;&amp;#x3064;&amp;#x3044;&amp;#x3066;&amp;#x306F;&amp;#x3001;&amp;#x7B2C;&amp;#xFF13;&amp;#x3001;&amp;#xFF14;&amp;#x30C1;&amp;#x30E5;&amp;#x30FC;&amp;#x30C8;&amp;#x30EA;&amp;#x30A2;&amp;#x30EB;&amp;#x3067;&amp;#x7D39;&amp;#x4ECB;&amp;#x3055;&amp;#x308C;&amp;#x308B;&amp;#x30D7;&amp;#x30ED;&amp;#x30D5;&amp;#x30A1;&amp;#x30A4;&amp;#x30EA;&amp;#x30F3;&amp;#x30B0;&amp;#x30C4;&amp;#x30FC;&amp;#x30EB;&amp;#x304C;&amp;#x5F79;&amp;#x7ACB;&amp;#x3061;&amp;#x307E;&amp;#x3059;&amp;#x3002;&amp;#x8208;&amp;#x5473;&amp;#x306E;&amp;#x3042;&amp;#x308B;&amp;#x65B9;&amp;#x306F;&amp;#x662F;&amp;#x975E;&amp;#x5FA1;&amp;#x89A7;&amp;#x304F;&amp;#x3060;&amp;#x3055;&amp;#x3044;&amp;#x3002;\n
  22. &amp;#x30D5;&amp;#x30EA;&amp;#x30FC;&amp;#x30E9;&amp;#x30F3;&amp;#x30C1;&amp;#x3001;&amp;#x3064;&amp;#x307E;&amp;#x308A;&amp;#x52AA;&amp;#x529B;&amp;#x305B;&amp;#x305A;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30E0;&amp;#x304C;&amp;#x65E9;&amp;#x304F;&amp;#x306A;&amp;#x308B;&amp;#x5922;&amp;#x306E;&amp;#x6642;&amp;#x9593;&amp;#x306F;&amp;#x7D42;&amp;#x308F;&amp;#x308A;&amp;#x3001;&amp;#x5C11;&amp;#x3057;&amp;#x306E;&amp;#x624B;&amp;#x9593;&amp;#x3067;&amp;#x3001;&amp;#x7F8E;&amp;#x5473;&amp;#x3057;&amp;#x3044;&amp;#x30C7;&amp;#x30A3;&amp;#x30CA;&amp;#x30FC;&amp;#x3092;&amp;#x98DF;&amp;#x3079;&amp;#x308B;&amp;#x6642;&amp;#x304C;&amp;#x6765;&amp;#x307E;&amp;#x3057;&amp;#x305F;&amp;#x3002;&amp;#x6B21;&amp;#x306F;&amp;#x307F;&amp;#x306A;&amp;#x3055;&amp;#x3093;&amp;#x306E;&amp;#x756A;&amp;#x3067;&amp;#x3059;&amp;#x3002;\n
  23. C/C++&amp;#x3092;&amp;#x77E5;&amp;#x3063;&amp;#x3066;&amp;#x3044;&amp;#x308C;&amp;#x3070;&amp;#x3001;CUDA&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0;&amp;#x306F;&amp;#x96E3;&amp;#x3057;&amp;#x304F;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x305B;&amp;#x3093;&amp;#x3002;&amp;#x7C21;&amp;#x5358;&amp;#x306B;&amp;#x52D5;&amp;#x304B;&amp;#x3059;&amp;#x3060;&amp;#x3051;&amp;#x3067;&amp;#x3042;&amp;#x308C;&amp;#x3070;&amp;#x3001;&amp;#x6700;&amp;#x4F4E;&amp;#x9650;&amp;#x306E;&amp;#x52AA;&amp;#x529B;&amp;#x3067;&amp;#x9054;&amp;#x6210;&amp;#x53EF;&amp;#x80FD;&amp;#x306A;&amp;#x5834;&amp;#x5408;&amp;#x3082;&amp;#x3042;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n\n&amp;#x6700;&amp;#x5F8C;&amp;#x306B;&amp;#x306A;&amp;#x308A;&amp;#x307E;&amp;#x3059;&amp;#x304C;&amp;#x3001;&amp;#x4ECA;&amp;#x56DE;&amp;#x4F7F;&amp;#x7528;&amp;#x3057;&amp;#x305F;&amp;#x30BD;&amp;#x30FC;&amp;#x30B9;&amp;#x30B3;&amp;#x30FC;&amp;#x30C9;&amp;#x306F;&amp;#x4EE5;&amp;#x4E0B;&amp;#x3067;&amp;#x516C;&amp;#x958B;&amp;#x3057;&amp;#x3066;&amp;#x3044;&amp;#x307E;&amp;#x3059;&amp;#x3002;\n
  24. &amp;#x305D;&amp;#x308C;&amp;#x3067;&amp;#x306F;&amp;#x307F;&amp;#x306A;&amp;#x3055;&amp;#x3093;&amp;#x3001;&amp;#x3088;&amp;#x3044;&amp;#x30D7;&amp;#x30ED;&amp;#x30B0;&amp;#x30E9;&amp;#x30DF;&amp;#x30F3;&amp;#x30B0;&amp;#x3092;&amp;#xFF01;\n