diff --git a/test/issues/1507+1519/README b/test/issues/1507+1519/README new file mode 100644 index 00000000..f1cae94a --- /dev/null +++ b/test/issues/1507+1519/README @@ -0,0 +1,39 @@ +【Issue#1507/#1519 動作確認】 + +□テスト内容 +TCS (Technical Computing Suite) 環境で MPIとOpenMPを利用した +サンプルプログラムをマルチプロセス+マルチスレッドで実行して、 +xpmemやshmobjを利用するライブラリの初期化および基本動作を確認する。 + +□実行手順 +1. +SSMで以下のとおりサンプルプログラムをビルドする。 +必要に応じて PATHを設定すること。 + +tradモード: +$ mpifccpx -Kopenmp -Nfjomplib -DMPI -DOPENMP mpi+affinity.c -o mpi+fjopenmp-affinity + +LLVMモード: +$ mpifccpx -DMPI -DOPENMP -Kopenmp mpi+affinity.c -o mpi+llvmopenmp-affinity + +2. +インタラクティブモードでジョブ実行を開始する。 +SSMで以下のように pjsubコマンドを発行する。 +rscunitやrscgrp、jobenvは環境に応じて指定すること。 + +$ pjsub --interact -L "rscunit=xxx,rscgrp=xxx,jobenv=xxx,node=1" --mpi "proc=2" --sparam wait-time=1000 + +3. +サンプルプログラムを2プロセス各24スレッド構成で実行する。 +必要に応じて PATHや LD_LIBRARY_PATHを指定すること。 + +tradモード: +$ OMP_NUM_THREADS=24 mpirun -n 2 mcexec -n 2 ./mpi+fjopenmp-affinity + +LLVMモード: +$ OMP_NUM_THREADS=24 mpirun -n 2 mcexec -n 2 ./mpi+llvmopenmp-affinity + + +□実行結果 +result.txt を参照すること。 +サンプルプログラムが異常終了していないことを確認する。 diff --git a/test/issues/1507+1519/mpi+affinity.c b/test/issues/1507+1519/mpi+affinity.c new file mode 100644 index 00000000..ebefe3ca --- /dev/null +++ b/test/issues/1507+1519/mpi+affinity.c @@ -0,0 +1,98 @@ +#define _GNU_SOURCE 1 +#include +#include +#include +#include +#include +#include +#ifdef OPENMP +#include +#include +#endif +#ifdef MPI +#include +#endif + +#define BUFFER_SIZE 4096 + +#define check_env(env) \ +({ \ + if (!getenv(env)) { \ + fprintf(stderr, "error: environment variable %s doesn't exist?!\n", env); \ + exit(1); \ + } \ +}) + +int +main(int argc, char *argv[]) +{ + int rank = 0; + int size = 0; + int ncore = 128; + char hname[BUFFER_SIZE]; + int wait = 0; + + if (argc > 1 && !strcmp("--wait", argv[1])) { + wait = 1; + } + +#ifdef FJ_CHECK_ENV + { + check_env("PMIX_RANK"); + check_env("OMPI_PLE_RANK_ON_NODE"); + check_env("PLE_RANK_ON_NODE"); + check_env("OMPI_MCA_orte_ess_vpid"); + check_env("FLIB_RANK_ON_NODE"); + } +#endif + + gethostname(hname, BUFFER_SIZE); +#ifdef MPI + MPI_Init(&argc, &argv); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + MPI_Comm_size(MPI_COMM_WORLD, &size); +#endif + +#ifdef OPENMP + #pragma omp parallel +#endif + { + int i; + int tid; + pid_t pid; + cpu_set_t cpuset; + char affinity[BUFFER_SIZE]; +#ifdef OPENMP + tid = omp_get_thread_num(); + pid = (pid_t)syscall(SYS_gettid); +#else + tid = 0; + pid = getpid(); +#endif + CPU_ZERO(&cpuset); + if ((sched_getaffinity(pid, sizeof(cpu_set_t), &cpuset)) == 1) { + perror("Error sched_getaffinity"); + exit(1); + } + + affinity[0] = '\0'; + for (i = 0; i < ncore; i++) { + if (CPU_ISSET(i, &cpuset) == 1) { + sprintf(affinity, "%s %d", affinity, i); + } + } + printf("hostname = %s, rank = %03d, PID: %4d, OMP tid = %d, TID = %d, CPU = %d, affinity =%s\n", + hname, rank, getpgid(0), tid, pid, sched_getcpu(), affinity); + if (rank == 0 && tid == 0 && wait == 1) { + printf("Now press ENTER.\n"); + getchar(); + } + } + +#ifdef MPI + MPI_Barrier(MPI_COMM_WORLD); + MPI_Finalize(); +#endif + + return 0; +} diff --git a/test/issues/1507+1519/result.txt b/test/issues/1507+1519/result.txt new file mode 100644 index 00000000..315479e8 --- /dev/null +++ b/test/issues/1507+1519/result.txt @@ -0,0 +1,48 @@ +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 1, TID = 107, CPU = 25, affinity = 25 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 0, TID = 53, CPU = 24, affinity = 24 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 20, TID = 73, CPU = 44, affinity = 44 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 4, TID = 101, CPU = 28, affinity = 28 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 8, TID = 94, CPU = 32, affinity = 32 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 16, TID = 80, CPU = 40, affinity = 40 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 22, TID = 70, CPU = 46, affinity = 46 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 10, TID = 91, CPU = 34, affinity = 34 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 9, TID = 92, CPU = 33, affinity = 33 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 5, TID = 99, CPU = 29, affinity = 29 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 12, TID = 87, CPU = 36, affinity = 36 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 18, TID = 77, CPU = 42, affinity = 42 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 2, TID = 105, CPU = 26, affinity = 26 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 7, TID = 96, CPU = 31, affinity = 31 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 14, TID = 84, CPU = 38, affinity = 38 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 11, TID = 89, CPU = 35, affinity = 35 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 3, TID = 103, CPU = 27, affinity = 27 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 6, TID = 98, CPU = 30, affinity = 30 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 13, TID = 86, CPU = 37, affinity = 37 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 17, TID = 79, CPU = 41, affinity = 41 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 23, TID = 68, CPU = 47, affinity = 47 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 19, TID = 75, CPU = 43, affinity = 43 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 15, TID = 82, CPU = 39, affinity = 39 +hostname = system5-cn0011, rank = 001, PID: 0, OMP tid = 21, TID = 71, CPU = 45, affinity = 45 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 4, TID = 112, CPU = 4, affinity = 4 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 17, TID = 83, CPU = 17, affinity = 17 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 13, TID = 93, CPU = 13, affinity = 13 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 12, TID = 95, CPU = 12, affinity = 12 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 18, TID = 81, CPU = 18, affinity = 18 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 8, TID = 104, CPU = 8, affinity = 8 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 11, TID = 97, CPU = 11, affinity = 11 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 14, TID = 90, CPU = 14, affinity = 14 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 5, TID = 111, CPU = 5, affinity = 5 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 1, TID = 115, CPU = 1, affinity = 1 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 19, TID = 78, CPU = 19, affinity = 19 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 16, TID = 85, CPU = 16, affinity = 16 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 15, TID = 88, CPU = 15, affinity = 15 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 6, TID = 108, CPU = 6, affinity = 6 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 20, TID = 76, CPU = 20, affinity = 20 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 10, TID = 100, CPU = 10, affinity = 10 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 21, TID = 74, CPU = 21, affinity = 21 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 0, TID = 52, CPU = 0, affinity = 0 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 22, TID = 72, CPU = 22, affinity = 22 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 3, TID = 113, CPU = 3, affinity = 3 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 7, TID = 106, CPU = 7, affinity = 7 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 2, TID = 114, CPU = 2, affinity = 2 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 9, TID = 102, CPU = 9, affinity = 9 +hostname = system5-cn0011, rank = 000, PID: 0, OMP tid = 23, TID = 69, CPU = 23, affinity = 23