プログラマのつれづれなるままにプログラマのつれづれなるままに音宮志久が思ったことなどをネタにします。プログラムネタ・数学ネタがメインです。acroの予約が始まり、予約しようかしまいか迷っている人です。それはどうでもいいとして。今回はCUDAでちょっと遊んでみる・・・というより実験してみた記録です。今CUDAなのか?というと、「日経ソフトウェアでGPUプログラミングの特集をやっていたのでついでにこっちでもやってみよう!」という感じです。そのままプログラムを組んで実行結果を見てもしょうがないのでもうちょっと(私的に)実用的なルーチンでいろいろと試してみることにしました。書いておきますと、グラフィックはCUDAのバージョンとしてはかなり古い(CUDA1.1)ものを使っているのでちょっといろいろと微妙ですが、実験レベルなら問題ないだろう、との考えです。ちなみに、CUDAをコンパイルできる環境を整えるのに一苦労しました。予約語のハイライトがどこにあるのかわからなくて結局サンプルSDKに入っていることをインストール後に知ったりとしっちゃかめっちゃかでした。VisualStudioとは2005,2008,2010のどれかで統合できるのでそれらを持っているなら環境を整えてみるのも一興かと思います。試しで書いてみたのはCUDAを使ったRGB<=>YUV変換ルーチンです。(A)RGB32と(A)YUVを相互変換するルーチンです。これについては動画変換プログラムを作ったときにCPU側でできる限り最適になるようにSSE2を使ってルーチンを組みましたが、それのCUDAバージョンと言ったところです。CUDAの処理速度をみる分にはある意味最適なルーチン(CPU側で高速な処理ができるので)ですね。CUDAを使ったRGB<=>YUV変換CUDAのルーチン自体は普通に変換部分を書けばいいだけなのでものすごい単純です。dst;}}&#91;/cpp&#93;<p>全部浮動小数でやっていますが、整数演算にしても大して速度は変わりませんでした。cudaFree(tmp);}相変わらずエラーを受け取ってもその処理は書いていません。変わったことをしているのは、処理の分割数をできるだけ多くするために擬似的に縦方向に長いような絵に見せかける演算を行っています。この処理がないと分割数が多くならず処理が早くなりません。「できるだけ処理を分割して単純な処理を大量に発行する」と処理がものすごく早くなります。分割数が少なすぎて早くならない場合はどうにかして分割数を多くなるように変形しましょう。一つの注意点は、「メモリの確保と転送が(対象がデバイスとなるため)メインメモリより処理が遅くなることがあるので発行回数をできるだけ減らす」ですか。正しいテストを行ったわけではないのでこれが完全に正しいかどうかは不明ですが...。CPUvsGPUその結果は?CPUとの純粋な演算速度勝負をやってみた例です。メモリ転送については繰り返しの最初のみ元の絵をコピーして繰り返しの最後のみ結果の絵をコピーするようにしています。CPUが1コアのみ使用なので、スレッド化するとどうなるかが微妙に見物なのですが・・・。時間はGetTickCountで計測したものを表記しています。PNGを使っています。455681回のみの場合はメモリのセットアップにかなりの時間がとられるのでどうしてもCPUのほうが早いです。繰り返しの回数が多くなるとさすがにGPUの面目躍如といった感じの結果が得られました。これについては日経ソフトウェアの記事のほうが詳しいです。した注意点なのが、CPUで浮動小数演算を行ったときとGPUで浮動小数演算を行ったときの結果が多少違うことがあります。この辺はある意味誤差レベルなのでそれほど気にする必要はないはずですが、気にしたい人は気に留めておくといいかもです。分割数が少なくなる(pitch分割処理をコメントアウトした)場合にはCPUにすら速度的に負けてしまうことになります。これについては作っていく段階でテストを行ってどれくらいがいいのか見極める必要があるという面ではなかなか難しいものがあるのではないかと思います。次は動画変換時の動き検索とかに使えないかな~と思いながらちょっとプログラムを組んでいく予定です。簡単に早くなるとは思いませんが、これはこれでおもしろいということも収穫ですし、がんばればいろんな処理が高速化できるんだろうな~というのもよくわかりました。ちなみに、GPUのプログラムだと内部的にはスレッドやら何やらで処理が細切れになっているのですが、それが完璧に隠されているのがこちらとしては考えやすいです。同期が不必要な処理かつ大量の同じ処理の繰り返しなら考えてみるのもいいと思います。ADVシステムの方にもいろいろと修正が必要な箇所が累積しているのが自分の頭で考えてわかっているのでその辺も組みながら、というところでしょうか。コメントをキャンセルメールアドレスが公開されることはありません。志久プログラムネタや思いついたり世間で話題になっている数学ネタを解説したりしています。プログラマとしては今年度(つまり2020年3月)までの復帰となるか、完全復帰となるか、別の仕事に戻るかは運と実力次第。ちなみに教育系のプログラムでもOKです。アクセスカウンタアクセス数:スポンサーリンク。