Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Parallel processing opencl中的多个内核调用_Parallel Processing_Opencl - Fatal编程技术网

Parallel processing opencl中的多个内核调用

Parallel processing opencl中的多个内核调用,parallel-processing,opencl,Parallel Processing,Opencl,当使用clSetKernelArg(memory_object)设置内核参数并使用clenqueueendkernelrangekernel()多次调用内核时,对于每次调用内核,您之前在clSetKernelArg()中设置为内核参数的memory_对象是否会从主机传输到GPU status = clSetKernelArg(kernel, 0, sizeof(cl_mem), &inbuf); size_t num_total_wi = M * N; si

当使用clSetKernelArg(memory_object)设置内核参数并使用clenqueueendkernelrangekernel()多次调用内核时,对于每次调用内核,您之前在clSetKernelArg()中设置为内核参数的memory_对象是否会从主机传输到GPU

    status = clSetKernelArg(kernel, 0, sizeof(cl_mem), &inbuf);



    size_t num_total_wi = M * N;
    size_t num_wg = num_elem/N + ((num_elem/N == 0) ? 0 : 1); 
    size_t num_iter = num_elem/(num_total_wi) + (((num_elem % (num_total_wi)) == 0) ?     0 : 1); 
    for(i = 0; i < num_iter; i++) {
            size_t global_work_size[3] = {num_total_wi, 1, 1};    
            size_t local_ws[3] = {N, 1, 1}; 
            size_t global_offset[3] = {i * num_total_wi, 0, 0}; 

            clEnqueueNDRangeKernel(queue, kernel, 1, global_offset, global_work_size, local_ws, 0, NULL, NULL);

    }
status=clSetKernelArg(内核,0,sizeof(cl_mem),&inbuf);
大小\u t数量\u总数\u wi=M*N;
大小=num元素/N+((num元素/N==0)?0:1);
大小=num_elem/(num_total_wi)+(num_elem%(num_total_wi))==0?0:1;
对于(i=0;i
通过调用
clEnqueueWriteBuffer
clEnqueueWriteImage
启动内存传输,但最有可能在调用
ClenqueueEndRangeKernel
时启动。一旦数据传输完毕,您可以随时重复使用内存对象,如果不再次显式声明,它将不会再次被传输。

内存传输是通过调用
clEnqueueWriteBuffer
clEnqueueWriteImage
启动的,但很可能在调用
clenqueendrangekernel
时启动。传输数据后,您可以随时重复使用内存对象,如果不再次明确声明,就不会再次传输