2017-07-03 3 views

答えて

0

内側の2つのループ(k、l)を処理するカーネルを作成し、グローバルサイズがi、jの2Dカーネルとしてエンキューします。カーネルはの線に沿って何かだろう

__kernel void innerLoop(__global float* A, __global float* B, __global float* marry) 
{ 
    int i = get_global_id(1); 
    int j = get_global_id(0); 
    int marraytemp = 0; 
    for(int k=i*5;k<i*5+5;k++) 
    { 
     for(int l=j*5;l<j*5+5;j++) 
     { 
      marrytemp=A[i]+B[j]+marrytemp; 
     } 
    } 
    marry[i,j]=marrytemp; 
} 

そして、それはのようなものと呼ばれることになります。

clSetKernelArg(kernel, 0, sizeof(cl_mem), (void *)&A); 
clSetKernelArg(kernel, 1, sizeof(cl_mem), (void *)&B); 
clSetKernelArg(kernel, 2, sizeof(cl_mem), (void *)&marray); 

size_t global_item_size[] = {100, 100}; 
clEnqueueNDRangeKernel(command_queue, kernel, 2, NULL, &global_item_size, NULL, 0, NULL, NULL); 

両方の

編集は、カーネルのアウトラインを追加しますこれらは追加のサポートコード(例えばcommand_queuekernelの作成など)を必要とし、コンパイルされていません。 4つのネストされたループをOpenCLカーネルに分割する方法のアイデアを伝えるだけです。

+0

大変ありがとうございます。 –

+0

ありがとうございます。k、l?はどのように書くのですか? –

+0

カーネルの概要と呼び出しコードが追加されました。 – Dithermaster

関連する問題