Ejemplo n.º 1
0
int MPIDU_Ftb_init(void)
{
    int mpi_errno = MPI_SUCCESS;
    int ret;
    FTB_client_t ci;
    MPIR_FUNC_VERBOSE_STATE_DECL(MPID_STATE_MPIDU_FTB_INIT);

    MPIR_FUNC_VERBOSE_ENTER(MPID_STATE_MPIDU_FTB_INIT);

    MPL_strncpy(ci.event_space, "ftb.mpi.mpich", sizeof(ci.event_space));
    MPL_strncpy(ci.client_name, "mpich " MPICH_VERSION, sizeof(ci.client_name));
    MPL_strncpy(ci.client_subscription_style, "FTB_SUBSCRIPTION_NONE", sizeof(ci.client_subscription_style));
    ci.client_polling_queue_len = -1;
    
#ifdef USE_PMI2_API
    ret = PMI2_Job_GetId(ci.client_jobid, sizeof(ci.client_jobid));
    MPIR_ERR_CHKANDJUMP(ret, mpi_errno, MPI_ERR_OTHER, "**pmi_jobgetid");
#else
    ret = PMI_KVS_Get_my_name(ci.client_jobid, sizeof(ci.client_jobid));
    MPIR_ERR_CHKANDJUMP(ret, mpi_errno, MPI_ERR_OTHER, "**pmi_get_id");
#endif
    
    ret = FTB_Connect(&ci, &client_handle);
    MPIR_ERR_CHKANDJUMP(ret, mpi_errno, MPI_ERR_OTHER, "**ftb_connect");

    ret = FTB_Declare_publishable_events(client_handle, NULL, event_info, sizeof(event_info) / sizeof(event_info[0]));
    MPIR_ERR_CHKANDJUMP(ret, mpi_errno, MPI_ERR_OTHER, "**ftb_declare_publishable_events");

fn_exit:
    MPIR_FUNC_VERBOSE_EXIT(MPID_STATE_MPIDU_FTB_INIT);
    return mpi_errno;
fn_fail:
    goto fn_exit;
}
Ejemplo n.º 2
0
HYD_status HYDT_ftb_init(void)
{
    int ret;
    FTB_client_t ci;
    HYD_status status = HYD_SUCCESS;

    MPL_strncpy(ci.event_space, "ftb.mpi.hydra", sizeof(ci.event_space));
    MPL_strncpy(ci.client_name, "hydra " HYDRA_VERSION, sizeof(ci.client_name));
    MPL_strncpy(ci.client_subscription_style, "FTB_SUBSCRIPTION_NONE",
                sizeof(ci.client_subscription_style));
    ci.client_polling_queue_len = -1;

    ret = FTB_Connect(&ci, &ch);
    if (ret)
        HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "ftb connect\n");

    ret = FTB_Declare_publishable_events(ch, NULL, event_info,
                                         sizeof(event_info) / sizeof(event_info[0]));
    if (ret)
        HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR, "ftb declare publishable\n");

  fn_exit:
    HYDU_FUNC_EXIT();
    return status;

  fn_fail:
    goto fn_exit;
}
Ejemplo n.º 3
0
int main(int argc, char *argv[])
{
    FTB_client_t cinfo;
    FTB_client_handle_t handle;
    FTB_event_handle_t ehandle;
    int ret = 0, i = 0;
    FTB_event_info_t event_info[1] = { {"SIMPLE_EVENT", "INFO"} };

    if (argc > 1) {
        if (strcasecmp(argv[1], "usage") == 0) {
            printf("./ftb_simple_publisher\n");
            exit(0);
        }
    }

    printf("Begin\n");
    /* Specify the client information and call FTB_Connect */
    memset(&cinfo, 0, sizeof(cinfo));
    strcpy(cinfo.event_space, "FTB.FTB_EXAMPLES.SIMPLE");
    strcpy(cinfo.client_subscription_style, "FTB_SUBSCRIPTION_NONE");

    ret = FTB_Connect(&cinfo, &handle);
    if (ret != FTB_SUCCESS) {
        printf("FTB_Connect did not return a success\n");
        exit(-1);
    }

    /*
     * Declare the events that this client wants to publispublishh. The events and
     * their severity are defined in the event_info structure
     */
    ret = FTB_Declare_publishable_events(handle, 0, event_info, 1);
    if (ret != FTB_SUCCESS) {
        printf("FTB_Declare_publishable_events failed ret=%d!\n", ret);
        exit(-1);
    }

    /* Publish 10 events */
    for (i = 0; i < 10; i++) {
        printf("Publish an event\n");
        /* Publish an event. There are no event properties for this event */
        ret = FTB_Publish(handle, "SIMPLE_EVENT", NULL, &ehandle);
        if (ret != FTB_SUCCESS) {
            printf("FTB_Publish did not return a success\n");
            exit(-1);
        }
        printf("Sleeping for 10 seconds\n");
        sleep(10);
    }
    /* Disconnect from FTB */
    printf("FTB_Disconnect\n");
    FTB_Disconnect(handle);

    printf("End\n");
    return 0;
}
static int orte_notifier_ftb_component_query(mca_base_module_t **module, int *priority)
{
    int ret;
    *priority = 0;
    *module = NULL;

    /* Fill the FTB client information structure */
    memset(&ftb_client_info, 0, sizeof(ftb_client_info));
    strcpy(ftb_client_info.event_space, "ftb.mpi.openmpi");

    /* We represent each client with a client name of the form
       openmpi/<hostname>/<PID> as a unique identifier in the
       FTB client namespace */
    sprintf(ftb_client_info.client_name, "ompi%u", orte_process_info.pid);

    sprintf(ftb_client_info.client_jobid, "%u", ORTE_PROC_MY_NAME->jobid);

    strncpy(ftb_client_info.client_subscription_style,
            mca_notifier_ftb_component.subscription_style,
            strlen(mca_notifier_ftb_component.subscription_style));

    /* We try to connect to the FTB backplane now, and we abort
       if we cannot connect for some reason. */
    if (FTB_SUCCESS != (ret = FTB_Connect(&ftb_client_info, &ftb_client_handle))) {
        switch (ret) {
        case FTB_ERR_SUBSCRIPTION_STYLE:
            orte_show_help("help-orte-notifier-ftb.txt",
                           "invalid subscription style",
                           true, ftb_client_info.client_subscription_style);

        case FTB_ERR_INVALID_VALUE:
            orte_show_help("help-orte-notifier-ftb.txt",
                           "invalid value",
                           true);

        default:
            orte_show_help("help-orte-notifier-ftb.txt",
                           "unable to connect",
                           true);
        }
        
        return ORTE_ERR_NOT_FOUND;
    }

    *priority = 10;
    *module = (mca_base_module_t *)&orte_notifier_ftb_module;

    return ORTE_SUCCESS;
}
Ejemplo n.º 5
0
int main(int argc, char *argv[])
{
    FTB_client_handle_t handle;
    FTB_client_t cinfo;
    FTB_subscribe_handle_t shandle;
    FTB_event_handle_t ehandle;
    double event_latency;
    int ret = 0;

    if (argc >= 2) {
        if (strcasecmp(argv[1], "server") == 0) {
            if (argc > 2) {
                fprintf(stderr, "Starting pingpong server. Ignoring additional arguments.\n");
            }
            else {
                fprintf(stderr, "Starting pingpong server\n");
                is_server = 1;
            }
        }
        else if (strcasecmp(argv[1], "client") == 0) {
            if (argc >= 3) {
                is_server = 0;
                int i = 0;
                for (i = 0; i < strlen(argv[2]); i++) {
                    if ((argv[2][i] >= '0') && (argv[2][i] <= '9'))
                        continue;
                    else {
                        printf("Pingpong iterations not a valid number\n");
                        exit(0);
                    }
                }
                iter = atoi(argv[2]);
                if (iter < 1) {
                    printf("Pingpong iterations cannot be less than 1\n");
                    exit(0);
                }
                if (argc > 3) {
                    fprintf(stderr,
                            "Starting pingpong client with iterations %d. Ignoring additional arguments\n",
                            iter);
                }
                else {
                    fprintf(stderr, "Starting pingpong client with iterations %d\n", iter);
                }
            }
            else if (argc < 3) {
                fprintf(stderr, "Number of iterations missing from the client pingpong program\n");
                exit(0);
            }
        }
        else {
            printf
                ("For pingpong server: ./ftb_pingpong server\nFor pingpong client: ./ftb_pingpong client <number of iterations>\n");
            exit(0);
        }
    }
    else {
        printf
            ("For pingpong server: ./ftb_pingpong server\nFor pingpong client: ./ftb_pingpong client <number of iterations>\n");
        exit(0);
    }

    /*
     * Specify the client properties and call FTB_Connect.
     * Note that the pingpong component will subscribe to events using the
     * notification subscription mechanism
     */
    memset(&cinfo, 0, sizeof(cinfo));
    strcpy(cinfo.event_space, "FTB.FTB_EXAMPLES.Pingpong");
    strcpy(cinfo.client_subscription_style, "FTB_SUBSCRIPTION_NOTIFY");
    ret = FTB_Connect(&cinfo, &handle);
    if (ret != FTB_SUCCESS) {
        printf("FTB_Connect is not successful ret=%d\n", ret);
        exit(-1);
    }

    /*
     * This component will publish two events, as defined in the event_info
     * structure below
     */
    FTB_event_info_t event_info[2] = { {"PINGPONG_EVENT_SRV", "INFO"}
    , {"PINGPONG_EVENT_CLI", "INFO"}
    };
    ret = FTB_Declare_publishable_events(handle, 0, event_info, 2);
    if (ret != FTB_SUCCESS) {
        printf("FTB_Declare_publishable_events failed ret=%d!\n", ret);
        exit(-1);
    }

    if (is_server) {
        /*
         * The pingong server subscribes for all event of name
         * PINGPONG_EVENT_CLI and calls the pingpong_server function to
         * handle these events
         */
        ret =
            FTB_Subscribe(&shandle, handle, "event_name=PINGPONG_EVENT_CLI", pingpong_server,
                          (void *) &handle);
        if (ret != FTB_SUCCESS) {
            printf("FTB_Subscribe failed!\n");
            exit(-1);
        }
        signal(SIGINT, Sig_handler);
        signal(SIGTERM, Sig_handler);
    }
    else {
        /*
         * The pingpong client subscribes to all events of event name
         * PINGPONG_EVENT_SRV and calls a function pingpong_client callback
         * function to handle these events
         */
        ret =
            FTB_Subscribe(&shandle, handle, "event_name=PINGPONG_EVENT_SRV", pingpong_client,
                          (void *) &handle);
        if (ret != FTB_SUCCESS) {
            printf("FTB_Subscribe failed!\n");
            exit(-1);
        }
        gettimeofday(&begin, NULL);
        /*
         * After subscription, the client throws the first PINGPONG_EVENT_CLI
         * event. Subsequent events will be thrown by the client and server
         * callback function
         */
        FTB_Publish(handle, "PINGPONG_EVENT_CLI", NULL, &ehandle);
    }

    while (!done) {
        sleep(1);
    }

    /* Calculate the latency at the client side */
    if (!is_server) {
        event_latency = (end.tv_sec - begin.tv_sec) * 1000000 + (end.tv_usec - begin.tv_usec);
        event_latency /= iter;
        printf("Latency: %.3f microseconds\n", event_latency);
    }

    FTB_Disconnect(handle);

    return 0;
}