Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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
Performance OpenCL-性能_Performance_Opencl - Fatal编程技术网

Performance OpenCL-性能

Performance OpenCL-性能,performance,opencl,Performance,Opencl,我正在使用OpenCL,我使用一个矩阵来增加它的值,我需要尽可能少的应用时间。使用OpenCL提高性能的最佳方法是什么?我读过一些关于数据并行和任务并行的书,但我对它们不是很了解 我正在使用64x56矩阵。使用任务并行性,我创建了64个内核函数。每列一个内核,但我认为我可以做得更好。如果在GPU上执行内核,最好让一个线程处理一个项目。但是,这取决于您对矩阵元素的具体操作,例如,您对每个元素执行了多少操作。 如果只是将元素增加一些数字,则可能没有好处 一般来说,有3种选择: 一个线程处理整个矩阵。

我正在使用OpenCL,我使用一个矩阵来增加它的值,我需要尽可能少的应用时间。使用OpenCL提高性能的最佳方法是什么?我读过一些关于数据并行和任务并行的书,但我对它们不是很了解


我正在使用64x56矩阵。使用任务并行性,我创建了64个内核函数。每列一个内核,但我认为我可以做得更好。

如果在GPU上执行内核,最好让一个线程处理一个项目。但是,这取决于您对矩阵元素的具体操作,例如,您对每个元素执行了多少操作。 如果只是将元素增加一些数字,则可能没有好处

一般来说,有3种选择:

  • 一个线程处理整个矩阵。这样就没有并行性,这对GPU不利
  • 一个线程处理一行/一列。->使用64/56个线程,全局工作大小等于64或56
  • 一个线程与单个元素一起工作。->使用3584个线程,全局工作大小为{64,56}

  • 您是否尝试过只使用一个内核来处理一个元素,并在全局工作大小等于{64,56}的情况下为其调用ClenqueueEndRangeKernel?它是如何影响执行时间的?

    64x56矩阵即使是矩阵乘法也太少了。仅为56个元素生成新内核的开销太大了。但如果它们在不同的队列上运行,可能比单个队列完成的更快。你使用单队列吗?我现在使用两个队列,每个队列中有32个内核。但是使用两个队列而不是只使用一个队列的时间稍微差一点。其思想是在CPU中创建一个矩阵,将其发送到GPU,将矩阵的每个值增加1个单位,然后将新矩阵返回给CPU。在这种情况下,我不知道如何做更少的内核函数。