Minor typo - init the job_data stdin_target field to 0 for default behavior. Add test.
Этот коммит содержится в:
родитель
93e73841f9
Коммит
92102304b6
1
.gitignore
поставляемый
1
.gitignore
поставляемый
@ -403,6 +403,7 @@ orte/test/mpi/thread_init
|
||||
orte/test/mpi/memcached-dummy
|
||||
orte/test/mpi/coll_test
|
||||
orte/test/mpi/badcoll
|
||||
orte/test/mpi/iof
|
||||
|
||||
orte/test/system/radix
|
||||
orte/test/system/sigusr_trap
|
||||
|
@ -624,7 +624,7 @@ static void orte_job_construct(orte_job_t* job)
|
||||
ORTE_GLOBAL_ARRAY_MAX_SIZE,
|
||||
2);
|
||||
job->num_apps = 0;
|
||||
job->stdin_target = ORTE_VPID_INVALID;
|
||||
job->stdin_target = 0;
|
||||
job->total_slots_alloc = 0;
|
||||
job->num_procs = 0;
|
||||
job->procs = OBJ_NEW(opal_pointer_array_t);
|
||||
|
@ -1,4 +1,4 @@
|
||||
PROGS = mpi_no_op mpi_barrier hello hello_nodename abort multi_abort simple_spawn concurrent_spawn spawn_multiple mpi_spin delayed_abort loop_spawn loop_child bad_exit pubsub hello_barrier segv accept connect hello_output hello_show_help crisscross read_write ziatest slave reduce-hang ziaprobe ziatest bcast_loop parallel_w8 parallel_w64 parallel_r8 parallel_r64 sio sendrecv_blaster early_abort debugger singleton_client_server intercomm_create spawn_tree init-exit77 mpi_info info_spawn server client paccept pconnect ring hello.sapp binding badcoll
|
||||
PROGS = mpi_no_op mpi_barrier hello hello_nodename abort multi_abort simple_spawn concurrent_spawn spawn_multiple mpi_spin delayed_abort loop_spawn loop_child bad_exit pubsub hello_barrier segv accept connect hello_output hello_show_help crisscross read_write ziatest slave reduce-hang ziaprobe ziatest bcast_loop parallel_w8 parallel_w64 parallel_r8 parallel_r64 sio sendrecv_blaster early_abort debugger singleton_client_server intercomm_create spawn_tree init-exit77 mpi_info info_spawn server client paccept pconnect ring hello.sapp binding badcoll iof
|
||||
|
||||
all: $(PROGS)
|
||||
|
||||
|
65
orte/test/mpi/iof.c
Обычный файл
65
orte/test/mpi/iof.c
Обычный файл
@ -0,0 +1,65 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdbool.h>
|
||||
#include <unistd.h>
|
||||
#include <mpi.h>
|
||||
|
||||
#define ORTE_IOF_BASE_MSG_MAX 2048
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int i, rank, size, next, prev, tag = 201;
|
||||
int pos, msgsize, nbytes;
|
||||
bool done;
|
||||
char *msg;
|
||||
|
||||
MPI_Init(&argc, &argv);
|
||||
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
|
||||
MPI_Comm_size(MPI_COMM_WORLD, &size);
|
||||
|
||||
fprintf(stderr, "Rank %d has cleared MPI_Init\n", rank);
|
||||
|
||||
next = (rank + 1) % size;
|
||||
prev = (rank + size - 1) % size;
|
||||
msg = malloc(ORTE_IOF_BASE_MSG_MAX);
|
||||
pos = 0;
|
||||
nbytes = 0;
|
||||
|
||||
if (0 == rank) {
|
||||
while (0 != (msgsize = read(0, msg, ORTE_IOF_BASE_MSG_MAX))) {
|
||||
fprintf(stderr, "Rank %d: sending blob %d\n", rank, pos);
|
||||
if (msgsize > 0) {
|
||||
MPI_Bcast(msg, ORTE_IOF_BASE_MSG_MAX, MPI_BYTE, 0, MPI_COMM_WORLD);
|
||||
}
|
||||
++pos;
|
||||
nbytes += msgsize;
|
||||
}
|
||||
fprintf(stderr, "Rank %d: sending termination blob %d\n", rank, pos);
|
||||
memset(msg, 0, ORTE_IOF_BASE_MSG_MAX);
|
||||
MPI_Bcast(msg, ORTE_IOF_BASE_MSG_MAX, MPI_BYTE, 0, MPI_COMM_WORLD);
|
||||
MPI_Barrier(MPI_COMM_WORLD);
|
||||
} else {
|
||||
while (1) {
|
||||
MPI_Bcast(msg, ORTE_IOF_BASE_MSG_MAX, MPI_BYTE, 0, MPI_COMM_WORLD);
|
||||
fprintf(stderr, "Rank %d: recvd blob %d\n", rank, pos);
|
||||
++pos;
|
||||
done = true;
|
||||
for (i=0; i < ORTE_IOF_BASE_MSG_MAX; i++) {
|
||||
if (0 != msg[i]) {
|
||||
done = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (done) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
fprintf(stderr, "Rank %d: recv done\n", rank);
|
||||
MPI_Barrier(MPI_COMM_WORLD);
|
||||
}
|
||||
|
||||
fprintf(stderr, "Rank %d has completed bcast\n", rank);
|
||||
MPI_Finalize();
|
||||
return 0;
|
||||
}
|
Загрузка…
Ссылка в новой задаче
Block a user