Example #1
0
TEST_F(MPIProfileTest, progress)
{
    struct geopm_prof_c *prof;
    uint64_t region_id[3];
    struct geopm_time_s start, curr;
    double timeout = 0.0;
    int rank;
    int num_node = 0;

    (void) geopm_comm_num_node(MPI_COMM_WORLD, &num_node);
    ASSERT_TRUE(num_node > 1);

    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    ASSERT_EQ(0, geopm_prof_create("progress_test", m_shm_key, MPI_COMM_WORLD, &prof));

    ASSERT_EQ(0, geopm_prof_region(prof, "loop_one", GEOPM_POLICY_HINT_UNKNOWN, &region_id[0]));
    ASSERT_EQ(0, geopm_prof_enter(prof, region_id[0]));
    ASSERT_EQ(0, geopm_time(&start));
    while (timeout < 1.0) {
        ASSERT_EQ(0, geopm_time(&curr));
        timeout = geopm_time_diff(&start, &curr);
        geopm_prof_progress(prof, region_id[0], timeout/1.0);
    }
    ASSERT_EQ(0, geopm_prof_exit(prof, region_id[0]));

    timeout = 0.0;
    ASSERT_EQ(0, geopm_prof_region(prof, "loop_two", GEOPM_POLICY_HINT_UNKNOWN, &region_id[1]));
    ASSERT_EQ(0, geopm_prof_enter(prof, region_id[1]));
    ASSERT_EQ(0, geopm_time(&start));
    while (timeout < 2.0) {
        ASSERT_EQ(0, geopm_time(&curr));
        timeout = geopm_time_diff(&start, &curr);
        geopm_prof_progress(prof, region_id[1], timeout/2.0);
    }
    ASSERT_EQ(0, geopm_prof_exit(prof, region_id[1]));

    timeout = 0.0;
    ASSERT_EQ(0, geopm_prof_region(prof, "loop_three", GEOPM_POLICY_HINT_UNKNOWN, &region_id[2]));
    ASSERT_EQ(0, geopm_prof_enter(prof, region_id[2]));
    ASSERT_EQ(0, geopm_time(&start));
    while (timeout < 3.0) {
        ASSERT_EQ(0, geopm_time(&curr));
        timeout = geopm_time_diff(&start, &curr);
        geopm_prof_progress(prof, region_id[2], timeout/3.0);
    }
    ASSERT_EQ(0, geopm_prof_exit(prof, region_id[2]));

    ASSERT_EQ(0, geopm_prof_print(prof, m_log_file.c_str(), 0));

    if (m_is_node_root) {
        ASSERT_EQ(0, parse_log(false));
    }

    ASSERT_EQ(0, geopm_prof_destroy(prof));
}
Example #2
0
int main(int argc, char**argv)
{
    uint64_t region_id[3];
    struct geopm_time_s start, curr;
    double timeout = 0;
    int rank;

    MPI_Init(&argc, &argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);

    geopm_prof_region("loop_one", GEOPM_REGION_HINT_UNKNOWN, &region_id[0]);
    geopm_prof_enter(region_id[0]);
    geopm_time(&start);
    while (timeout < 1.0) {
        geopm_time(&curr);
        timeout = geopm_time_diff(&start, &curr);
        geopm_prof_progress(region_id[2], timeout/1.0);
    }
    geopm_prof_exit(region_id[0]);

    geopm_prof_region("loop_two", GEOPM_REGION_HINT_UNKNOWN, &region_id[1]);
    geopm_prof_enter(region_id[1]);
    geopm_time(&start);
    while (timeout < 2.0) {
        geopm_time(&curr);
        timeout = geopm_time_diff(&start, &curr);
        geopm_prof_progress(region_id[2], timeout/2.0);
    }
    geopm_prof_exit(region_id[1]);

    geopm_prof_region("loop_three", GEOPM_REGION_HINT_UNKNOWN, &region_id[2]);
    geopm_prof_enter(region_id[2]);
    geopm_time(&start);
    while (timeout < 3.0) {
        geopm_time(&curr);
        timeout = geopm_time_diff(&start, &curr);
        geopm_prof_progress(region_id[2], timeout/3.0);
    }
    geopm_prof_exit(region_id[2]);

    MPI_Finalize();

    return 0;
}
Example #3
0
static int stream_profiled_serial(uint64_t region_id, size_t num_stream, double scalar, double *a, double *b, double *c)
{
    const size_t block = 256;
    const size_t num_block = num_stream / block;
    const size_t num_remain = num_stream % block;
    const double norm = 1.0 / num_block;

    for (size_t i = 0; i < num_block; ++i) {
        for (size_t j = 0; j < block; ++j) {
            a[i * block + j] = b[i * block + j] + scalar * c[i * block + j];
        }
        geopm_prof_progress(region_id, i * norm);
    }
    for (size_t j = 0; j < num_remain; ++j) {
        a[num_block * block + j] = b[num_block * block + j] + scalar * c[num_block * block + j];
    }

    return 0;
}