如何将Mandelbrot的每个像素计算划分为不同的节点?

时间:2013-04-17 02:10:11

标签: c++ c multithreading parallel-processing mandelbrot

enter image description here

我的问题是我应该使用什么数据结构将工作分配给每个线程并从中获取计算值。在我的脑海中,第一件事是填充矢量[0] ..矢量[63999](对于800x800像素),其结构包含x,y和iterate_value。将这些向量传递给每个节点 - >然后将给定矢量进一步划分到每个核心(Os-thread) - >然后进一步将给定的向量分成每个线程。是否有其他可能的方式来发送和接收值?如果我以矢量方式进行,我应该通过传递值传递矢量还是通过引用传递,在这种情况下哪一个更好?

2 个答案:

答案 0 :(得分:4)

mandelbrot集的不同点需要不同的时间来计算(靠近边缘的点更昂贵),因此给每个工作人员一个偶数个像素将使其中一些比其他像素更快完成。

将图像分成小矩形(图块)。使用多线程队列创建工作列表,并使用切片填充它。每个工作线程循环,从工作列表中选择一个磁贴并提交结果,直到工作列表为空。

答案 1 :(得分:2)

像素间距均匀,为什么要为每个像素发送坐标?只需告诉每个节点左下角像素的x和y坐标,像素之间的间距以及像素数。这样,您的工作单位规格就是一个小的常数。

就更大的设计而言,没有必要让更多的工作线程运行在物理核心上。每个核心多个线程的上下文切换只会降低性能。