2017-07-03 61 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

相關問題