Linux kernel 如何检查MKL调用在Xeon Phi上运行的线程数是否正确?

Linux kernel 如何检查MKL调用在Xeon Phi上运行的线程数是否正确?,linux-kernel,mpi,intel-mkl,xeon-phi,Linux Kernel,Mpi,Intel Mkl,Xeon Phi,我正在运行60个MPI进程,MKL_THREAD_NUM设置为4,以使我在Xeon Phi上拥有完整的240个硬件线程。我的代码正在运行,但我想确保MKL实际上使用了4个线程。使用有限的Xeon Phi linux内核检查此问题的最佳方法是什么?将MKL_NUM_线程设置为4。您可以使用环境变量或运行时调用。将尊重此值,因此无需检查 KNC上的Linux内核并没有被剥离,所以我不知道你们为什么认为这是一个限制。无论如何,您不应该为此使用任何系统调用 如果愿意,可以将MKL_NUM_THREADS

我正在运行60个MPI进程,MKL_THREAD_NUM设置为4,以使我在Xeon Phi上拥有完整的240个硬件线程。我的代码正在运行,但我想确保MKL实际上使用了4个线程。使用有限的Xeon Phi linux内核检查此问题的最佳方法是什么?

将MKL_NUM_线程设置为4。您可以使用环境变量或运行时调用。将尊重此值,因此无需检查


KNC上的Linux内核并没有被剥离,所以我不知道你们为什么认为这是一个限制。无论如何,您不应该为此使用任何系统调用

如果愿意,可以将MKL_NUM_THREADS设置为4。但是,使用每一个线程并不一定能获得最佳性能。在某些情况下,MKL库知道关于算法的一些事情,这意味着线程越少越好。在这些情况下,库例程可以选择使用较少的线程。如果有61个core,则只应使用60个MPI列组。如果要使用那么多MPI列组,则需要将I_MPI_PIN_域环境变量设置为“core”。记住为操作系统和系统级进程留出一个内核。这将在协处理器上为每个内核设置一个列组,并允许每个MPI进程的所有OpenMP线程驻留在同一个内核上,从而提供更好的缓存行为。如果这样做,还可以在主机处理器上的gui模式下使用micsmc连续监视所有内核上的活动。使用每个内核一个MPI处理器,您可以看到一个内核上的所有线程都在使用多少时间。

。第一个答案提到显示所有进程和线程的
ps-eLf
。请参阅中的示例。另外,正如您所知,240个线程不一定是最优的。几个基准测试表明120个线程是最佳的。虽然Xeon Phi(KNC)可以处理4个线程/核心,但它只能支持2个融合乘法加法/核心/循环;每个内核4路SMT的存在是希望当一个当前“热”线程停止时,两个备用线程中的一个可以执行。但是,如果这两个“热”线程已经进行了很好的调优,那么备用线程可能会从缓存数据中退出,从而破坏性能,否则会导致所有四个线程的总体速度降低。