【发布时间】:2010-10-09 11:06:33
【问题描述】:
我有一个 D2 程序,在其当前形式下,它是单线程的,并且对于该程序的外循环的每次迭代,在内循环中调用相同的纯函数大约 10 到 100 次。调用之间没有数据依赖关系,即没有调用使用任何其他调用的结果。总的来说,这个函数被调用了数百万次,是我程序的主要瓶颈。参数几乎每次都是唯一的,因此缓存无济于事。
乍一看,这似乎是并行化的完美候选者。唯一的问题是该函数每次调用只需要大约 3 微秒,远低于创建新线程的延迟,并且远不高于将作业添加到任务池的开销(意思是,获取互斥体,分配内存到保存有关任务的信息,处理可能的任务池队列争用等)。有没有什么好的方法可以利用这种细粒度的并行性?
【问题讨论】:
-
3 微秒和 100 次调用?所以这总共需要 0.0003 秒来执行?瓶颈在哪里?
-
这是外循环的一次迭代。外部循环执行数百万次,未来可能执行数十亿次。
-
这是我最近问的一个类似问题:stackoverflow.com/questions/564577/…
-
那么你不应该在外循环中并行化迭代组吗?单个内部迭代似乎不值得并行化。
-
但是外部循环确实相互依赖,所以我不能。
标签: performance multithreading optimization parallel-processing d