1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
|
/**
* Copyright (C) Mellanox Technologies Ltd. 2020. ALL RIGHTS RESERVED.
*
* See file LICENSE for terms.
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <ucp/api/ucp.h>
#if _OPENMP
#include <omp.h>
#endif
#include <time.h>
#include <sys/time.h>
int main(int argc, char **argv)
{
int count = 0;
struct timeval start;
struct timeval finish;
gettimeofday(&start, NULL);
printf("starting test [%ld.%06ld] .. ", start.tv_sec, start.tv_usec);
fflush(stdout);
#pragma omp parallel
{
ucs_status_t ctx_status, worker_status;
ucp_context_h context;
ucp_worker_h worker;
ucp_params_t params;
ucp_worker_params_t wparams;
params.field_mask = UCP_PARAM_FIELD_FEATURES;
params.features = UCP_FEATURE_TAG | UCP_FEATURE_STREAM;
ctx_status = ucp_init(¶ms, NULL, &context);
if (ctx_status == UCS_OK) {
wparams.field_mask = 0;
worker_status = ucp_worker_create(context, &wparams, &worker);
if (worker_status == UCS_OK) {
__sync_add_and_fetch(&count, 1);
}
}
#pragma omp barrier
if (ctx_status == UCS_OK) {
if (worker_status == UCS_OK) {
ucp_worker_destroy(worker);
}
ucp_cleanup(context);
}
}
#pragma omp barrier
gettimeofday(&finish, NULL);
printf("[%ld.%06ld] finished %d threads\n",
finish.tv_sec, finish.tv_usec, count);
fflush(stdout);
return 0;
}
|