【问题标题】:(Py)OpenCL: Fastest way to add floats to random positions in image?(Py)OpenCL:将浮点数添加到图像中随机位置的最快方法?
【发布时间】:2013-03-24 06:06:33
【问题描述】:

更新了不同的问题描述。我之前的问题建议的双向路径跟踪不是一种选择。

我有一个使用 OpenCL 进行一些计算(物理模拟)的 Monte Carlo 代码。主机代码是用 Python 和 PyOpenCL 编写的。 OpenCL 内核的最终结果是图像(检测器数据)的坐标元组(x,y 位置 + 强度/灰度值)。我有 3 个向量/一维数组(x 位置、y 位置和灰度值各一个)。每个一维数组大约有 1e6 到 1e8 个整数,其中 x,y 是整数,灰度值浮动。要创建的图像是几个 1000x1000 像素(1e6 到 1e7 像素)。
最终,我需要在每次运行时创建多个图像(每个图像具有不同的坐标元组),因此效率和低内存使用变得很重要。

从这些数据生成二维数组或图像的最快方法是什么?确实会发生对同一位置 (x,y) 的多次写入,但我找不到一个好的解决方案来并行或在模拟期间执行此操作(因为可能同时写入图像中的同一位置)。

我目前所做的是将3个向量/一维数组复制回主机,并使用内联C函数在主机上串行生成图像。

代码中最耗时的部分是为 3 个 1D 数组创建输出缓冲区数组,然后在内核完成后从设备复制到主机。 如果我可以,那就太好了:
i) 将数据保存在设备上并使用第二个内核生成图像(经过测试,但如果串行完成则非常慢)
ii) 或者如果我可以在内核运行时生成图像,从而彻底摆脱一维数组。

ii) 是首选,但我不知道该怎么做。 write_image 是否识别多个工作项是否要写入同一个数组索引?
我已经测试并行化 i) 通过为两个工作组生成 2 个独立的 2D 图像数组,每个工作组有 1 个工作项,每个项迭代超过 1D 向量的一半(工作),但是对于更多工作项和独立图像,创建额外的开销2D 数组耗时过长,占用内存过多。

感谢任何想法。

【问题讨论】:

  • 更新:现在我已经在我的 Radeon HD7950 GPU 上测试了 i) 最多 32 个计算单元(使用 32 个独立图像,这些图像是在内核完成后添加的),它仍然比首先将数据复制到主机并使用CPU。数据传输需要太多时间。仍然不知道该怎么做 ii).

标签: opencl raytracing pyopencl


【解决方案1】:

Python 不适用于高性能应用程序,尤其是当它涉及循环时——类似于 Matlab。

但是,如果您想坚持使用 Python 并并行化您的代码,最好的方法是使用 PyCuda,您可以为此每个像素拥有一个线程并在 GPU 上运行计算。

请注意,最有效的光线追踪是向后光线追踪,它将光线从相机发送到场景(例如,每像素一条光线),这样您就可以确保不会浪费光线否则永远无法到达相机。也许在尝试并行化代码之前,首先要做的是理解和实现更有效的算法。

如果您想要全局效果,可以查看(双向)路径跟踪和照片映射。

【讨论】:

  • 或者你可以......你知道......使用 OpenCL(OP 已经使用)在 GPU 上做所有事情,而不是建议使用 CUDA。损失的灵丹妙药..
  • 哎呀,谢谢 - 出于某种原因,我阅读了 PyOpenCV(我在上下文中发现它很奇怪)。不过,我关于选择更适合的算法的评论仍然适用。
  • 感谢您的回答。但是,我不为计算机图形进行光线追踪。我的代码是 X 射线传播/模拟代码,因此是 Monte Carlo 方法。我涉及到相当多的随机数(源处的随机射线源、角度、X 射线能量、强度等),并且有一面镜子涉及与射线相关的反射特性,因此不能从相机开始。
  • 为什么它不是一个选项以及 X 射线的具体内容是什么?据我所知,X 射线满足亥姆霍兹互易性,您想要的与 CG 中所做的相同。恕我直言,你能做的最好的是双向路径追踪,它是无偏的,并考虑到反射器等。它从光源和接收器产生光线,同时你将在质量方面获得更高的改进(或更快以获得相同的质量)而不是通过并行化您的代码。蒙特卡洛集成随着样本数量的平方而提高,因此使用 16 个内核,您最多将获得 4 倍的改进
  • 我必须考虑一下。我还需要在相机上很好地表示光子统计数据。现实世界中的源是光子受限的,所以如果模拟可以包括它会很棒。不知道路径追踪是否可行...
猜你喜欢
  • 2010-10-26
  • 2018-09-07
  • 1970-01-01
  • 2015-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-12
  • 2021-01-06
相关资源
最近更新 更多