小编tik*_*iki的帖子

numactl --physcpubind

我正在使用numactl,使用--physcpubind选项.手册说:

--physcpubind=cpus, -C cpus
Only execute process on cpus. Etc...
Run Code Online (Sandbox Code Playgroud)

假设我有NUMA系统,有3个NUMA节点,每个节点有4个核心.NUMA节点0具有0,1,2,3作为核心编号.NUMA节点1具有4,5,6,7,NUMA节点2具有8,9,10,11.我的问题是让我说我​​按如下方式运行程序:

export OMP_NUM_THREADS=6
numactl --physcpubind=0,1,4,5,8,9 ./program
Run Code Online (Sandbox Code Playgroud)

即我将用6个线程运行我的程序,我要求它们在CPU核心0,1,4,5,8,9上.例如,如果在程序期间的某个时刻线程0-5被分配了CPU核心0,1,4,5,8,9(setup1).是否有可能在程序执行期间的某个其他时刻线程0可能正在CPU核心9上运行,等等?即CPU内核之间会有线程迁移吗?或者线程唯一地绑定到CPU核心(如在setup1中)?谢谢.

c linux openmp numa

7
推荐指数
1
解决办法
7166
查看次数

mbind 返回 EINVAL

我正在使用为以下问题提供的代码numa+mbind+segfault,每次调用 mbind 都会返回 EINVAL。我怎样才能得到什么是完全错误的?我问这个是因为 EINVAL 可以出于多种原因返回。

page_size = sysconf(_SC_PAGESIZE);
objs_per_page = page_size/sizeof(A[0]);
assert(page_size%sizeof(A[0])==0);
split_three=num_items/3;
aligned_size=(split_three/objs_per_page)*objs_per_page;
remnant=num_items-(aligned_size*3);
piece = aligned_size;

nodemask=1;
mbind(&A[0],piece*sizeof(double),MPOL_BIND,&nodemask,64,MPOL_MF_MOVE);

nodemask=2;
mbind(&A[aligned_size],piece*sizeof(double),MPOL_BIND,&nodemask,64,MPOL_MF_MOVE);

nodemask=4;
bind(&A[aligned_size*2+remnant],piece*sizeof(double),MPOL_BIND,
     &nodemask,64,MPOL_MF_MOVE);
Run Code Online (Sandbox Code Playgroud)

运行程序后(通过将每个 mbind 调用之前的节点掩码分别更改为 1,2 和 4)如下所示(作为 Mats Petersson 的回答)。它有时会出现段错误,有时运行良好。当它出现段错误时,dmesg 如下:

Stack:
Call Trace:
mpol_new+0x5d/0xb0
sys_mbind+0x125/0x4f0
finish_task_switch+0x4a/0xf0
? __schedule+0x3cf/0x7c0
system_call_fastpath+0x16/0x1b
Code: ...
kmem_cache_alloc+0x58/0x130
Run Code Online (Sandbox Code Playgroud)

c linux numa

5
推荐指数
1
解决办法
594
查看次数

编译时模块版本错误

我想用mpif90编译我的Fortran程序(.f90),但我得到以下内容:

use a_box
   1
Fatal Error: Wrong module version '6' (expected '9') for 
                       file 'a_box.mod' opened at (1)
Run Code Online (Sandbox Code Playgroud)

你能帮我解决这个问题吗?谢谢!

mpif90版本如下:

GNU Fortran (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2
Run Code Online (Sandbox Code Playgroud)

我的系统是Ubuntu 12.10.

fortran mpi

4
推荐指数
1
解决办法
3486
查看次数

在OpenMP do循环中分配不同的线程号

我在OpenMP并行区域内有两个do循环,如下所示:

!$OMP PARALLEL
...
!$OMP DO
...
!$OMP END DO
...
!$OMP DO
...
!$OMP END DO
...
!$OMP END PARALLEL
Run Code Online (Sandbox Code Playgroud)

假设OMP_NUM_THREADS = 6.我想先用4个线程运行do-loop,然后用3个线程运行第二个do-loop.你能说明怎么做吗?我希望它们在一个平行区域内.也可以指定哪个线程号应该执行任何一个do循环,例如在第一次do循环的情况下我可以要求它使用线程号1,2,4和5.谢谢.

fortran openmp

2
推荐指数
1
解决办法
1171
查看次数

标签 统计

c ×2

fortran ×2

linux ×2

numa ×2

openmp ×2

mpi ×1