diff --git a/src/ior.c b/src/ior.c index 3ef411c..bb2b4c2 100755 --- a/src/ior.c +++ b/src/ior.c @@ -939,6 +939,7 @@ static void InitTests(IOR_test_t *tests, MPI_Comm com) params->testComm = com; params->nodes = params->numTasks / tasksPerNode; params->tasksPerNode = tasksPerNode; + params->packedTasks = QueryNodeMapping(com); if (params->numTasks == 0) { params->numTasks = size; } @@ -1360,7 +1361,13 @@ static void TestIoSys(IOR_test_t *test) } if (params->reorderTasks) { /* move two nodes away from writing node */ - rankOffset = (2 * params->tasksPerNode) % params->numTasks; + int shift = 1; + if (params->packedTasks) { + shift = params->tasksPerNode; + } else { + shift = 1; + } + rankOffset = (2 * shift) % params->numTasks; } // update the check buffer @@ -1395,9 +1402,14 @@ static void TestIoSys(IOR_test_t *test) /* Get rankOffset [file offset] for this process to read, based on -C,-Z,-Q,-X options */ /* Constant process offset reading */ if (params->reorderTasks) { - /* move taskPerNodeOffset nodes[1==default] away from writing node */ - rankOffset = (params->taskPerNodeOffset * - params->tasksPerNode) % params->numTasks; + /* move one node away from writing node */ + int shift = 1; + if (params->packedTasks) { + shift=params->tasksPerNode; + } else { + shift=1; + } + rankOffset = (params->taskPerNodeOffset * shift) % params->numTasks; } /* random process offset reading */ if (params->reorderTasksRandom) { diff --git a/src/ior.h b/src/ior.h index 5c46efe..2ea6c05 100755 --- a/src/ior.h +++ b/src/ior.h @@ -100,6 +100,7 @@ typedef struct int numTasks; /* number of tasks for test */ int nodes; /* number of nodes for test */ int tasksPerNode; /* number of tasks per node */ + int packedTasks; /* are the tasks round-robin across nodes or are they packed tightly*/ int repetitions; /* number of repetitions of test */ int repCounter; /* rep counter */ int multiFile; /* multiple files */