2017-07-03 30 views

回答

0

编写内核来处理内部两个循环(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)并且尚未编译。它们只是为了让你了解如何将你的四个嵌套循环分成OpenCL内核。

+0

非常感谢你 –

+0

但是如何写k,l?你能不能写出详细的 –

+0

内核和调用代码的概要添加。 – Dithermaster

相关问题