【问题标题】:Parallel API for C/C++ on WindowsWindows 上 C/C++ 的并行 API
【发布时间】:2010-11-05 09:46:30
【问题描述】:

我们正在为 Windows 平台开发一些东西,我们希望利用当今 PC 中存在的多个内核。

我知道在 VS2010 中有Concurrency Runtime。不过,它仍处于测试阶段。与此同时,我们现在确实需要发布高质量的代码,对于允许以后平滑过渡的 API 来说,什么是一个不错的选择。其他建议?

【问题讨论】:

    标签: c windows api parallel-processing


    【解决方案1】:

    英特尔的线程构建块库有一个并行任务系统,它与并发运行时(在高层次上)类似。 API 细节会有所不同,但您将程序分解为独立运行的小任务的工作将继续存在。

    【讨论】:

    • 你可以在threadingbuildingblocks.org找到更多关于线程构建块库的信息。注意它是一个C++库,所以如果你想从C代码中使用它,你可能不得不去pthreads 或 OpenMP
    【解决方案2】:

    我一直很喜欢 pthread。它可以很好地映射到我遇到的其他线程模型,并且我发现它相对易于编程(与 MPI 相比)。

    但是,它没有并发运行时那么高级。

    我也听说过一些关于 OpenMP 的噪音,但还没有调查过。

    【讨论】:

    【解决方案3】:

    我建议在等待时使用OpenMP。它适用于大多数编译器,相对容易添加到现有代码中,并在以后与其他 API 一起使用。

    【讨论】:

      【解决方案4】:

      我知道:

      • Intel Thread Building Block library(开源)
      • C++0x 线程库支持(将来某个时候跨平台)
      • Just Software C++0x 线程库的实现 - 让您在使用 vs 2008 中的新 c++ 线程库时抢占先机。
      • OpenMP - 目前大多数 C++ 编译器都内置,包括 VS 2008。
      • pthreads for win32 - POSIX 线程,因此它们对于任何 POSIX 投诉操作系统都是跨平台的。
      • WIN32 线程 API

      我会推荐英特尔线程构建模块,因为它比大多数其他多线程 API 的抽象级别更高。它也是开源的,因此您可以下载并查看其中一些内容是如何完成的。即将发布的版本旨在使用 Windows 并发运行时(如果可用)。我还了解到英特尔已提交 TBB 以纳入 C++ 标准。

      pthreads 和 Win32 API 是较低级别的原语,需要您更好地理解多线程环境。如果您知道自己在做什么,这些工具可为您提供最大的控制权。

      我还没有使用新的 c++ 线程支持,但它们看起来与 pthread 处于同一水平或更高一点。 Just Software 有一些有趣的articles 介绍如何使用新的 c++ 线程库。

      我只阅读过有关 OpenMP 的文章,但我不确定它的用途。

      您可能想阅读Joe Duffy's Concurrent Programming on Windows 的书。

      Herb Sutter 也以有效并发为题发表了大量文章。

      希望对您有所帮助。

      【讨论】:

        【解决方案5】:

        简短回答:聘请具有良好线程经验的程序员。

        在多核上使用多线程很难。经验是无可替代的。

        Visual C++(任何最新版本)具有开发并行软件的工具,但存在数据同步等复杂性,这对于没有经验的人来说非常棘手。并发运行时的东西试图隐藏复杂性并让编译器完成工作。它可能工作得很好,但陪审团仍然没有。目前,您可以使用现有工具获得良好的结果,但您需要专业知识。

        考虑聘请一位优秀的承包商来帮助构建正确的架构并培训您自己的员工跟上进度。

        【讨论】:

        • 嗨!很抱歉给大家留下了我们第一次做多线程的错误印象。我的问题更多关于使用什么 API/arch 来“面向未来”。我们就是那个承包商。
        • 在这种情况下,我的回答是还没有“面向未来”的解决方案。 VS10 的东西可能会合二为一,但直到它成熟。将其用作测试版的风险将非常大。下一个 C++ 标准将有一些并行的东西,但它仍然有点低级。我会说使用 _beginthread() 或 CreateThread()。使用临界区、互斥体、信号量和事件。这仍然是很多繁重的工作,但至少你不会为别人的错误出汗。一个好的 API 会出现,但距离可行可能还需要两年时间。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-30
        • 2012-11-30
        • 1970-01-01
        • 2016-08-08
        • 2022-01-22
        相关资源
        最近更新 更多