并行化任务,有多少个线程?

时间:2010-01-15 07:37:39

标签: parallel-processing

假设我们有一个令人尴尬的平行任务,例如蚂蚁为他们的女王提供食物。

X =所需食物量 Y =蚂蚁获取食物单位的时间
Z =要让蚂蚁开始觅食,单个主要线程需要Z秒。

主线程可以生成线程,直到问题完全解决,但是在创建新线程时存在阈值,减少返回生效。对于任务进展的百分比来说,最有效的是停止创建新线程。

对于固定的X和Y值,我告诉主线程产生多少个线程?

编辑:运行环境是使用CUDA而不是java包装器的nvidia gts250 gpu

2 个答案:

答案 0 :(得分:2)

  1. 设置一些实验。
  2. 运行实验,记录结果。
  3. 分析结果。
  4. 得出结论。
  5. 在您回答问题之前

    你写道你的问题令人尴尬地平行。这些问题通常具有明显的“维度”,它们是EP。例如,在电影中渲染图像是逐帧的(因此将每个帧发送到单独的进程(或))或者通过渲染子任务(因此设置管道)。很少会通过将每个图像切割成子图像任务来并行化图像渲染。我猜你的问题是沿'ant'维度分解时的EP问题。所以,可能你应该为每个蚂蚁创建一个任务。那么你应该没有比可用处理器更多的ant任务一次运行。你可能想要更少,更不可能想要比处理器更多的蚂蚁。但是,任务与处理器的最佳比例是你必须自己解决的问题。

    关于线程应该如何执行,o / s应该做什么以及硬件应该如何应对的争论偶尔会有所启发,但它们永远不会替代测试。

    顺便说一下,对于觅食蚂蚁我怀疑修理Y是个坏主意。

    如果你想要更多有针对性的建议,你可能想向我们展示一些你的技术 - 如果你正在编写Fortran + OpenMP,那么关于适合Java程序的线程的建议可能不适用。

答案 1 :(得分:0)

如果我们假设每个工作线程都是CPU绑定的,那么创建比核心更多的线程是不切实际的。