CUDAの画像処理はテクスチャが必須ですな
関連記事
- エヌビディアの時価総額300兆円超え AIブームうけ最速で達成 【2024年02月24日(土)】
- 【#CSHARP】System.Numerics.Vectorでグリングリン,AVXレジスタをぶん回したい 【2023年01月14日(土)】
- ビデオカードの大掃除をやってみた 【2012年02月09日(木)】
- Milkeyway@HomeのCUDA弾 【2010年12月14日(火)】
- グラボが届いた 【2010年10月14日(木)】
GPU上のグローバルメモリに,画像を流し込んで
- バイナリイメージにて
性能が出ない件(核爆
っちゅうか,CPUより遅いって何事じゃ,ぐるぅぁ~~ 😈
グローバルメモリとのやり取りには1往復600ナノ秒かかるとか何とか
これ,激しくアクセスすると,性能がた落ちは目に見えており...
共有メモリ16キロバイトを使おうかねぇ~
アルゴリズムが凄いことなるなぁ...
確実にバグるよなぁ...だったんすが
テクスチャメモリなるものをハケーン! 😎
こやつを使うと,キャッシュが効くおかげで,倍速以上は出るらしい...
っちゅうことで,32ビット画像にてテクスチャメモリを使ってみた
サンプルソースはこんな感じ?
m_ImageBufに32ビット画像(BGRA順)がバイナリイメージにて格納されておりまする
texture<signed int, 2, cudaReadModeElementType> g_tex; //テクスチャ変数の定義 cudaArray *g_cu_ary; cudaChannelFormatDesc g_channelDesc; //--------- void func() { g_channelDesc = cudaCreateChannelDesc(32, 0, 0, 0, cudaChannelFormatKindSigned); //テクスチャサイズの定義 CUDA_SAFE_CALL(cudaMallocArray(&g_cu_ary, &g_channelDesc, m_Width, m_Height)); //テクスチャ用の領域確保 CUDA_SAFE_CALL(cudaMemcpyToArray(g_cu_ary, 0, 0, m_ImageBuf, m_ImageBufLen, cudaMemcpyHostToDevice)); //テクスチャ領域に画像を転送 CUDA_SAFE_CALL(cudaBindTextureToArray(g_tex, g_cu_ary, g_channelDesc)); //テクスチャにバインド dim3 threads(16, 1, 1); dim3 grid(16,1,1); JobCoreTex<<<grid, threads>>>(); //カーネルの呼び出し CUDA_SAFE_CALL(cudaFreeArray(g_cu_ary)); //テクスチャ向け領域を破棄 }カーネルの中で,ピクセル値を取り出すときは
int px = tex2D(g_tex, x, y);
にてOK!
これで,アホみたいに速くなったぞぉ~
あと,カーネル内で,構造体ポインタからのメンバ参照とか,繁盛にやっちゃだめっす
特にループの中で,メンバ参照とかやったら,確実に泣きます
for(int i = 0; i < 100; i++) { int datX = tmpRec->point.X; int datY = tmpRec->point.Y; int px = tex2D(g_tex, x + i, y); }とか?
メイッパイ性能が落ちまする
CUDAコンパイラの最適化が甘い気がしますです
構造体ポインタのメンバはループの外で,
通常の変数に代入の上で,ループ突入したほうが幸せになれると思いますわん
っちゅうか,クラスやら構造体ポインタのメンバ参照に使う矢印(これ->ね)
正式名称,アロー演算子って言うっちゃ 😯
27年コンピュータ触ってきて,今日初めて知った(隕石爆
コメント
宮崎ー台湾 国際定期便が週2往復に増便へ 来月30日から(25/2/15)
『にっぽん縦断 こころ旅』4月から田中美佐子が新たな旅人に 火野正平さんが14年間担当
オリックス・バファローズのキャンプ見学に行ってきた,昨日(爆(25/2/9)
【大雪】9日も降り続く見込み 交通影響に警戒 雪崩など注意を(25/2/9)
日産、ホンダとの統合合意撤回へ(25/2/5)
【特殊詐欺:トクリュウ】+1-844-173-3313から電話キター 特殊詐欺だぁ~~これはアカンヤツ
備蓄米放出へ準備、流通不足で初 政府、買い戻し条件に売り出し