gpt4 book ai didi

multithreading - 缺少的 “Comparison of Parallel Processing API”。如何选择多线程库?

转载 作者:行者123 更新时间:2023-12-04 04:30:02 25 4
gpt4 key购买 nike

我交替使用短语Parallel ProcessingMulti Threading,因为我觉得它们之间没有区别。如果我错了,请纠正我。

我不是并行处理/多线程领域的专家。我熟悉并使用过.NET线程和POSIX线程。仅此而已。

我刚刚浏览了有关多线程的SO文件,惊讶地发现有这么多的多线程库。

http://en.wikipedia.org/wiki/Template:Parallel_computing lists down APIs of well known (I'm not sure if any others exist) Multi-Threading Libraries.

  1. POSIX Threads
  2. OpenMP
  3. PVM
  4. MPI
  5. UPC
  6. Intel Threading Building Blocks
  7. Boost.Thread
  8. Global Arrays
  9. Charm++
  10. Cilk
  11. Co-array Fortran
  12. CUDA


另外,我很惊讶地看到 http://en.wikipedia.org/wiki/Comparison_of_Parallel_Computing_Libraries_(API)丢失了。

到目前为止,我从来没有需要在这些库之间进行选择的情况。但是,如果我遇到这样的情况。
  • 我应该如何选择一个?
  • 这些库有什么优点和缺点?
  • 为什么我们有这么多库可用来解决一个问题?
  • 哪个最好?
  • 最佳答案

    [1]并行库的正确选择取决于目标并行机的类型:(1)共享内存计算机(即多核)和(2)分布式内存计算机(即Cell,Grid Computing,CUDA)。您还需要考虑要使用哪种并行编程模型:(1)通用多线程应用程序,(2)循环级并行性,(3)高级并行性,例如管道,(4)数据级并行性。

    首先,共享内存模型只是多线程编程,因为所有计算核心(例如,芯片多处理器和对称多处理器)上的地址空间都是共享的。无需在线程和进程之间显式交换数据。 OpenMP,Cilk,TBB都用于此域。

    分布式内存模型曾经是 super 计算机的主要并行编程模型,在 super 计算机中,每台单独的计算机(即不共享地址空间)都通过紧密的网络连接。 MPI是最著名的编程模型。但是,该模型仍然存在,尤其是对于不共享内存地址空间的CUDA和基于单元的编程而言。例如,CUDA将CPU的内存和GPU的内存分开。您明确需要在CPU内存和GPU内存之间发送数据。

    接下来,您需要考虑使用并行编程模型。 POSIX线程用于通用多线程编程(例如,高度多线程的Web服务器)。但是,与一般的POSIX/Win32线程API相比,OpenMP非常专门用于循环级并行处理。它简化了线程派生和联接。英特尔TBB支持各种任务级别的并行性,包括循环和流水线。您还可以利用另一种并行性:数据级并行性。对于此问题,因为GPGPU专用于数据并行工作负载,所以GPGU会比CPU更好。也有称为流处理的编程模型。

    [2]我已经在上面回答了。

    [3]简单。有许多不同的并行/并发编程模型和不同的并行机。因此,这不是一个单一的问题。到目前为止,并行/并行编程中有很多子问题无法通过 super 单一编程模型解决。

    [4]视情况而定。严重地。

    关于multithreading - 缺少的 “Comparison of Parallel Processing API”。如何选择多线程库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2338094/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com