concurrency - 并行编程入门

标签 concurrency parallel-processing cuda fft opencl

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center为指导。




8年前关闭。




所以它看起来像多核及其所有相关的并发症。我正在计划一个肯定会从并行性中受益的软件项目。问题是我几乎没有编写并发软件的经验。我在大学学习过它并且非常了解概念和理论,但是从学校开始,在构建软件以在多个处理器上运行的有用经验为零。

所以我的问题是,开始多处理器编程的最佳方式是什么?
我主要熟悉在 Mac OS X 上使用 C/C++ 和 Obj-C 进行的 Linux 开发,Windows 经验几乎为零。此外,我计划的软件项目将需要 FFT 并可能需要对大量数据进行浮点比较。

有 OpenCL、OpenMP、MPI、POSIX 线程等......我应该从哪些技术开始?

以下是我正在考虑的几个堆栈选项,但不确定它们是否能让我尝试朝着我的目标努力:

  • 我应该得到雪豹并尝试
    让 OpenCL Obj-C 程序运行
    在我的 ATI X1600 GPU 上执行
    笔记本电脑?或
  • 我应该得到一个
    Playstation 并尝试编写 C 代码
    扔掉它的六个可用的 Cell SPE 核心?
  • 我应该构建一个 Linux 机器吗
    使用 Nvidia 卡并尝试工作
    用CUDA?

  • 预先感谢您的帮助。

    最佳答案

    我建议最初使用 OpenMP 和 MPI,不确定您首先选择哪个很重要,但您绝对应该(在我看来 :-) )学习并行计算的共享和分布式内存方法。

    我建议首先避免使用 OpenCL、CUDA、POSIX 线程:在开始处理子结构之前,先打好并行应用程序的基础知识。例如,在 MPI 中学习使用广播通信比在线程中编程要容易得多。

    我会坚持在你的 Mac 上使用 C/C++,因为你已经熟悉它们,并且有适用于该平台和这些语言的优秀开源 OpenMP 和 MPI 库。

    而且,对于我们中的一些人来说,这是一个很大的优势,无论您了解 C/C++ 和 MPI(在较小程度上也适用于 OpenMP),当您毕业使用真正的 super 计算机时,都会为您提供很好的帮助。

    所有主观和争论,所以如果你愿意,可以忽略这一点。

    关于concurrency - 并行编程入门,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1528459/

    相关文章:

    java - Go 的并发 Java 示例

    c# - monodroid中Task的实现

    sdk - 如何编译CUDA SDK示例?

    visual-c++ - CUDA - 数组在 GPU 上生成随机数组及其使用内核的修改

    c++ - 为什么 OpenMP 'simd' 比 'parallel for simd' 有更好的性能?

    C++ 频繁暂停和重新启动线程的最佳方法是什么?

    java - 并发求和列表,由另一个线程填充

    r - 如何在R中并行化k-means?

    java - 并行流和核心数

    memory - CUDA 常量内存分配是如何工作的?