使用GPU进行数字运算和并行渲染

时间:2013-10-01 14:20:13

标签: multithreading parallel-processing rendering opencl gdi

可以在同一个GPU上有效地共享渲染作业和数字运算工作(在OpenCL上的f.ex.)吗?例如,

  1. 线程A运行OpenCL任务以生成图像
  2. 然后,当图像准备就绪时,线程A通知另一个线程B(图像准备就绪)并继续新图像计算
  3. 线程B在给定图像上开始一些预显示活动(如使用GDI进行叠加计算),组合最终图像并将其渲染显示
  4. 这种GPU资源共享能否改善性能,相反会导致计算和渲染任务整体放缓?

    由于

2 个答案:

答案 0 :(得分:0)

这里涉及很多因素,但一般来说,你不应该看到减速。

直接回答问题的问题:

  • OpenCL也可能正在使用您的CPU,具体取决于您的设置方式
  • 您的gfx主要可以在CPU或GPU的不同部分完成,具体取决于您显示的内容;例如,许多GDI实现使用CPU进行渲染,并且仅在GPU上使用非常简单的2D加速技术,主要是为了最终组合图像。
  • 可能取决于您使用的GPU,GPU驱动程序,图形堆栈等。

在大多数情况下,通过尝试,或者至少对不同部分进行基准测试,您将获得最佳答案。毕竟,如果您的计算过于简单或图像渲染部分过于简单,您将无法获得太多好处。

此外,您可能会尝试更进一步并使用着色器等渲染结果 - 在这种情况下,您可以防止必须将数据从gpu内存移回主内存,这可能 - 根据您的具体情况 - 也可以你的速度提升。

答案 1 :(得分:0)

如果数据/运算比率很大,并且还必须将数据从cpu发送到gpu:

紧缩--->紧缩---->呈现

GPU  th0        :  crunch for (t-1)     crunch for (t)         rendering
CPU  th1        :  send data for t      send data for t+1      send data for t+2
CPU  th2        :  get data of t-2      get  data of t-1       get data of t
CPU th3-th7     :  Other things independent of crunching or rendering.
At the same time:  crunching&comm.      crunching&comm.        rendering&communication
                   and other things     and other things       and other things

如果数据/运算比率很大,如果你不必将数据从cpu发送到gpu:

 use interoperatability of CL (example: cl-gl interop)

如果数据/运算比率很小

 should not see any slowdown.

中等数据/运算比率:紧缩 - >渲染--->紧缩--->呈现

GPU th0         :  crunch for  (t)      rendering              crunch for (t+1)         render again! and continue cycling like this
CPU th1         :  get data of (t-1)    send data for t+1      get data of (t)
CPU th2-th7     :  Other things independent of crunching or rendering.
At the same time:  crunching&getting.   rendering&sending.     crunching&getting
                   and other things     and other things       and other things