C 如何在具有多个处理器的机器上并行化算法?

C 如何在具有多个处理器的机器上并行化算法?,c,algorithm,sorting,parallel-processing,mergesort,C,Algorithm,Sorting,Parallel Processing,Mergesort,例如,假设有一个模具,但有两个型芯 因此,应该可以控制在哪个核上处理什么,这意味着可以指示我的算法并行使用这两个核 问题是怎么做 要做到这一点,我是否需要深入内核级,还是有更简单的方法?更具体地说,实现双核合并排序需要什么?根据您过去的问题判断,我想说您希望用C/C++实现,但我相信无论使用何种语言,答案大致相同 如果要并行化任何操作,请将其设置为多线程。您可以拥有与核心数量相同的并行并发线程 这里有一个相关的问题: 据我所知,将特定线程绑定到内核或处理器称为。这通常不是一个好主意,因为操作

例如,假设有一个模具,但有两个型芯

  • 因此,应该可以控制在哪个核上处理什么,这意味着可以指示我的算法并行使用这两个核

  • 问题是怎么做


    要做到这一点,我是否需要深入内核级,还是有更简单的方法?更具体地说,实现双核合并排序需要什么?

    根据您过去的问题判断,我想说您希望用C/C++实现,但我相信无论使用何种语言,答案大致相同

    如果要并行化任何操作,请将其设置为多线程。您可以拥有与核心数量相同的并行并发线程

    这里有一个相关的问题:


    据我所知,将特定线程绑定到内核或处理器称为。这通常不是一个好主意,因为操作系统的目的是在处理器之间处理线程。在这方面,您不可能比操作系统做得更好。

    我希望您希望为每个核心分配线程。。 这是对可以做什么以及如何做的详细描述


    希望这有帮助。

    。这里有一个。为了获得更精确的答案,你必须问一个更精确的问题。

    < P>实现一个利用多个核的算法,考虑./P>
    当然,具有强数据依赖性的算法可能无法很好地并行化。

    这取决于您希望使用何种编程语言来实现。例如:

    • Python-use或lib

    • C#/.NET-用于应用程序

    • newLISP-仅用于相同的目标

    • 你可以使用等等

    • 等等,等等

    只需选择语言,并在该语言中寻找并行处理能力

    祝你好运

    虽然POSIX线程(pthreads)可能是一个好主意,但这并不是唯一的

    C中的多线程实际上并不简单,因此,我建议
    fork()

    使用您的mergesort算法的一个子部分为每个CPU启动一个worker fork,然后在manager fork中重新组装它们


    当并行解决方案时,我在线程之前考虑叉,因为它们更容易实现,并且得到一个快速的初步结果。一旦成功,您可能需要花一些时间使用pthreads。

    LOL,我把它理解为瘫痪:-(我认为这是一个非常真实的问题,有一些很好的答案!@polemon:考虑到OpenMP通常使用起来更简单,有什么理由吗(至少对于易于并行化的问题,但由于本主题似乎面向初学者,这(希望)就是我们要讨论的)OpenMP更适合细粒度并行,pthreads更适合细粒度并行,fork更适合粗粒度并行,分布式系统(集群)对于非常粗糙的并行性。这个问题是非常细粒度的,所以我认为你会疯狂地使用fork来解决它。对于细粒度并行性,你希望使用某种线程池,而不是为每个并行任务支付新线程的启动成本。我已经在处理器亲和力方面做了很多工作,相信我,你肯定会这样做如果你能正确地分析你的问题,ly可以比OS做得更好,但线程也是如此。