Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
C#, C++/CLI と CUDA による
画像処理ことはじめ
επιστημη epi@c.zaq.jp
・Microsoft MVP
for Visual C++ Jan.2004~
for Visual Studio and Devel...
MAXWELL ARCHITECTURE
GEFORCE GTX800/900 SERIES
GEFORCE GTX750, TEGRA X1
Streaming Multiprocessor
■ 128 CUDA-cores
■ L1-cac...
GPU
GPU
memory
L2 cache
PCI
bus
V
I
D
E
O
(だいたいあってる) グラボ の なかみ
Giga Thread Engine
※ ココ↑はそんなに速くない
native(C++) application
NATIVE はフツーにCUDAを呼べるけど…
host
memory
device
memory
PCI
native app.
コレな。
仲介役
managed
⇔
native
managed(C#) application
↑ コレが必要
MANAGED は NATIVE を直接呼べない
host
memory
device
memory
PCI
CLR
managed app.
コレな。
MANAGED と NATIVE の仲介役
host
memory
device
memory
PCI
CLR
managed app.
native assembly
call
C++/CLI で作る「仲介役」
見た目(インタフェース)はmanaged
ナカミ(実装)はnative
native assembly
CUDAプログラミングで用意するもの
Graphic-card
NVIDIA-GPU を積んだやつなら大抵OK
Visual Studio 2013 (Community edition でも無問題)
2015はCUDA Toolkitが未対応...
HOST CODE と DEVICE CODE
__host__ __global__ __device__
※ __global__ : host から呼べる device 側の関数
Host(CPU) で動く関数 Device(GPU) で...
CUDAのコードはHOST/DEVICE混在(1)
__device__ int device_increment(int n) { return n+1; }
__global__ void kernel_increment(int* dat...
CUDAのコードはHOST/DEVICE混在(2)
int main() {
vector<int> array; // host-memory
…
size_t bytesize = array.size()*sizeof(int);
int...
コンパイルのからくり
device
host
nvcc
Visual
C++
PTX
OBJ
~.cu ~.obj
GPU機械語
CPU機械語
Link
CUDA runtime ~.exe
WRAPPERのつくりかた 1: CLR クラスライブラリ
WRAPPERのつくりかた 2: ビルド カスタマイズ
WRAPPERのつくりかた 3: CUDA RUNTIME
WRAPPERのつくりかた 4: 64BIT-BUILD
C++/CLI によるwrapper
• constructor
• allocate device-mem
• methods
• pin managed (raw)
• copy raw → device-mem
• launch kern...
public ref class Wrapper {
private:
managed側には見せたくない/見せる必要のないもの
public:
// コンストラクタ
Wrapper() { 前準備 }
// デストラクタ
~Wrapper() ...
public ref class Wrapper {
private:
float* data_; // device-memory
int size_;
public:
// コンストラクタ
Wrapper(int n) : size_(n)...
public ref class Wrapper {
// method
void do_something(cli::array<float>^ buffer) {
if ( buffer->Length <= size_ ) {
pin_p...
おまけ: C++/CLIがめんどくせーならこんなのも
http://kunzmi.github.io/managedCuda/
JCuda の .NET 版
DEMO
画像をキャプチャし 処理を施して Windowに表示
Camera Capture
Image Processing
C++/CLI wrapper-1
CUDA
OpenCV
WPF Application
C++/CLI wrapper-2
C#
BGR BGR Gray Gray
SobelV
SobelH
floatuchar3 ucharuchar3
float
float
NPP
cudaMemcpy
BGR
uchar3
THANK YOU, LET’S ENJOY CUDA!
επιστημη
mail: epi@c.zaq.jp
blog: http://blog.zaq.ne.jp/fareastprogramming/
facebook: https:/...
Upcoming SlideShare
Loading in …5
×

C#, C/CLI と CUDAによる画像処理ことはじめ

5,037 views

Published on

講演者: エヌビディアCUDAアンバサダー επιστημη (えぴすてーめー)

2016/1/27開催の「MaxwellとJava、C#のためのCUDA」における、講演資料です。
詳細については、イベントページをご参照ください。
http://nvidia.connpass.com/event/24764/

Published in: Software
  • Dating direct: ♥♥♥ http://bit.ly/2F7hN3u ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating for everyone is here: ❤❤❤ http://bit.ly/2F7hN3u ❤❤❤
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • If you want to download or read this book, copy link or url below in the New tab ......................................................................................................................... DOWNLOAD FULL PDF EBOOK here { http://bit.ly/2m6jJ5M } .........................................................................................................................
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ...................................ALL FOR EBOOKS................................................. Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • accessibility Books Library allowing access to top content, including thousands of title from favorite author, plus the ability to read or download a huge selection of books for your pc or smartphone within minutes DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { http://bit.ly/2m6jJ5M } ......................................................................................................................... Download Full EPUB Ebook here { http://bit.ly/2m6jJ5M } ......................................................................................................................... ...................................ALL FOR EBOOKS................................................. Cookbooks, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

C#, C/CLI と CUDAによる画像処理ことはじめ

  1. 1. C#, C++/CLI と CUDA による 画像処理ことはじめ επιστημη epi@c.zaq.jp ・Microsoft MVP for Visual C++ Jan.2004~ for Visual Studio and Development Technologies Oct.2015~ ・NVIDIA Ambassador for CUDA Apr.2015~
  2. 2. MAXWELL ARCHITECTURE GEFORCE GTX800/900 SERIES GEFORCE GTX750, TEGRA X1 Streaming Multiprocessor ■ 128 CUDA-cores ■ L1-cache ■ shared memory ■ …and more
  3. 3. GPU GPU memory L2 cache PCI bus V I D E O (だいたいあってる) グラボ の なかみ Giga Thread Engine
  4. 4. ※ ココ↑はそんなに速くない
  5. 5. native(C++) application
  6. 6. NATIVE はフツーにCUDAを呼べるけど… host memory device memory PCI native app. コレな。
  7. 7. 仲介役 managed ⇔ native managed(C#) application ↑ コレが必要
  8. 8. MANAGED は NATIVE を直接呼べない host memory device memory PCI CLR managed app. コレな。
  9. 9. MANAGED と NATIVE の仲介役 host memory device memory PCI CLR managed app. native assembly call
  10. 10. C++/CLI で作る「仲介役」 見た目(インタフェース)はmanaged ナカミ(実装)はnative native assembly
  11. 11. CUDAプログラミングで用意するもの Graphic-card NVIDIA-GPU を積んだやつなら大抵OK Visual Studio 2013 (Community edition でも無問題) 2015はCUDA Toolkitが未対応 (´・ω・`) ショボーン / CUDA Toolkit 7.5 コンパイラ(nvcc)+runtime, ライブラリ, profiler etc. / Visual Studio の add-on
  12. 12. HOST CODE と DEVICE CODE __host__ __global__ __device__ ※ __global__ : host から呼べる device 側の関数 Host(CPU) で動く関数 Device(GPU) で動く関数
  13. 13. CUDAのコードはHOST/DEVICE混在(1) __device__ int device_increment(int n) { return n+1; } __global__ void kernel_increment(int* data, unsigned int size) { unsigned int i = blockDim.x * blockIdx.x + threadIdx.x; if ( i < size ) { data[i] = device_increment(data[i]); } } __host__ void launch_increment(int* data, unsigned int size) { kernel_increment<<<2000,100>>>(data, size); } 100スレッドを1ブロックとして2000ブロック分着火せよ!
  14. 14. CUDAのコードはHOST/DEVICE混在(2) int main() { vector<int> array; // host-memory … size_t bytesize = array.size()*sizeof(int); int* d_array; // device-memory cudaMalloc(&d_array, bytesize); // allocate device-memory // host→device , launch kernel , device→host cudaMemcpy(d_array, array.data(), bytesize, cudaMemcpyHostToDevice); launch_increment(d_array, array.size()); cudaMemcpy(array.data(), d_array, bytesize, cudaMemcpyDeviceToHost); … cudaFree(d_array); // deallocate device-memory }
  15. 15. コンパイルのからくり device host nvcc Visual C++ PTX OBJ ~.cu ~.obj GPU機械語 CPU機械語 Link CUDA runtime ~.exe
  16. 16. WRAPPERのつくりかた 1: CLR クラスライブラリ
  17. 17. WRAPPERのつくりかた 2: ビルド カスタマイズ
  18. 18. WRAPPERのつくりかた 3: CUDA RUNTIME
  19. 19. WRAPPERのつくりかた 4: 64BIT-BUILD
  20. 20. C++/CLI によるwrapper • constructor • allocate device-mem • methods • pin managed (raw) • copy raw → device-mem • launch kernel • copy device-mem → raw • un-pin managed (raw) • destructor • deallocate device-mem managed(C#) application
  21. 21. public ref class Wrapper { private: managed側には見せたくない/見せる必要のないもの public: // コンストラクタ Wrapper() { 前準備 } // デストラクタ ~Wrapper() { this->!Wrapper(); } // ファイナライザ !Wrapper() { あとしまつ } void do_something() { nativeなナニかを操作する } };
  22. 22. public ref class Wrapper { private: float* data_; // device-memory int size_; public: // コンストラクタ Wrapper(int n) : size_(n) { float* ptr; cudaMalloc(&ptr, size_*sizeof(float)); data_ = ptr; } // デストラクタ ~Wrapper() { this->!Wrapper(); } // ファイナライザ !Wrapper() { cudaFree(data_); } … たとえば…こんなコード。
  23. 23. public ref class Wrapper { // method void do_something(cli::array<float>^ buffer) { if ( buffer->Length <= size_ ) { pin_ptr<float> pin = &buffer[0]; cudaMemcpy(data_, pin, …); // host -> device launch_kernel(…); // launch kernel cudaMemcpy(pin, data_, …); // device -> host } } たとえば…こんなコード。
  24. 24. おまけ: C++/CLIがめんどくせーならこんなのも http://kunzmi.github.io/managedCuda/ JCuda の .NET 版
  25. 25. DEMO
  26. 26. 画像をキャプチャし 処理を施して Windowに表示
  27. 27. Camera Capture Image Processing C++/CLI wrapper-1 CUDA OpenCV WPF Application C++/CLI wrapper-2 C#
  28. 28. BGR BGR Gray Gray SobelV SobelH floatuchar3 ucharuchar3 float float NPP cudaMemcpy BGR uchar3
  29. 29. THANK YOU, LET’S ENJOY CUDA! επιστημη mail: epi@c.zaq.jp blog: http://blog.zaq.ne.jp/fareastprogramming/ facebook: https://www.facebook.com/cppepisteme twitter: @epitwit

×