X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/dc1466c0fbb38cdbe51b35767cf6e7adce81597d..022fcd4dab24301e12c127f24f04c05d90d2d39a:/teshsuite/smpi/macro-sample/macro-sample.c diff --git a/teshsuite/smpi/macro-sample/macro-sample.c b/teshsuite/smpi/macro-sample/macro-sample.c index 4ae5dbad95..429d87ad1b 100644 --- a/teshsuite/smpi/macro-sample/macro-sample.c +++ b/teshsuite/smpi/macro-sample/macro-sample.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2009-2014. The SimGrid Team. +/* Copyright (c) 2009-2021. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -26,45 +26,58 @@ static double compute(double d0) int main(int argc, char *argv[]) { int n; + int rank; MPI_Init(&argc, &argv); int verbose = argc <= 1; MPI_Comm_size(MPI_COMM_WORLD, &n); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); double d = 2.0; - for (int i = 0; i < 5; i++) { /* I want no more than n + 1 benchs (thres < 0) */ - SMPI_SAMPLE_GLOBAL(n + 1, -1) { + SMPI_SAMPLE_GLOBAL(int i = 0, i < 5, i++, n + 1, -1){ if (verbose) - fprintf(stderr, "(%12.6f) [rank:%d]", MPI_Wtime(), smpi_process_index()); + fprintf(stderr, "(%12.6f) [rank:%d]", MPI_Wtime(), rank); else fprintf(stderr, "(0)"); fprintf(stderr, " Run the first computation. It's globally benched, " "and I want no more than %d benchmarks (thres<0)\n", n + 1); d = compute(2.0); - } + } + + //tagged version, should differentiate between two different calls to the same kernel and run calibration even on the second one + for (int tag=0; tag < 4; tag++){ + char ctag [8]; + //run twice with the same tag, test should skip 1 and 3, as they were already benched. + sprintf(ctag, "%d", tag - tag%2); + SMPI_SAMPLE_GLOBAL_TAG(int i = 0, i < 500, i++, 2, 0.1, ctag){ + if (verbose) + fprintf(stderr, "(%12.6f) [rank:%d]", MPI_Wtime(), rank); + else + fprintf(stderr, "(0)"); + fprintf(stderr, " Run the computation %d with tag %d\n", tag, tag- tag%2); + d = compute(2.0); + } } n = 0; - for (int i = 0; i < 5; i++) { - /* I want the standard error to go below 0.1 second. - * Two tests at least will be run (count is not > 0) */ - SMPI_SAMPLE_LOCAL(0, 0.1) { - if (verbose || n++ < 2) { + //Use 0 as max iter, but one will always be performed by design. + SMPI_SAMPLE_LOCAL (int i = 0, i < 5, i++,0, 0.1){ + if (verbose || n < 2) { + n++; if (verbose) fprintf(stderr, "(%12.6f)", MPI_Wtime()); else fprintf(stderr, "(1)"); fprintf(stderr, - " [rank:%d] Run the first (locally benched) computation. It's locally benched, and I want the " - "standard error to go below 0.1 second (count is not >0)\n", smpi_process_index()); + " [rank:%d] Run the second (locally benched) computation. It's locally benched, and I want the " + "standard error to go below 0.1 second (count is not >0)\n", rank); } d = compute(d); - } } if (verbose) - fprintf(stderr, "(%12.6f) [rank:%d] The result of the computation is: %f\n", MPI_Wtime(), smpi_process_index(), d); + fprintf(stderr, "(%12.6f) [rank:%d] The result of the computation is: %f\n", MPI_Wtime(), rank, d); else - fprintf(stderr, "(2) [rank:%d] Done.\n", smpi_process_index()); + fprintf(stderr, "(2) [rank:%d] Done.\n", rank); MPI_Finalize(); return 0;