SlideShare a Scribd company logo
1 of 89
CUDAを利用したPIV解析の
   高速化に関する研究



指導教員       熱工学研究室
二宮 尚         史 翔新
CUDAを利用したPIV解析の
   高速化に関する研究



指導教員       熱工学研究室
二宮 尚         史 翔新
PIV
Particle Image Velocimetry
      粒子画像流速測定法
時刻 t   時刻 t+Δt
時刻t
時刻t
時刻t   時刻t+Δt
時刻t   時刻t+Δt
時刻t   時刻t+Δt
時刻t   時刻t+Δt
時刻t   時刻t+Δt
時刻t   時刻t+Δt
時刻t
PIV解析はベクトルが多い
PIV解析はベクトルが多い

• 画像サイズは1024×1024
PIV解析はベクトルが多い

• 画像サイズは1024×1024
• 検査領域サイズは8×8から48×48
PIV解析はベクトルが多い

• 画像サイズは1024×1024
• 検査領域サイズは8×8から48×48
• オーバーラップは50%が平均的
PIV解析はベクトルが多い


 一回の解析で数千∼数万のベクトル
同時演算
同時演算に優れたデバイス?
GPU
Graphics Processing Unit
     画像演算装置
GPU
Graphics Processing Unit
 画像演算装置
GPGPU
General Purpose Graphics Processing Unit
         汎用目的画像演算装置
SM数       SP数
   名前
              (CPU数相当) (コア数相当)
GeForce GT
                 12        96
   240
GeForce GTX
                 48        384
   560 Ti
GeForce GTX
                168       1,344
   660 Ti

                  主流のグラフィックボードスペック
スパコン   単一CPU   単一GPU

 演算能力      ◎      ⃝       △

単一スレッド
           ◎      ◎       ⃝
 演算速度

マルチスレッド
           ◎      △       ⃝
  演算速度

運用コスト      ☓      ⃝       ⃝
スパコン   単一CPU   単一GPU

 演算能力      ◎      ⃝       △

単一スレッド
           ◎      ◎       ⃝
 演算速度

マルチスレッド
           ◎      △       ⃝
  演算速度

運用コスト      ☓      ⃝       ⃝
スパコン   単一CPU   単一GPU

 演算能力      ◎      ⃝       △

単一スレッド
           ◎      ◎       ⃝
 演算速度

マルチスレッド
           ◎      △       ⃝
  演算速度

運用コスト      ☓      ⃝       ⃝
GPGPU
CPU
GPGPU
CPU   C、Java、Ruby…
GPGPU
CPU   C、Java、Ruby…
GPGPU   言語?
• CUDA
• CUDA
• ATI Stream
• CUDA
• ATI Stream
• OpenCL
CUDA   ATI Stream   OpenCL

対応デバイス    △         △          ⃝

 性能       ◎         ◎          ⃝

サポート      ◎         △          ⃝
CUDA   ATI Stream   OpenCL

対応デバイス    △         △          ⃝

 性能       ◎         ◎          ⃝

サポート      ◎         △          ⃝
CUDA   ATI Stream   OpenCL

対応デバイス    △         △          ⃝

 性能       ◎         ◎          ⃝

サポート      ◎         △          ⃝
CUDA   ATI Stream   OpenCL

対応デバイス    △         △          ⃝

 性能       ◎         ◎          ⃝

サポート      ◎         △          ⃝
CUDA   ATI Stream   OpenCL

対応デバイス    △         △          ⃝

 性能       ◎         ◎          ⃝

サポート      ◎         △          ⃝
CUDA
C言語コード   CUDAコード
C言語コード                  CUDAコード
#include <stdio.h>

int main() {
! int n, *a;
! n = 100;
! a = (int *)malloc(n);

!
!   func(a, n);


!
!   return 0;
}

void func(int *a, int n) {
! int i;



!   for (i = 0; i < n; i++) {
!   ! a[i] = i;
!   }
}
C言語コード                         CUDAコード
#include <stdio.h>              #include <stdio.h>

int main() {                    int main() {
! int n, *a;                    ! int n, *cpu_a, *gpu_a;
! n = 100;                      ! n = 100;
! a = (int *)malloc(n);         ! cpu_a = (int *)malloc(n);
                                ! cudaMalloc((void **)&gpu_a, n);
!                               !
!   func(a, n);                 ! func<<<3, 32>>>(gpu_a, n);
                                ! cudaMemcpy(cpu_a, gpu_a, n,
                                cudaMemcpyDeviceToHost);
!                               !
!   return 0;                   ! return 0;
}                               }

void func(int *a, int n) {      __global__ void func(int *a, int n) {
! int i;                        ! int i;
                                ! i = blockIdx.x * blockDim.x +
                                threadIdx.x;
                                !
!   for (i = 0; i < n; i++) {   ! if (i < n) {
!   ! a[i] = i;                 ! ! a[i] = i;
!   }                           ! }
}                               }
C言語コード                         CUDAコード
#include <stdio.h>              #include <stdio.h>

int main() {                    int main() {
! int n, *a;                    ! int n, *cpu_a, *gpu_a;
! n = 100;                      ! n = 100;
! a = (int *)malloc(n);         ! cpu_a = (int *)malloc(n);
                                ! cudaMalloc((void **)&gpu_a, n);
!                               !
!   func(a, n);                 ! func<<<3, 32>>>(gpu_a, n);
                                ! cudaMemcpy(cpu_a, gpu_a, n,
                                cudaMemcpyDeviceToHost);
!                               !
!   return 0;                   ! return 0;
}                               }

void func(int *a, int n) {      __global__ void func(int *a, int n) {
! int i;                        ! int i;
                                ! i = blockIdx.x * blockDim.x +
                                threadIdx.x;
                                !
!   for (i = 0; i < n; i++) {   ! if (i < n) {
!   ! a[i] = i;                 ! ! a[i] = i;
!   }                           ! }
}                               }
C言語コード                         CUDAコード
#include <stdio.h>              #include <stdio.h>

int main() {                    int main() {
! int n, *a;                    ! int n, *cpu_a, *gpu_a;
! n = 100;                      ! n = 100;
! a = (int *)malloc(n);         ! cpu_a = (int *)malloc(n);
                                ! cudaMalloc((void **)&gpu_a, n);
!                               !
!   func(a, n);                 ! func<<<3, 32>>>(gpu_a, n);
                                ! cudaMemcpy(cpu_a, gpu_a, n,
                                cudaMemcpyDeviceToHost);
!                               !
!   return 0;                   ! return 0;
}                               }

void func(int *a, int n) {      __global__ void func(int *a, int n) {
! int i;                        ! int i;
                                ! i = blockIdx.x * blockDim.x +
                                threadIdx.x;
                                !
!   for (i = 0; i < n; i++) {   ! if (i < n) {
!   ! a[i] = i;                 ! ! a[i] = i;
!   }                           ! }
}                               }
C言語コード                         CUDAコード
#include <stdio.h>              #include <stdio.h>

int main() {                    int main() {
! int n, *a;                    ! int n, *cpu_a, *gpu_a;
! n = 100;                      ! n = 100;
! a = (int *)malloc(n);         ! cpu_a = (int *)malloc(n);
                                ! cudaMalloc((void **)&gpu_a, n);
!                               !
!   func(a, n);                 ! func<<<3, 32>>>(gpu_a, n);
                                ! cudaMemcpy(cpu_a, gpu_a, n,
                                cudaMemcpyDeviceToHost);
!                               !
!   return 0;                   ! return 0;
}                               }

void func(int *a, int n) {      __global__ void func(int *a, int n) {
! int i;                        ! int i;
                                ! i = blockIdx.x * blockDim.x +
                                threadIdx.x;
                                !
!   for (i = 0; i < n; i++) {   ! if (i < n) {
!   ! a[i] = i;                 ! ! a[i] = i;
!   }                           ! }
}                               }
C言語コード                         CUDAコード
#include <stdio.h>              #include <stdio.h>

int main() {                    int main() {
! int n, *a;                    ! int n, *cpu_a, *gpu_a;
! n = 100;                      ! n = 100;
! a = (int *)malloc(n);         ! cpu_a = (int *)malloc(n);
                                ! cudaMalloc((void **)&gpu_a, n);
!                               !
!   func(a, n);                 ! func<<<3, 32>>>(gpu_a, n);
                                ! cudaMemcpy(cpu_a, gpu_a, n,
                                cudaMemcpyDeviceToHost);
!                               !
!   return 0;                   ! return 0;
}                               }

void func(int *a, int n) {      __global__ void func(int *a, int n) {
! int i;                        ! int i;
                                ! i = blockIdx.x * blockDim.x +
                                threadIdx.x;
                                !
!   for (i = 0; i < n; i++) {   ! if (i < n) {
!   ! a[i] = i;                 ! ! a[i] = i;
!   }                           ! }
}                               }
C言語コード                         CUDAコード
#include <stdio.h>              #include <stdio.h>

int main() {                    int main() {
! int n, *a;                    ! int n, *cpu_a, *gpu_a;
! n = 100;                      ! n = 100;
! a = (int *)malloc(n);         ! cpu_a = (int *)malloc(n);
                                ! cudaMalloc((void **)&gpu_a, n);
!                               !
!   func(a, n);                 ! func<<<3, 32>>>(gpu_a, n);
                                ! cudaMemcpy(cpu_a, gpu_a, n,
                                cudaMemcpyDeviceToHost);
!                               !
!   return 0;                   ! return 0;
}                               }

void func(int *a, int n) {      __global__ void func(int *a, int n) {
! int i;                        ! int i;
                                ! i = blockIdx.x * blockDim.x +
                                threadIdx.x;
                                !
!   for (i = 0; i < n; i++) {   ! if (i < n) {
!   ! a[i] = i;                 ! ! a[i] = i;
!   }                           ! }
}                               }
C言語コード                         CUDAコード
#include <stdio.h>              #include <stdio.h>

int main() {                    int main() {
! int n, *a;                    ! int n, *cpu_a, *gpu_a;
! n = 100;                      ! n = 100;
! a = (int *)malloc(n);         ! cpu_a = (int *)malloc(n);
                                ! cudaMalloc((void **)&gpu_a, n);
!                               !
!   func(a, n);                 ! func<<<3, 32>>>(gpu_a, n);
                                ! cudaMemcpy(cpu_a, gpu_a, n,
                                cudaMemcpyDeviceToHost);
!                               !
!   return 0;                   ! return 0;
}                               }

void func(int *a, int n) {      __global__ void func(int *a, int n) {
! int i;                        ! int i;
                                ! i = blockIdx.x * blockDim.x +
                                threadIdx.x;
                                !
!   for (i = 0; i < n; i++) {   ! if (i < n) {
!   ! a[i] = i;                 ! ! a[i] = i;
!   }                           ! }
}                               }
C言語コード                         CUDAコード
#include <stdio.h>              #include <stdio.h>

int main() {                    int main() {
! int n, *a;                    ! int n, *cpu_a, *gpu_a;
! n = 100;                      ! n = 100;
! a = (int *)malloc(n);         ! cpu_a = (int *)malloc(n);
                                ! cudaMalloc((void **)&gpu_a, n);
!                               !
!   func(a, n);                 ! func<<<3, 32>>>(gpu_a, n);
                                ! cudaMemcpy(cpu_a, gpu_a, n,
                                cudaMemcpyDeviceToHost);
!                               !
!   return 0;                   ! return 0;
}                               }

void func(int *a, int n) {      __global__ void func(int *a, int n) {
! int i;                        ! int i;
                                ! i = blockIdx.x * blockDim.x +
                                threadIdx.x;
                                !
!   for (i = 0; i < n; i++) {   ! if (i < n) {
!   ! a[i] = i;                 ! ! a[i] = i;
!   }                           ! }
}                               }
PIV解析実行時間比較
90 sec




60 sec




30 sec




                  i:24; w: 24   i:32; w:32   i:48; w:48
   i: 16; w: 16
PIV解析実行時間比較
90 sec                          C言語(Intel Core 2 Duo P8400 2.26GHz)



60 sec




30 sec




                  i:24; w: 24   i:32; w:32    i:48; w:48
   i: 16; w: 16
PIV解析実行時間比較
90 sec                          C言語(Intel Core 2 Duo P8400 2.26GHz)



60 sec




30 sec                                C言語(Intel Core i5 2400s 2.5GHz)




                  i:24; w: 24   i:32; w:32     i:48; w:48
   i: 16; w: 16
PIV解析実行時間比較
90 sec                          C言語(Intel Core 2 Duo P8400 2.26GHz)



60 sec




30 sec                                C言語(Intel Core i5 2400s 2.5GHz)



                                     CUDA(Nvidia GeForce GTX 560 Ti)

                  i:24; w: 24   i:32; w:32     i:48; w:48
   i: 16; w: 16
倍以上の速さ

         ※Core i5の実行速度より
3
倍以上の速さ

         ※Core i5の実行速度より
3
倍以上の速さ

         ※Core i5の実行速度より
                ※最適化無し
300
倍以上の速さ

         ※Core i5の実行速度より
         ※最適化した場合の予想値
CUDAを用いた場合のPIV解析時間
  0 sec   10 sec   20 sec   30 sec   40 sec   50 sec


2枚




30枚


           現在値                  予想値




                    ※画像サイズ:1024×1024;検査領域:48×48;探査領域:24×24
CUDAを用いた場合のPIV解析時間
  0 sec         10 sec   20 sec   30 sec   40 sec   50 sec

          2.75 sec
2枚




30枚


                 現在値                  予想値




                          ※画像サイズ:1024×1024;検査領域:48×48;探査領域:24×24
CUDAを用いた場合のPIV解析時間
  0 sec          10 sec   20 sec   30 sec   40 sec   50 sec

          2.75 sec
2枚
      0.03 sec




30枚


                  現在値                  予想値




                           ※画像サイズ:1024×1024;検査領域:48×48;探査領域:24×24
CUDAを用いた場合のPIV解析時間
  0 sec          10 sec   20 sec   30 sec   40 sec      50 sec

          2.75 sec
2枚
      0.03 sec


                                                     41.25 sec

30枚


                  現在値                  予想値




                           ※画像サイズ:1024×1024;検査領域:48×48;探査領域:24×24
CUDAを用いた場合のPIV解析時間
  0 sec           10 sec   20 sec   30 sec   40 sec      50 sec

          2.75 sec
2枚
      0.03 sec


                                                      41.25 sec

30枚
       0.41 sec

                   現在値                  予想値




                            ※画像サイズ:1024×1024;検査領域:48×48;探査領域:24×24
CUDAを用いた場合のPIV解析時間
  0 sec           10 sec   20 sec   30 sec   40 sec      50 sec

          2.75 sec
2枚
      0.03 sec


                                                      41.25 sec

30枚
       0.41 sec

                   現在値                  予想値


        30枚を処理するのに1秒以下

                            ※画像サイズ:1024×1024;検査領域:48×48;探査領域:24×24
フレームレートより


速い解析スピード
リアルタイムレンダリング
解析スタイルを
大きく変える

リアルタイムレンダリング
今後の課題
今後の課題

• PIV(OCC)プログラムの改良
今後の課題

• PIV(OCC)プログラムの改良
• リアルタイムレンダリング(理想)
!ank y"

More Related Content

What's hot

分散型強化学習手法の最近の動向と分散計算フレームワークRayによる実装の試み
分散型強化学習手法の最近の動向と分散計算フレームワークRayによる実装の試み分散型強化学習手法の最近の動向と分散計算フレームワークRayによる実装の試み
分散型強化学習手法の最近の動向と分散計算フレームワークRayによる実装の試みSusumuOTA
 
スパースモデリング入門
スパースモデリング入門スパースモデリング入門
スパースモデリング入門Hideo Terada
 
Kaggle RSNA Pneumonia Detection Challenge 解法紹介
Kaggle RSNA Pneumonia Detection Challenge 解法紹介Kaggle RSNA Pneumonia Detection Challenge 解法紹介
Kaggle RSNA Pneumonia Detection Challenge 解法紹介理 秋山
 
計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミング計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミングNorishige Fukushima
 
(文献紹介)エッジ保存フィルタ:Side Window Filter, Curvature Filter
(文献紹介)エッジ保存フィルタ:Side Window Filter, Curvature Filter(文献紹介)エッジ保存フィルタ:Side Window Filter, Curvature Filter
(文献紹介)エッジ保存フィルタ:Side Window Filter, Curvature FilterMorpho, Inc.
 
生成モデルの Deep Learning
生成モデルの Deep Learning生成モデルの Deep Learning
生成モデルの Deep LearningSeiya Tokui
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方joisino
 
[DL輪読会]`強化学習のための状態表現学習 -より良い「世界モデル」の獲得に向けて-
[DL輪読会]`強化学習のための状態表現学習 -より良い「世界モデル」の獲得に向けて-[DL輪読会]`強化学習のための状態表現学習 -より良い「世界モデル」の獲得に向けて-
[DL輪読会]`強化学習のための状態表現学習 -より良い「世界モデル」の獲得に向けて-Deep Learning JP
 
[DL輪読会]“SimPLe”,“Improved Dynamics Model”,“PlaNet” 近年のVAEベース系列モデルの進展とそのモデルベース...
[DL輪読会]“SimPLe”,“Improved Dynamics Model”,“PlaNet” 近年のVAEベース系列モデルの進展とそのモデルベース...[DL輪読会]“SimPLe”,“Improved Dynamics Model”,“PlaNet” 近年のVAEベース系列モデルの進展とそのモデルベース...
[DL輪読会]“SimPLe”,“Improved Dynamics Model”,“PlaNet” 近年のVAEベース系列モデルの進展とそのモデルベース...Deep Learning JP
 
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2Preferred Networks
 
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII
 
1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門NVIDIA Japan
 
【DL輪読会】AuthenticAuthentic Volumetric Avatars from a Phone Scan
【DL輪読会】AuthenticAuthentic Volumetric Avatars from a Phone Scan【DL輪読会】AuthenticAuthentic Volumetric Avatars from a Phone Scan
【DL輪読会】AuthenticAuthentic Volumetric Avatars from a Phone ScanDeep Learning JP
 
[DL輪読会]Active Domain Randomization
[DL輪読会]Active Domain Randomization[DL輪読会]Active Domain Randomization
[DL輪読会]Active Domain RandomizationDeep Learning JP
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門NVIDIA Japan
 
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)Hiroki Nakahara
 
[DL輪読会]深層強化学習はなぜ難しいのか?Why Deep RL fails? A brief survey of recent works.
[DL輪読会]深層強化学習はなぜ難しいのか?Why Deep RL fails? A brief survey of recent works.[DL輪読会]深層強化学習はなぜ難しいのか?Why Deep RL fails? A brief survey of recent works.
[DL輪読会]深層強化学習はなぜ難しいのか?Why Deep RL fails? A brief survey of recent works.Deep Learning JP
 

What's hot (20)

分散型強化学習手法の最近の動向と分散計算フレームワークRayによる実装の試み
分散型強化学習手法の最近の動向と分散計算フレームワークRayによる実装の試み分散型強化学習手法の最近の動向と分散計算フレームワークRayによる実装の試み
分散型強化学習手法の最近の動向と分散計算フレームワークRayによる実装の試み
 
PRML8章
PRML8章PRML8章
PRML8章
 
スパースモデリング入門
スパースモデリング入門スパースモデリング入門
スパースモデリング入門
 
Kaggle RSNA Pneumonia Detection Challenge 解法紹介
Kaggle RSNA Pneumonia Detection Challenge 解法紹介Kaggle RSNA Pneumonia Detection Challenge 解法紹介
Kaggle RSNA Pneumonia Detection Challenge 解法紹介
 
計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミング計算機アーキテクチャを考慮した高能率画像処理プログラミング
計算機アーキテクチャを考慮した高能率画像処理プログラミング
 
(文献紹介)エッジ保存フィルタ:Side Window Filter, Curvature Filter
(文献紹介)エッジ保存フィルタ:Side Window Filter, Curvature Filter(文献紹介)エッジ保存フィルタ:Side Window Filter, Curvature Filter
(文献紹介)エッジ保存フィルタ:Side Window Filter, Curvature Filter
 
生成モデルの Deep Learning
生成モデルの Deep Learning生成モデルの Deep Learning
生成モデルの Deep Learning
 
最適輸送の解き方
最適輸送の解き方最適輸送の解き方
最適輸送の解き方
 
[DL輪読会]`強化学習のための状態表現学習 -より良い「世界モデル」の獲得に向けて-
[DL輪読会]`強化学習のための状態表現学習 -より良い「世界モデル」の獲得に向けて-[DL輪読会]`強化学習のための状態表現学習 -より良い「世界モデル」の獲得に向けて-
[DL輪読会]`強化学習のための状態表現学習 -より良い「世界モデル」の獲得に向けて-
 
[DL輪読会]“SimPLe”,“Improved Dynamics Model”,“PlaNet” 近年のVAEベース系列モデルの進展とそのモデルベース...
[DL輪読会]“SimPLe”,“Improved Dynamics Model”,“PlaNet” 近年のVAEベース系列モデルの進展とそのモデルベース...[DL輪読会]“SimPLe”,“Improved Dynamics Model”,“PlaNet” 近年のVAEベース系列モデルの進展とそのモデルベース...
[DL輪読会]“SimPLe”,“Improved Dynamics Model”,“PlaNet” 近年のVAEベース系列モデルの進展とそのモデルベース...
 
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
Optuna Dashboardの紹介と設計解説 - 2022/12/10 Optuna Meetup #2
 
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
SSII2019TS: 実践カメラキャリブレーション ~カメラを用いた実世界計測の基礎と応用~
 
PyCUDAの紹介
PyCUDAの紹介PyCUDAの紹介
PyCUDAの紹介
 
1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門1076: CUDAデバッグ・プロファイリング入門
1076: CUDAデバッグ・プロファイリング入門
 
【DL輪読会】AuthenticAuthentic Volumetric Avatars from a Phone Scan
【DL輪読会】AuthenticAuthentic Volumetric Avatars from a Phone Scan【DL輪読会】AuthenticAuthentic Volumetric Avatars from a Phone Scan
【DL輪読会】AuthenticAuthentic Volumetric Avatars from a Phone Scan
 
[DL輪読会]World Models
[DL輪読会]World Models[DL輪読会]World Models
[DL輪読会]World Models
 
[DL輪読会]Active Domain Randomization
[DL輪読会]Active Domain Randomization[DL輪読会]Active Domain Randomization
[DL輪読会]Active Domain Randomization
 
CUDAプログラミング入門
CUDAプログラミング入門CUDAプログラミング入門
CUDAプログラミング入門
 
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)2値化CNN on FPGAでGPUとガチンコバトル(公開版)
2値化CNN on FPGAでGPUとガチンコバトル(公開版)
 
[DL輪読会]深層強化学習はなぜ難しいのか?Why Deep RL fails? A brief survey of recent works.
[DL輪読会]深層強化学習はなぜ難しいのか?Why Deep RL fails? A brief survey of recent works.[DL輪読会]深層強化学習はなぜ難しいのか?Why Deep RL fails? A brief survey of recent works.
[DL輪読会]深層強化学習はなぜ難しいのか?Why Deep RL fails? A brief survey of recent works.
 

Similar to CUDAを利用したPIV解析の高速化

DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519Yasuhiro Ishii
 
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
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013Ryo Sakamoto
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11えぴ 福田
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competitionyak1ex
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputingNoboru Irieda
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門natrium11321
 
HaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミングHaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミングKiwamu Okabe
 
GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)なおき きしだ
 
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道なおき きしだ
 
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかお前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかKousuke Ebihara
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competitionyak1ex
 
StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件yaegashi
 
新しい並列for構文のご提案
新しい並列for構文のご提案新しい並列for構文のご提案
新しい並列for構文のご提案yohhoy
 
動的計画法の並列化
動的計画法の並列化動的計画法の並列化
動的計画法の並列化Proktmr
 
Cython intro prelerease
Cython intro prelereaseCython intro prelerease
Cython intro prelereaseShiqiao Du
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPUTakuro Iizuka
 

Similar to CUDAを利用したPIV解析の高速化 (20)

DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
 
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティングCMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
 
ぱっと見でわかるC++11
ぱっと見でわかるC++11ぱっと見でわかるC++11
ぱっと見でわかるC++11
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
 
Python physicalcomputing
Python physicalcomputingPython physicalcomputing
Python physicalcomputing
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
HaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミングHaskellではじめるCortex-M3組込みプログラミング
HaskellではじめるCortex-M3組込みプログラミング
 
GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)GPUをJavaで使う話(Java Casual Talks #1)
GPUをJavaで使う話(Java Casual Talks #1)
 
コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道コンピューティングとJava~なにわTECH道
コンピューティングとJava~なにわTECH道
 
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのかお前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのか
 
C++0x in programming competition
C++0x in programming competitionC++0x in programming competition
C++0x in programming competition
 
StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件StackExchangeで見たシステムプログラミング案件
StackExchangeで見たシステムプログラミング案件
 
Slide
SlideSlide
Slide
 
新しい並列for構文のご提案
新しい並列for構文のご提案新しい並列for構文のご提案
新しい並列for構文のご提案
 
動的計画法の並列化
動的計画法の並列化動的計画法の並列化
動的計画法の並列化
 
Cuda
CudaCuda
Cuda
 
Cython intro prelerease
Cython intro prelereaseCython intro prelerease
Cython intro prelerease
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU関東GPGPU勉強会 LLVM meets GPU
関東GPGPU勉強会 LLVM meets GPU
 

More from 翔新 史

ハッカソンに使うSwift & Swift 3.0のGCD
ハッカソンに使うSwift & Swift 3.0のGCDハッカソンに使うSwift & Swift 3.0のGCD
ハッカソンに使うSwift & Swift 3.0のGCD翔新 史
 
CUDAを利用したPIV解析の高速化に関する研究(卒業発表)
CUDAを利用したPIV解析の高速化に関する研究(卒業発表)CUDAを利用したPIV解析の高速化に関する研究(卒業発表)
CUDAを利用したPIV解析の高速化に関する研究(卒業発表)翔新 史
 
Steve jobs introducton
Steve jobs introductonSteve jobs introducton
Steve jobs introducton翔新 史
 
2010 english honors camp music intro
2010 english honors camp music intro2010 english honors camp music intro
2010 english honors camp music intro翔新 史
 
事業計画書
事業計画書事業計画書
事業計画書翔新 史
 
工学部の魅力
工学部の魅力工学部の魅力
工学部の魅力翔新 史
 
Honors camp music intro
Honors camp music introHonors camp music intro
Honors camp music intro翔新 史
 

More from 翔新 史 (7)

ハッカソンに使うSwift & Swift 3.0のGCD
ハッカソンに使うSwift & Swift 3.0のGCDハッカソンに使うSwift & Swift 3.0のGCD
ハッカソンに使うSwift & Swift 3.0のGCD
 
CUDAを利用したPIV解析の高速化に関する研究(卒業発表)
CUDAを利用したPIV解析の高速化に関する研究(卒業発表)CUDAを利用したPIV解析の高速化に関する研究(卒業発表)
CUDAを利用したPIV解析の高速化に関する研究(卒業発表)
 
Steve jobs introducton
Steve jobs introductonSteve jobs introducton
Steve jobs introducton
 
2010 english honors camp music intro
2010 english honors camp music intro2010 english honors camp music intro
2010 english honors camp music intro
 
事業計画書
事業計画書事業計画書
事業計画書
 
工学部の魅力
工学部の魅力工学部の魅力
工学部の魅力
 
Honors camp music intro
Honors camp music introHonors camp music intro
Honors camp music intro
 

Recently uploaded

東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2Tokyo Institute of Technology
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ssusere0a682
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ssusere0a682
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptyuitoakatsukijp
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationYukiTerazawa
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024koheioishi1
 

Recently uploaded (6)

東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScript
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 

CUDAを利用したPIV解析の高速化

  • 1. CUDAを利用したPIV解析の 高速化に関する研究 指導教員 熱工学研究室 二宮 尚 史 翔新
  • 2. CUDAを利用したPIV解析の 高速化に関する研究 指導教員 熱工学研究室 二宮 尚 史 翔新
  • 3. PIV
  • 4. Particle Image Velocimetry 粒子画像流速測定法
  • 5.
  • 6.
  • 7.
  • 8.
  • 9. 時刻 t 時刻 t+Δt
  • 10.
  • 11.
  • 14. 時刻t 時刻t+Δt
  • 15. 時刻t 時刻t+Δt
  • 16. 時刻t 時刻t+Δt
  • 17. 時刻t 時刻t+Δt
  • 18. 時刻t 時刻t+Δt
  • 19. 時刻t 時刻t+Δt
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 32.
  • 33.
  • 36.
  • 37. GPU Graphics Processing Unit 画像演算装置
  • 38. GPU Graphics Processing Unit 画像演算装置
  • 39. GPGPU General Purpose Graphics Processing Unit 汎用目的画像演算装置
  • 40. SM数 SP数 名前 (CPU数相当) (コア数相当) GeForce GT 12 96 240 GeForce GTX 48 384 560 Ti GeForce GTX 168 1,344 660 Ti 主流のグラフィックボードスペック
  • 41. スパコン 単一CPU 単一GPU 演算能力 ◎ ⃝ △ 単一スレッド ◎ ◎ ⃝ 演算速度 マルチスレッド ◎ △ ⃝ 演算速度 運用コスト ☓ ⃝ ⃝
  • 42. スパコン 単一CPU 単一GPU 演算能力 ◎ ⃝ △ 単一スレッド ◎ ◎ ⃝ 演算速度 マルチスレッド ◎ △ ⃝ 演算速度 運用コスト ☓ ⃝ ⃝
  • 43. スパコン 単一CPU 単一GPU 演算能力 ◎ ⃝ △ 単一スレッド ◎ ◎ ⃝ 演算速度 マルチスレッド ◎ △ ⃝ 演算速度 運用コスト ☓ ⃝ ⃝
  • 44. GPGPU
  • 46. CPU C、Java、Ruby… GPGPU
  • 47. CPU C、Java、Ruby… GPGPU 言語?
  • 48.
  • 51. • CUDA • ATI Stream • OpenCL
  • 52. CUDA ATI Stream OpenCL 対応デバイス △ △ ⃝ 性能 ◎ ◎ ⃝ サポート ◎ △ ⃝
  • 53. CUDA ATI Stream OpenCL 対応デバイス △ △ ⃝ 性能 ◎ ◎ ⃝ サポート ◎ △ ⃝
  • 54. CUDA ATI Stream OpenCL 対応デバイス △ △ ⃝ 性能 ◎ ◎ ⃝ サポート ◎ △ ⃝
  • 55. CUDA ATI Stream OpenCL 対応デバイス △ △ ⃝ 性能 ◎ ◎ ⃝ サポート ◎ △ ⃝
  • 56. CUDA ATI Stream OpenCL 対応デバイス △ △ ⃝ 性能 ◎ ◎ ⃝ サポート ◎ △ ⃝
  • 57. CUDA
  • 58. C言語コード CUDAコード
  • 59. C言語コード CUDAコード #include <stdio.h> int main() { ! int n, *a; ! n = 100; ! a = (int *)malloc(n); ! ! func(a, n); ! ! return 0; } void func(int *a, int n) { ! int i; ! for (i = 0; i < n; i++) { ! ! a[i] = i; ! } }
  • 60. C言語コード CUDAコード #include <stdio.h> #include <stdio.h> int main() { int main() { ! int n, *a; ! int n, *cpu_a, *gpu_a; ! n = 100; ! n = 100; ! a = (int *)malloc(n); ! cpu_a = (int *)malloc(n); ! cudaMalloc((void **)&gpu_a, n); ! ! ! func(a, n); ! func<<<3, 32>>>(gpu_a, n); ! cudaMemcpy(cpu_a, gpu_a, n, cudaMemcpyDeviceToHost); ! ! ! return 0; ! return 0; } } void func(int *a, int n) { __global__ void func(int *a, int n) { ! int i; ! int i; ! i = blockIdx.x * blockDim.x + threadIdx.x; ! ! for (i = 0; i < n; i++) { ! if (i < n) { ! ! a[i] = i; ! ! a[i] = i; ! } ! } } }
  • 61. C言語コード CUDAコード #include <stdio.h> #include <stdio.h> int main() { int main() { ! int n, *a; ! int n, *cpu_a, *gpu_a; ! n = 100; ! n = 100; ! a = (int *)malloc(n); ! cpu_a = (int *)malloc(n); ! cudaMalloc((void **)&gpu_a, n); ! ! ! func(a, n); ! func<<<3, 32>>>(gpu_a, n); ! cudaMemcpy(cpu_a, gpu_a, n, cudaMemcpyDeviceToHost); ! ! ! return 0; ! return 0; } } void func(int *a, int n) { __global__ void func(int *a, int n) { ! int i; ! int i; ! i = blockIdx.x * blockDim.x + threadIdx.x; ! ! for (i = 0; i < n; i++) { ! if (i < n) { ! ! a[i] = i; ! ! a[i] = i; ! } ! } } }
  • 62. C言語コード CUDAコード #include <stdio.h> #include <stdio.h> int main() { int main() { ! int n, *a; ! int n, *cpu_a, *gpu_a; ! n = 100; ! n = 100; ! a = (int *)malloc(n); ! cpu_a = (int *)malloc(n); ! cudaMalloc((void **)&gpu_a, n); ! ! ! func(a, n); ! func<<<3, 32>>>(gpu_a, n); ! cudaMemcpy(cpu_a, gpu_a, n, cudaMemcpyDeviceToHost); ! ! ! return 0; ! return 0; } } void func(int *a, int n) { __global__ void func(int *a, int n) { ! int i; ! int i; ! i = blockIdx.x * blockDim.x + threadIdx.x; ! ! for (i = 0; i < n; i++) { ! if (i < n) { ! ! a[i] = i; ! ! a[i] = i; ! } ! } } }
  • 63. C言語コード CUDAコード #include <stdio.h> #include <stdio.h> int main() { int main() { ! int n, *a; ! int n, *cpu_a, *gpu_a; ! n = 100; ! n = 100; ! a = (int *)malloc(n); ! cpu_a = (int *)malloc(n); ! cudaMalloc((void **)&gpu_a, n); ! ! ! func(a, n); ! func<<<3, 32>>>(gpu_a, n); ! cudaMemcpy(cpu_a, gpu_a, n, cudaMemcpyDeviceToHost); ! ! ! return 0; ! return 0; } } void func(int *a, int n) { __global__ void func(int *a, int n) { ! int i; ! int i; ! i = blockIdx.x * blockDim.x + threadIdx.x; ! ! for (i = 0; i < n; i++) { ! if (i < n) { ! ! a[i] = i; ! ! a[i] = i; ! } ! } } }
  • 64. C言語コード CUDAコード #include <stdio.h> #include <stdio.h> int main() { int main() { ! int n, *a; ! int n, *cpu_a, *gpu_a; ! n = 100; ! n = 100; ! a = (int *)malloc(n); ! cpu_a = (int *)malloc(n); ! cudaMalloc((void **)&gpu_a, n); ! ! ! func(a, n); ! func<<<3, 32>>>(gpu_a, n); ! cudaMemcpy(cpu_a, gpu_a, n, cudaMemcpyDeviceToHost); ! ! ! return 0; ! return 0; } } void func(int *a, int n) { __global__ void func(int *a, int n) { ! int i; ! int i; ! i = blockIdx.x * blockDim.x + threadIdx.x; ! ! for (i = 0; i < n; i++) { ! if (i < n) { ! ! a[i] = i; ! ! a[i] = i; ! } ! } } }
  • 65. C言語コード CUDAコード #include <stdio.h> #include <stdio.h> int main() { int main() { ! int n, *a; ! int n, *cpu_a, *gpu_a; ! n = 100; ! n = 100; ! a = (int *)malloc(n); ! cpu_a = (int *)malloc(n); ! cudaMalloc((void **)&gpu_a, n); ! ! ! func(a, n); ! func<<<3, 32>>>(gpu_a, n); ! cudaMemcpy(cpu_a, gpu_a, n, cudaMemcpyDeviceToHost); ! ! ! return 0; ! return 0; } } void func(int *a, int n) { __global__ void func(int *a, int n) { ! int i; ! int i; ! i = blockIdx.x * blockDim.x + threadIdx.x; ! ! for (i = 0; i < n; i++) { ! if (i < n) { ! ! a[i] = i; ! ! a[i] = i; ! } ! } } }
  • 66. C言語コード CUDAコード #include <stdio.h> #include <stdio.h> int main() { int main() { ! int n, *a; ! int n, *cpu_a, *gpu_a; ! n = 100; ! n = 100; ! a = (int *)malloc(n); ! cpu_a = (int *)malloc(n); ! cudaMalloc((void **)&gpu_a, n); ! ! ! func(a, n); ! func<<<3, 32>>>(gpu_a, n); ! cudaMemcpy(cpu_a, gpu_a, n, cudaMemcpyDeviceToHost); ! ! ! return 0; ! return 0; } } void func(int *a, int n) { __global__ void func(int *a, int n) { ! int i; ! int i; ! i = blockIdx.x * blockDim.x + threadIdx.x; ! ! for (i = 0; i < n; i++) { ! if (i < n) { ! ! a[i] = i; ! ! a[i] = i; ! } ! } } }
  • 67. C言語コード CUDAコード #include <stdio.h> #include <stdio.h> int main() { int main() { ! int n, *a; ! int n, *cpu_a, *gpu_a; ! n = 100; ! n = 100; ! a = (int *)malloc(n); ! cpu_a = (int *)malloc(n); ! cudaMalloc((void **)&gpu_a, n); ! ! ! func(a, n); ! func<<<3, 32>>>(gpu_a, n); ! cudaMemcpy(cpu_a, gpu_a, n, cudaMemcpyDeviceToHost); ! ! ! return 0; ! return 0; } } void func(int *a, int n) { __global__ void func(int *a, int n) { ! int i; ! int i; ! i = blockIdx.x * blockDim.x + threadIdx.x; ! ! for (i = 0; i < n; i++) { ! if (i < n) { ! ! a[i] = i; ! ! a[i] = i; ! } ! } } }
  • 68. PIV解析実行時間比較 90 sec 60 sec 30 sec i:24; w: 24 i:32; w:32 i:48; w:48 i: 16; w: 16
  • 69. PIV解析実行時間比較 90 sec C言語(Intel Core 2 Duo P8400 2.26GHz) 60 sec 30 sec i:24; w: 24 i:32; w:32 i:48; w:48 i: 16; w: 16
  • 70. PIV解析実行時間比較 90 sec C言語(Intel Core 2 Duo P8400 2.26GHz) 60 sec 30 sec C言語(Intel Core i5 2400s 2.5GHz) i:24; w: 24 i:32; w:32 i:48; w:48 i: 16; w: 16
  • 71. PIV解析実行時間比較 90 sec C言語(Intel Core 2 Duo P8400 2.26GHz) 60 sec 30 sec C言語(Intel Core i5 2400s 2.5GHz) CUDA(Nvidia GeForce GTX 560 Ti) i:24; w: 24 i:32; w:32 i:48; w:48 i: 16; w: 16
  • 72. 倍以上の速さ ※Core i5の実行速度より
  • 73. 3 倍以上の速さ ※Core i5の実行速度より
  • 74. 3 倍以上の速さ ※Core i5の実行速度より ※最適化無し
  • 75. 300 倍以上の速さ ※Core i5の実行速度より ※最適化した場合の予想値
  • 76. CUDAを用いた場合のPIV解析時間 0 sec 10 sec 20 sec 30 sec 40 sec 50 sec 2枚 30枚 現在値 予想値 ※画像サイズ:1024×1024;検査領域:48×48;探査領域:24×24
  • 77. CUDAを用いた場合のPIV解析時間 0 sec 10 sec 20 sec 30 sec 40 sec 50 sec 2.75 sec 2枚 30枚 現在値 予想値 ※画像サイズ:1024×1024;検査領域:48×48;探査領域:24×24
  • 78. CUDAを用いた場合のPIV解析時間 0 sec 10 sec 20 sec 30 sec 40 sec 50 sec 2.75 sec 2枚 0.03 sec 30枚 現在値 予想値 ※画像サイズ:1024×1024;検査領域:48×48;探査領域:24×24
  • 79. CUDAを用いた場合のPIV解析時間 0 sec 10 sec 20 sec 30 sec 40 sec 50 sec 2.75 sec 2枚 0.03 sec 41.25 sec 30枚 現在値 予想値 ※画像サイズ:1024×1024;検査領域:48×48;探査領域:24×24
  • 80. CUDAを用いた場合のPIV解析時間 0 sec 10 sec 20 sec 30 sec 40 sec 50 sec 2.75 sec 2枚 0.03 sec 41.25 sec 30枚 0.41 sec 現在値 予想値 ※画像サイズ:1024×1024;検査領域:48×48;探査領域:24×24
  • 81. CUDAを用いた場合のPIV解析時間 0 sec 10 sec 20 sec 30 sec 40 sec 50 sec 2.75 sec 2枚 0.03 sec 41.25 sec 30枚 0.41 sec 現在値 予想値 30枚を処理するのに1秒以下 ※画像サイズ:1024×1024;検査領域:48×48;探査領域:24×24
  • 83.

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. \n
  131. \n
  132. \n
  133. \n
  134. \n
  135. \n
  136. \n
  137. \n
  138. \n
  139. \n
  140. \n
  141. \n
  142. \n
  143. \n
  144. \n
  145. \n
  146. \n
  147. \n
  148. \n
  149. \n
  150. \n
  151. \n
  152. \n
  153. \n
  154. \n
  155. \n
  156. \n
  157. \n
  158. \n
  159. \n
  160. \n
  161. \n
  162. \n
  163. \n
  164. \n
  165. \n
  166. \n
  167. \n
  168. \n
  169. \n
  170. \n
  171. \n
  172. \n
  173. \n
  174. \n
  175. \n
  176. \n
  177. \n
  178. \n
  179. \n
  180. \n
  181. \n
  182. \n
  183. \n
  184. \n
  185. \n
  186. \n
  187. \n
  188. \n
  189. \n
  190. \n
  191. \n
  192. \n
  193. \n
  194. \n
  195. \n
  196. \n
  197. \n
  198. \n
  199. \n
  200. \n
  201. \n
  202. \n
  203. \n
  204. \n
  205. \n
  206. \n
  207. \n
  208. \n
  209. \n
  210. \n
  211. \n
  212. \n
  213. \n
  214. \n
  215. \n
  216. \n
  217. \n
  218. \n
  219. \n
  220. \n
  221. \n
  222. \n
  223. \n
  224. \n
  225. \n
  226. \n
  227. \n
  228. \n
  229. \n
  230. \n
  231. \n
  232. \n
  233. \n
  234. \n
  235. \n
  236. \n
  237. \n
  238. \n
  239. \n
  240. \n
  241. \n
  242. \n
  243. \n
  244. \n
  245. \n
  246. \n
  247. \n
  248. \n
  249. \n
  250. \n
  251. \n
  252. \n
  253. \n
  254. \n
  255. \n
  256. \n
  257. \n
  258. \n
  259. \n
  260. \n
  261. \n
  262. \n
  263. \n
  264. \n
  265. \n
  266. \n
  267. \n
  268. \n
  269. \n
  270. \n
  271. \n
  272. \n
  273. \n
  274. \n
  275. \n
  276. \n
  277. \n
  278. \n
  279. \n
  280. \n
  281. \n
  282. \n
  283. \n
  284. \n
  285. \n
  286. \n
  287. \n
  288. \n
  289. \n
  290. \n
  291. \n
  292. \n
  293. \n
  294. \n
  295. \n
  296. \n
  297. \n
  298. \n
  299. \n
  300. \n
  301. \n
  302. \n
  303. \n
  304. \n
  305. \n
  306. \n
  307. \n
  308. \n
  309. \n
  310. \n
  311. \n
  312. \n
  313. \n
  314. \n
  315. \n
  316. \n
  317. \n
  318. \n
  319. \n
  320. \n
  321. \n
  322. \n
  323. \n
  324. \n
  325. \n
  326. \n
  327. \n
  328. \n
  329. \n
  330. \n
  331. \n
  332. \n
  333. \n
  334. \n
  335. \n
  336. \n
  337. \n
  338. \n
  339. \n
  340. \n
  341. \n
  342. \n
  343. \n
  344. \n
  345. \n
  346. \n
  347. \n
  348. \n
  349. \n
  350. \n
  351. \n
  352. \n
  353. \n
  354. \n
  355. \n
  356. \n
  357. \n
  358. \n
  359. \n
  360. \n
  361. \n
  362. \n
  363. \n
  364. \n
  365. \n
  366. \n
  367. \n
  368. \n
  369. \n
  370. \n
  371. \n
  372. \n
  373. \n
  374. \n
  375. \n
  376. \n
  377. \n
  378. \n
  379. \n
  380. \n
  381. \n
  382. \n
  383. \n
  384. \n
  385. \n
  386. \n
  387. \n
  388. \n
  389. \n
  390. \n
  391. \n
  392. \n
  393. \n
  394. \n
  395. \n
  396. \n
  397. \n
  398. \n
  399. \n
  400. \n
  401. \n
  402. \n
  403. \n
  404. \n
  405. \n
  406. \n
  407. \n
  408. \n
  409. \n
  410. \n
  411. \n
  412. \n
  413. \n
  414. \n
  415. \n
  416. &amp;#x6539;&amp;#x826F;&amp;#xFF1A;\nGPU&amp;#x306E;&amp;#x6027;&amp;#x80FD;&amp;#x3092;&amp;#x6700;&amp;#x5927;&amp;#x9650;&amp;#x306B;\n&amp;#x30B5;&amp;#x30D6;&amp;#x30D4;&amp;#x30AF;&amp;#x30BB;&amp;#x30EB;&amp;#x7CBE;&amp;#x5EA6;&amp;#x3084;&amp;#x8AA4;&amp;#x30D9;&amp;#x30AF;&amp;#x30C8;&amp;#x30EB;&amp;#x9664;&amp;#x53BB;&amp;#x306E;&amp;#x6A5F;&amp;#x80FD;&amp;#x5B9F;&amp;#x88C5;\n
  417. &amp;#x6539;&amp;#x826F;&amp;#xFF1A;\nGPU&amp;#x306E;&amp;#x6027;&amp;#x80FD;&amp;#x3092;&amp;#x6700;&amp;#x5927;&amp;#x9650;&amp;#x306B;\n&amp;#x30B5;&amp;#x30D6;&amp;#x30D4;&amp;#x30AF;&amp;#x30BB;&amp;#x30EB;&amp;#x7CBE;&amp;#x5EA6;&amp;#x3084;&amp;#x8AA4;&amp;#x30D9;&amp;#x30AF;&amp;#x30C8;&amp;#x30EB;&amp;#x9664;&amp;#x53BB;&amp;#x306E;&amp;#x6A5F;&amp;#x80FD;&amp;#x5B9F;&amp;#x88C5;\n
  418. \n