【问题标题】:automatic parallelization自动并行化
【发布时间】:2011-06-17 08:36:55
【问题描述】:

我想在线程级别自动并行化顺序程序以在多核上运行 处理器。 我不知道使用 lvm 或 openIMPACT 或其他编译器。你能帮我解决这个问题吗?

【问题讨论】:

  • 很少有关于自动实现的并行化...请提供更多详细信息?
  • 我想将一个程序拆分为多个分区并将每个分区分配给一个线程并使用管道模型运行线程。当然要考虑程序指令之间的依赖关系。
  • 忘掉指令的依赖,更根本的问题是数据依赖。您是否有一些大型数据集,您可以轻松地将其划分为切片,并且在没有线程依赖于彼此数据的情况下单独处理?如果你这样做了,那么你很可能能够进行一些自动并行化(例如 OMP、VC++ parallel_For)。这是什么语言的?
  • 我有一个没有大量数据的顺序程序,但基本块之间的控制和数据依赖性很重要。我在选择特殊语言方面没有任何力量。
  • 你的程序是用什么语言编写的?

标签: multithreading multicore


【解决方案1】:

您希望将顺序程序拆分为通过数据流进行通信的任务管道。例如,假设一个 C 或 C++ 程序,您将需要手动将应用程序重写为并行任务网络。有各种 API 可帮助您编写任务和通信。与此完美契合的正式模型是Kahn Process Networks (KPN)。

显然,真正的挑战是重写代码以将所有通信公开到显式数据流中。这可能需要大量工作,具体取决于应用程序。

在实现方面,OpenMP 对任务并行提供了一些支持。查看vfTasks library (C/C++) 以获得高效的流式 API,您可以轻松地将其移植到您心目中的任何架构。 (免责声明:我是作者之一)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 2022-08-03
    • 1970-01-01
    相关资源
    最近更新 更多