質問するログイン新規登録
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

4734閲覧

OpenCLでのget_global_id()の使い方

uz3140

総合スコア10

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2016/08/03 06:47

0

0

###前提・実現したいこと
現在、OpenCLでjpegのデコーダを作っています。
ですが、タイトルの通りカーネル関数内で使用する、get_global_id()の使い方が分かりません。

###該当のソースコード
int sl = mProperty.SamplePrecision == 8 ? 128 : 2048;
for(int y = 0; y < 8; y++)
{
for(int x = 0; x < 8; x++)
{
double sum = 0;
for(int v =0; v < 8; v++)
{
double cv = v == 0 ? kDiSqrt2 : 1.0;
for(int u = 0; u < 8; u++)
{
double cu = u ==0 ? kDisSqrt2 : 1.0;
sum += cu * cv *mDctDataA[v * 8 + u] * mCosT[u][x] * mCosT[v][y];
}
}
mBlockA[y * 8 + x] = int(sum / + sl);
}
}

上記の文をOpenCLで処理させる時は

__kernel void addVevtor(__global int *mDctDataA,
__global int *mCosT,
__global int *mBlockA)
{
int a??? = get_global_id(0);
int b??? = get_global_id(1):
int sl = mProperty.SamplePrecision == 8 ? 128 : 2048;
for(int y = 0; y < 8; y++)
{
for(int x = 0; x < 8; x++)
{
double sum = 0;
for(int v =0; v < 8; v++)
{
double cv = v == 0 ? kDiSqrt2 : 1.0;
for(int u = 0; u < 8; u++)
{
double cu = u ==0 ? kDisSqrt2 : 1.0;
sum += cu * cv *mDctDataA[v * 8 + u] * mCosT[u][x] * mCosT[v][y];
}
}
mBlockA[y * 8 + x] = int(sum / + sl);
}
}
}
現在のカーネル関数はこのようになっています。a???とb???の部分をどうすれば良いか分かりません。

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

言語:C++(カーネル関数はOpenCL C)
FW:Intel SDK for OpenCL Applications 2016
IDE:visual stdio 2013

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

二重のループ:

C

1for ( int x = 0; x < Nx; ++x ) { 2 for ( int y = 0; y < Ny; ++y ) { 3 x,y についてなんかする 4 } 5}

をOpenCLでやるんなら

C

1__kernel void カーネル() { 2 int x = get_global_id(0); 3 int y = get_global_id(1); 4 x,y についてなんかする 5}

ってなるハズ。昔々OpenCLでマンデルブロ集合を描きました。

...8x8程度のループにOpenCL使っても効果ないと思うよ...

投稿2016/08/03 07:08

episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uz3140

2016/08/03 07:20

ご解答ありがとうございます。 >...8x8程度のループにOpenCL使っても効果ないと思うよ... 仰る通りなのですが、これは本番前の練習みたいなものです。
episteme

2016/08/03 07:26

だったらいいんですけど。フツーならイメージの縦幅x横幅でループさすんでしょね。 # 僕はOpenCLのC-baseなカーネルにうんざりしてCUDAに改宗しましたww
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問