基本的にホストメモリー>デバイスメモリにデータを転送してから処理を行う。GPUの並列処理を記述する関数。処理の流れCPUとGPUの処理の流れはこのようになります。基本的にCPU側がGPU側に指示をしない限り、勝手にGPU側が動くことはありませんグリッドとブロックについてカーネル実行時、どれだけのスレッド数で動かすかを指定する必要があります。図の通り、スレッドはブロック内に複数あり、ブロックはグリッド内に複数あります。ブロック数とスレッド数は3次元(x,y,z)で指定することができます。>>>で囲われた箇所に指定します。スレッドをたくさん使用する場合、32の倍数が効率が良くなります。その中で、128個や256個が効率が上がりやすいようです。作る処理の内容ですが、2つの配列の各要素を加算して、別の配列に代入していくという処理です。各要素の加算はすべて別のスレッドで並列に行います。API今回のコーディングで使用するCUDAのAPIは以下の通り。ホストメモリを確保/開放する。デバイスメモリを確保/開放する。ホストメモリとデバイスメモリ間でデータを転送する。コーディングコードは「.cu/.cuh」というファイルに記述していきます。「CudaProcess.cuh」というファイルを追加して記述しています。いう関数に一連の処理を記述しています。メモリの確保->データ転送->カーネル実行->結果転送->メモリ開放という流れです。threadIdx.x;]と記述している箇所では、自分を呼び出しているスレッドのindexを取得しています。使う記述なので覚えておきましょう。スレッドのIndex注意点ホストメモリはGPU側からはアクセスできません。アクセスしているっぽく作る方法はある)デバイスメモリもCPU側からはアクセスできません。カーネルは戻り値を持てません。結果はデバイスメモリに書き込んで、ホストメモリへ転送する必要があります。解説中では、メモリ確保からカーネル実行までをまとめてやっています。メモリの確保は時間がかかるので、本来はソフト起動時などにあらかじめやっておくほうが良いです。以下の記事では、追加でGPUの特徴や用語を解説しています。【CUDA】Grid,Block,Thread,WarpについてGrid,Block,Thread,Warp(グリッド、ブロック、スレッド、ワープ)の関係について解説していきます。zukaaax.com2019.03.31以下の記事では、ブロックやスレッドを2次元で扱ったときのコード例を紹介しています。【CUDA】ブロック・スレッドを2次元で使うCUDAのスレッドは2次元で持つことができるので、その使い方の解説をします。【CUDA】ページロックメモリ(Page-Lockedメモリ)についてGPUにデータを転送するとき、ページロック(Page-Locked)がされているかどうかで速度が大幅に変わります。ロックのやり方や、特性について解説していきます。【CUDA】ストリームを使いこなして高速化しようGPUで複数処理をしたい場合、ストリーム(Stream)を利用すると効率的に処理をさせることができます。この記事では、ストリームの特徴や使い方について解説します。2017でMFCを使う方法を解説します。C++【CUDA】マルチGPUで高速化しよう処理性能を上げるためマルチGPU化したい場合、次の方法で使用するGPUを指定することができます。【CUDA】ブロック・スレッドを2次元で使うCUDAのスレッドは2次元で持つことができるので、その使い方の解説をします。【CUDA】Grid,Block,Thread,WarpについてGrid,Block,Thread,Warp(グリッド、ブロック、スレッド、ワープ)の関係について解説していきます。初心者向けに解説します。【CUDA】シェアードメモリの使用方法GPUのメモリの種類で、シェアードメモリ(SharedMemory/共有メモリ)というものがあります。最適化をするなら必須の要素なので、ぜひ使い方を覚えましょう。Studioプログラミング固定ページお問い合わせプライバシーポリシースポンサーリンク。