int mca_spml_yoda_enable(bool enable) { SPML_VERBOSE(50, "*** yoda ENABLED ****"); if (false == enable) { return OSHMEM_SUCCESS; } OBJ_CONSTRUCT(&mca_spml_yoda.lock, opal_mutex_t); /** *If we get here this is the SPML who get selected for the run. We * should get ownership for the put and get requests list, and * initialize them with the size of our own requests. */ opal_free_list_init (&mca_spml_base_put_requests, sizeof(mca_spml_yoda_put_request_t), opal_cache_line_size, OBJ_CLASS(mca_spml_yoda_put_request_t), 0, opal_cache_line_size, mca_spml_yoda.free_list_num, mca_spml_yoda.free_list_max, mca_spml_yoda.free_list_inc, NULL, 0, NULL, NULL, NULL); opal_free_list_init (&mca_spml_base_get_requests, sizeof(mca_spml_yoda_get_request_t), opal_cache_line_size, OBJ_CLASS(mca_spml_yoda_get_request_t), 0, opal_cache_line_size, mca_spml_yoda.free_list_num, mca_spml_yoda.free_list_max, mca_spml_yoda.free_list_inc, NULL, 0, NULL, NULL, NULL); mca_spml_yoda.enabled = true; /* The following line resolves the issue with BTL tcp and SPML yoda. In this case the * atomic_basic_lock(root_rank) function may behave as DoS attack on root_rank, since * all the procceses will do shmem_int_get from root_rank. These calls would go through * bml active messaging and will trigger replays in libevent on root rank. If the flag * OPAL_ENVLOOP_ONCE is not set then libevent will continously progress constantly * incoming events thus causing root_rank to stuck in libevent loop. */ opal_progress_set_event_flag(OPAL_EVLOOP_NONBLOCK | OPAL_EVLOOP_ONCE); #if OSHMEM_WAIT_COMPLETION_DEBUG == 1 condition_dbg_init(); #endif return OSHMEM_SUCCESS; }
int mca_spml_yoda_enable(bool enable) { SPML_VERBOSE(50, "*** yoda ENABLED ****"); if (false == enable) { return OSHMEM_SUCCESS; } OBJ_CONSTRUCT(&mca_spml_yoda.lock, opal_mutex_t); /** *If we get here this is the SPML who get selected for the run. We * should get ownership for the put and get requests list, and * initialize them with the size of our own requests. */ ompi_free_list_init_new(&mca_spml_base_put_requests, sizeof(mca_spml_yoda_put_request_t), opal_cache_line_size, OBJ_CLASS(mca_spml_yoda_put_request_t), 0, opal_cache_line_size, mca_spml_yoda.free_list_num, mca_spml_yoda.free_list_max, mca_spml_yoda.free_list_inc, NULL ); ompi_free_list_init_new(&mca_spml_base_get_requests, sizeof(mca_spml_yoda_get_request_t), opal_cache_line_size, OBJ_CLASS(mca_spml_yoda_get_request_t), 0, opal_cache_line_size, mca_spml_yoda.free_list_num, mca_spml_yoda.free_list_max, mca_spml_yoda.free_list_inc, NULL ); mca_spml_yoda.enabled = true; #if OSHMEM_WAIT_COMPLETION_DEBUG == 1 condition_dbg_init(); #endif return OSHMEM_SUCCESS; }