gpt4 book ai didi

multithreading - 使用Open MP在Xeon Phi上将多个线程分配给单个并行处理

转载 作者:行者123 更新时间:2023-12-03 12:55:39 25 4
gpt4 key购买 nike

我有一些类似的代码:

!$dir parallel do
do k = 1, NUM_JOBS
call asynchronous_task( parameter_array(k) )
end do
!$dir end parallel do

我尝试了许多不同的策略,包括
$ micnativeloadex $exe -e "KMP_PLACE_THREADS=59Cx4T OMP_NUM_THREADS=236"

但是,当我用top检查MIC时,我的使用率只有25%。

我在英特尔文档/论坛和OpenMP论坛上很难找到任何特定的帮助,现在,我在想,只有59个任务和4个线程同时完成每个任务的唯一尝试是将open-MPI组合在一起与开放式MP。

有没有人对此有任何经验,并有任何前进的建议?我一直在运行236个异步任务,但是由于我的任务的内存开销,我怀疑59个任务的运行速度比236快4倍。

最佳答案

KMP_PLACE_THREADS将隐式设置OMP_NUM_THREADS,因此您无需在麦克风环境变量中指定此设置。

如果您要使用59个任务,每个任务有4个线程,则可以选择几种方法。

MPI/OpenMP

如前所述,您可以使用混合MPI/OpenMP方法。在这种情况下,每个等级将使用不同的OpenMP域。过去,我是通过在麦克风上本地运行mpirun来实现此目的的,如下所示:

#!/bin/bash
export I_MPI_PIN=off
mpirun -n 1 -env KMP_PLACE_THREADS=10c,4t,1o ./scaling : \
-n 1 -env KMP_PLACE_THREADS=10c,4t,11o ./scaling : \
-n 1 -env KMP_PLACE_THREADS=10c,4t,21o ./scaling : \
-n 1 -env KMP_PLACE_THREADS=10c,4t,31o ./scaling : \
-n 1 -env KMP_PLACE_THREADS=10c,4t,41o ./scaling : \
-n 1 -env KMP_PLACE_THREADS=10c,4t,51o ./scaling

这将创建6个MPI等级,并将线程明确放置在CPU 1,11,21,31,41,51上,每个等级具有40个OpenMP线程。

您将必须设计MPI代码,以将NUM_JOBS分到各个等级,并在 asynchronous_task()内部内部使用OpenMP。

嵌套的OpenMP

使用二手嵌套OpenMP的另一种可能性。几乎可以肯定,这对于Xeon Phi上的总内存消耗将更为有利。

在这种情况下,您还需要使用OpenMP指令在 asynchronous_task内部公开并行性。

在顶层循环中,您可以启动59个任务,然后在 asynchronous_task中内部使用4个线程。至关重要的是,您可以在内部公开此并行性,否则您的性能将无法很好地扩展。

要使用嵌套的OpenMP,您可以使用以下代码:
call omp_set_nested(.true.)

!$OMP parallel do NUM_THREADS(59)
do k = 1, NUM_JOBS
call asynchronous_task( parameter_array(k) )
end do
!$OMP end parallel do

subroutine asynchronous_task()
!$OMP parallel NUM_THREADS(4)
work()
!$OMP end parallel
end subroutine

在这两种用例中,您都需要在任务子例程中使用OpenMP,以便每个任务使用多个线程。

关于multithreading - 使用Open MP在Xeon Phi上将多个线程分配给单个并行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26830827/

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