假设我们有一个令人尴尬的平行任务,例如蚂蚁为他们的女王提供食物。
X =所需食物量
Y =蚂蚁获取食物单位的时间
Z =要让蚂蚁开始觅食,单个主要线程需要Z秒。
主线程可以生成线程,直到问题完全解决,但是在创建新线程时存在阈值,减少返回生效。对于任务进展的百分比来说,最有效的是停止创建新线程。
对于固定的X和Y值,我告诉主线程产生多少个线程?
编辑:运行环境是使用CUDA而不是java包装器的nvidia gts250 gpu
答案 0 :(得分:2)
做
在您回答问题之前
你写道你的问题令人尴尬地平行。这些问题通常具有明显的“维度”,它们是EP。例如,在电影中渲染图像是逐帧的(因此将每个帧发送到单独的进程(或))或者通过渲染子任务(因此设置管道)。很少会通过将每个图像切割成子图像任务来并行化图像渲染。我猜你的问题是沿'ant'维度分解时的EP问题。所以,可能你应该为每个蚂蚁创建一个任务。那么你应该没有比可用处理器更多的ant任务一次运行。你可能想要更少,更不可能想要比处理器更多的蚂蚁。但是,任务与处理器的最佳比例是你必须自己解决的问题。
关于线程应该如何执行,o / s应该做什么以及硬件应该如何应对的争论偶尔会有所启发,但它们永远不会替代测试。
顺便说一下,对于觅食蚂蚁我怀疑修理Y是个坏主意。
如果你想要更多有针对性的建议,你可能想向我们展示一些你的技术 - 如果你正在编写Fortran + OpenMP,那么关于适合Java程序的线程的建议可能不适用。
答案 1 :(得分:0)
如果我们假设每个工作线程都是CPU绑定的,那么创建比核心更多的线程是不切实际的。