【问题标题】:Sharing multi-threaded code between standard C++ and OpenCL在标准 C++ 和 OpenCL 之间共享多线程代码
【发布时间】:2015-08-10 12:05:40
【问题描述】:

我正在尝试开发一个必须并行运行许多计算的 C++ 应用程序。算法将非常大,但它们将是纯数学的并且是浮点整数。因此,它们应该使用 OpenCL 在 GPU 上工作。我希望该程序能够在不支持 OpenCL 的系统上运行,但我希望它也能够在支持 OpenCL 的系统上使用 GPU 来提高速度。

我的问题是我不想维护两组代码(标准 C++ 可能使用 std::thread 和 OpenCL)。我确实意识到我将能够共享大量实际代码,但唯一明显的方法是在文件之间手动复制可共享的部分,出于可维护性的原因,这确实不是我想做的事情和以防出错。

我希望能够只使用一组文件。有没有合适的方法来做到这一点?在某种程度上,OpenCL 仿真会是一种选择吗?

PS。我知道 AMD OpenCL 模拟器,但它似乎只用于开发,也只用于 Windows。还是我错了?

【问题讨论】:

    标签: c++ multithreading parallel-processing opencl gpgpu


    【解决方案1】:

    OpenCL 可以将 CPU 用作计算设备,因此 OpenCL 代码可以在没有 GPU 的平台上运行。但是,GPU 和 CPU 之间的架构差异很可能需要您仍然维护两个代码库才能在这两种情况下获得最佳性能。

    【讨论】:

    • 我意识到 OpenCL 可以在 CPU 上运行,但在旧平台上,尤其是嵌入式设备上往往没有可用的原生 OpenCL 驱动程序。
    • 好吧,我误会了,我认为 OpenCL 在您所针对的所有平台上仍然可用,只是缺少一个 GPU。
    • @Gerhman 无关,但你有能力在旧平台/嵌入式设备上使用 MMX/SSE 吗?如果您想要速度,那绝对值得研究。
    • @RyanP 我不确定这是否是一个选择。在嵌入式方面,我部分指的是移动应用程序,包括 iOS、Android 和 Windows Phone 应用程序。
    • 这是一个非常广泛的平台,不幸的是,我认为您不太可能使用单个高性能代码库来定位所有这些平台。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 2011-03-09
    • 2023-03-17
    • 1970-01-01
    • 2011-02-09
    • 2014-09-24
    相关资源
    最近更新 更多