gaspi_return_t pgaspi_proc_ping (const gaspi_rank_t rank, const gaspi_timeout_t timeout_ms) { gaspi_return_t eret = GASPI_ERROR; gaspi_verify_init("gaspi_proc_ping"); gaspi_verify_rank(rank); if(lock_gaspi_tout (&glb_gaspi_ctx_lock, timeout_ms)) return GASPI_TIMEOUT; eret = gaspi_sn_command(GASPI_SN_PROC_PING, rank, timeout_ms, NULL); unlock_gaspi (&glb_gaspi_ctx_lock); return eret; }
gaspi_return_t pgaspi_notify (const gaspi_segment_id_t segment_id_remote, const gaspi_rank_t rank, const gaspi_notification_id_t notification_id, const gaspi_notification_t notification_value, const gaspi_queue_id_t queue, const gaspi_timeout_t timeout_ms) { gaspi_verify_init("gaspi_notify"); gaspi_verify_segment(segment_id_remote); gaspi_verify_null_ptr(glb_gaspi_ctx.rrmd[segment_id_remote]); gaspi_verify_rank(rank); gaspi_verify_queue(queue); if(notification_value == 0) return GASPI_ERR_INV_NOTIF_VAL; gaspi_return_t eret = GASPI_ERROR; if(lock_gaspi_tout (&glb_gaspi_ctx.lockC[queue], timeout_ms)) return GASPI_TIMEOUT; if( GASPI_ENDPOINT_DISCONNECTED == glb_gaspi_ctx.ep_conn[rank].cstat ) { eret = pgaspi_connect((gaspi_rank_t) rank, timeout_ms); if ( eret != GASPI_SUCCESS) { goto endL; } } eret = pgaspi_dev_notify(segment_id_remote, rank, notification_id, notification_value, queue); glb_gaspi_ctx.ne_count_c[queue]++; endL: unlock_gaspi (&glb_gaspi_ctx.lockC[queue]); return eret; }
gaspi_return_t pgaspi_passive_send (const gaspi_segment_id_t segment_id_local, const gaspi_offset_t offset_local, const gaspi_rank_t rank, const gaspi_size_t size, const gaspi_timeout_t timeout_ms) { gaspi_verify_init("gaspi_passive_send"); gaspi_verify_local_off(offset_local, segment_id_local, size); gaspi_verify_comm_size(size, segment_id_local, segment_id_local, glb_gaspi_ctx.rank, GASPI_MAX_TSIZE_P); gaspi_verify_rank(rank); gaspi_return_t eret = GASPI_ERROR; if( lock_gaspi_tout (&glb_gaspi_ctx.lockPS, timeout_ms) ) { return GASPI_TIMEOUT; } if( GASPI_ENDPOINT_DISCONNECTED == glb_gaspi_ctx.ep_conn[rank].cstat ) { eret = pgaspi_connect((gaspi_rank_t) rank, timeout_ms); if( eret != GASPI_SUCCESS ) { goto endL; } } eret = pgaspi_dev_passive_send(segment_id_local, offset_local, rank, size, glb_gaspi_ctx.ne_count_p, timeout_ms); if( eret == GASPI_ERROR ) { glb_gaspi_ctx.qp_state_vec[GASPI_PASSIVE_QP][rank] = GASPI_STATE_CORRUPT; } endL: unlock_gaspi (&glb_gaspi_ctx.lockPS); return eret; }
gaspi_return_t pgaspi_proc_kill (const gaspi_rank_t rank,const gaspi_timeout_t timeout_ms) { gaspi_return_t eret = GASPI_ERROR; gaspi_verify_init("gaspi_proc_kill"); gaspi_verify_rank(rank); if( rank == glb_gaspi_ctx.rank ) { gaspi_print_error("Invalid rank to kill"); return GASPI_ERR_INV_RANK; } if(lock_gaspi_tout(&glb_gaspi_ctx_lock, timeout_ms)) return GASPI_TIMEOUT; eret = gaspi_sn_command(GASPI_SN_PROC_KILL, rank, timeout_ms, NULL); unlock_gaspi(&glb_gaspi_ctx_lock); return eret; }