test: add MPI hello and ring for testing
This commit is contained in:
27
hello/hello.c
Normal file
27
hello/hello.c
Normal file
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2006 Cisco Systems, Inc. All rights reserved.
|
||||
*
|
||||
* Sample MPI "hello world" application in C
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "mpi.h"
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
int rank, size, len;
|
||||
char version[MPI_MAX_LIBRARY_VERSION_STRING];
|
||||
|
||||
MPI_Init(&argc, &argv);
|
||||
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
|
||||
MPI_Comm_size(MPI_COMM_WORLD, &size);
|
||||
MPI_Get_library_version(version, &len);
|
||||
printf("Hello, world, I am %d of %d, (%s, %d)\n",
|
||||
rank, size, version, len);
|
||||
MPI_Finalize();
|
||||
|
||||
return 0;
|
||||
}
|
||||
29
hello/hello.def
Normal file
29
hello/hello.def
Normal file
@@ -0,0 +1,29 @@
|
||||
Bootstrap: localimage
|
||||
From: ../intel-obxkit-sdk.sif
|
||||
Stage: build
|
||||
|
||||
%files
|
||||
. /build/
|
||||
|
||||
%post
|
||||
cd /build
|
||||
mpicc hello.c
|
||||
|
||||
Bootstrap: localimage
|
||||
From: ../intel-obxkit-runtime.sif
|
||||
Stage: runtime
|
||||
|
||||
%environment
|
||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/app
|
||||
|
||||
%files from build
|
||||
/build/a.out /app/a.out
|
||||
|
||||
%runscript
|
||||
exec /app/a.out "$@"
|
||||
|
||||
%labels
|
||||
Author jonas@juselius.io
|
||||
|
||||
%help
|
||||
hello
|
||||
9
hello/hello.run
Executable file
9
hello/hello.run
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
#SBATCH -N1 -n 64 --ntasks-per-node=64
|
||||
|
||||
. /opt/bin/slurm-run.sh
|
||||
|
||||
cd /work/$USER/hello
|
||||
run /users/$USER/intel-obxkit/hello.sif
|
||||
|
||||
# vim:ft=sh
|
||||
79
ring/ring.c
Normal file
79
ring/ring.c
Normal file
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2006 The Trustees of Indiana University and Indiana
|
||||
* University Research and Technology
|
||||
* Corporation. All rights reserved.
|
||||
* Copyright (c) 2006 Cisco Systems, Inc. All rights reserved.
|
||||
*
|
||||
* Simple ring test program in C.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include "mpi.h"
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
int rank, size, next, prev, message, tag = 201;
|
||||
|
||||
/* Start up MPI */
|
||||
|
||||
MPI_Init(&argc, &argv);
|
||||
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
|
||||
MPI_Comm_size(MPI_COMM_WORLD, &size);
|
||||
|
||||
/* Calculate the rank of the next process in the ring. Use the
|
||||
modulus operator so that the last process "wraps around" to
|
||||
rank zero. */
|
||||
|
||||
next = (rank + 1) % size;
|
||||
prev = (rank + size - 1) % size;
|
||||
|
||||
/* If we are the "manager" process (i.e., MPI_COMM_WORLD rank 0),
|
||||
put the number of times to go around the ring in the
|
||||
message. */
|
||||
|
||||
if (0 == rank) {
|
||||
message = 10;
|
||||
|
||||
printf("Process 0 sending %d to %d, tag %d (%d processes in ring)\n",
|
||||
message, next, tag, size);
|
||||
MPI_Send(&message, 1, MPI_INT, next, tag, MPI_COMM_WORLD);
|
||||
printf("Process 0 sent to %d\n", next);
|
||||
}
|
||||
|
||||
/* Pass the message around the ring. The exit mechanism works as
|
||||
follows: the message (a positive integer) is passed around the
|
||||
ring. Each time it passes rank 0, it is decremented. When
|
||||
each processes receives a message containing a 0 value, it
|
||||
passes the message on to the next process and then quits. By
|
||||
passing the 0 message first, every process gets the 0 message
|
||||
and can quit normally. */
|
||||
|
||||
while (1) {
|
||||
MPI_Recv(&message, 1, MPI_INT, prev, tag, MPI_COMM_WORLD,
|
||||
MPI_STATUS_IGNORE);
|
||||
|
||||
if (0 == rank) {
|
||||
--message;
|
||||
printf("Process 0 decremented value: %d\n", message);
|
||||
}
|
||||
|
||||
MPI_Send(&message, 1, MPI_INT, next, tag, MPI_COMM_WORLD);
|
||||
if (0 == message) {
|
||||
printf("Process %d exiting\n", rank);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* The last process does one extra send to process 0, which needs
|
||||
to be received before the program can exit */
|
||||
|
||||
if (0 == rank) {
|
||||
MPI_Recv(&message, 1, MPI_INT, prev, tag, MPI_COMM_WORLD,
|
||||
MPI_STATUS_IGNORE);
|
||||
}
|
||||
|
||||
/* All done */
|
||||
|
||||
MPI_Finalize();
|
||||
return 0;
|
||||
}
|
||||
29
ring/ring.def
Normal file
29
ring/ring.def
Normal file
@@ -0,0 +1,29 @@
|
||||
Bootstrap: localimage
|
||||
From: ../intel-obxkit-sdk.sif
|
||||
Stage: build
|
||||
|
||||
%files
|
||||
. /build/
|
||||
|
||||
%post
|
||||
cd /build
|
||||
mpicc ring.c
|
||||
|
||||
Bootstrap: localimage
|
||||
From: ../intel-obxkit-runtime.sif
|
||||
Stage: runtime
|
||||
|
||||
%environment
|
||||
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/app
|
||||
|
||||
%files from build
|
||||
/build/a.out /app/a.out
|
||||
|
||||
%runscript
|
||||
exec /app/a.out "$@"
|
||||
|
||||
%labels
|
||||
Author jonas@juselius.io
|
||||
|
||||
%help
|
||||
hello
|
||||
9
ring/ring.run
Executable file
9
ring/ring.run
Executable file
@@ -0,0 +1,9 @@
|
||||
#!/usr/bin/env bash
|
||||
#SBATCH -N1 -n 64 --ntasks-per-node=64
|
||||
|
||||
. /opt/bin/slurm-run.sh
|
||||
|
||||
cd /work/$USER/ring
|
||||
run /users/$USER/intel-obxkit/ring.sif
|
||||
|
||||
# vim:ft=sh
|
||||
Reference in New Issue
Block a user