首页 文章

如何将单个应用程序的特定线程卸载到特定的Xeon Phi核心?

提问于
浏览
0

假设我在主机上运行了一个c / c应用程序 . 在主机CPU上运行的线程很少,在Xeon Phi核心上运行50个线程 .

How can I make sure that each of these 50 runs on its own Xeon Phi core and is never purged off the core cache (given the code is small enough).

Could someone please to outline a very general idea how to do this and which tool/API would be more suitable (for C/C++ code) ?

What is the fastest way to exchange data between the host thread-aggregator and the 50 Phi threads?

鉴于实际的并行性将非常有限 - 这个应用程序将更像51线程平面应用程序与一些基本的多线程数据同步 .

Can I use conventional C/C++ compiler to create the app like this?

1 回答

  • 3

    你提出了几个问题:

    • 是的,您可以使用传统的C程序并使用 regular Intel C/C++/Fortran compilers (称为Intel Composer XE)进行编译,以生成能够在"native" / "symmetric"或"offload"模式下在Intel Xeon Phi协处理器上运行的二进制文件 . 在最简单的情况下 - 你只需用-mmic重新编译你的C / C程序并在Phi上运行"natively"只需"as is" .

    • 使用哪种API?使用 OpenMP4.0 standard或 Intel Cilk Plus 编程模型(实际上是一组适用于C / C的编译指示或关键字) . OpenCL,Intel TBB和OpenACC也是可能的,但OpenMP和Cilk Plus能够表示线程,矢量化和卸载(即Xeon Phi编程必不可少的3件事),无需重新分解或重写"conventional C/C++/Fortran"程序 .

    • 线程固定:可以通过 OpenMP affinity (详见下面的MIC_KMP_AFFINITY)或英特尔TBB亲和力来实现 .

    • 在主机和目标Phi之间交换数据的最快方法是...避免任何交换 - 例如使用MPI对称方法 . 但是你似乎专门询问"offload"编程模型,所以使用asynchronous offload可以达到最佳性能 . 同时,同步卸载在编程方面理论上更简单,但在可实现的性能方面更差 .

    总的来说,你倾向于提出几个一般性的问题,所以我建议从一开始就开始 - 即看下面的~10页Dobbs博士manual或给予英特尔'intro document .


    线程固定是更高级的主题,同时对你来说似乎是“最有趣的”,所以我将明确解释更多:

相关问题