代码之家  ›  专栏  ›  技术社区  ›  solti

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

  •  2
  • solti  · 技术社区  · 12 年前

    enter image description here

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

    2 回复  |  直到 12 年前
        1
  •  4
  •   rmmh CJ Cullen    12 年前

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

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

        2
  •  2
  •   Theran    12 年前

    像素间隔均匀,那么为什么要发送每个像素的坐标呢?只需告诉每个节点其左下角像素的x和y坐标、像素之间的间距以及像素数。通过这种方式,您的工作单元规范是一个小的恒定大小。

    就更大的设计而言,拥有比物理内核更多的工作线程是没有意义的。每个内核多个线程的上下文切换只会降低性能。

    推荐文章