void sep_invalid_compare_atomic(enum fi_datatype dt, enum fi_op op) { ssize_t sz; size_t count; uint64_t operand, op2; if (!supported_compare_atomic_ops[op][dt]) { sz = fi_compare_atomic(tx_ep[0][0], &operand, 1, NULL, &op2, NULL, source, loc_mr, rx_addr[0], (uint64_t)target, mr_key[1], dt, op, target); cr_assert(sz == -FI_ENOENT); sz = fi_compare_atomicvalid(tx_ep[0][0], dt, op, &count); cr_assert(sz == -FI_ENOENT, "fi_atomicvalid() succeeded\n"); } else { sz = fi_compare_atomicvalid(tx_ep[0][0], dt, op, &count); cr_assert(!sz, "fi_atomicvalid() failed\n"); cr_assert(count == 1, "fi_atomicvalid(): bad count\n"); } }
static int is_valid_compare_atomic_op(enum fi_op op) { int ret; ret = fi_compare_atomicvalid(ep, datatype, op, count); if (ret) { fprintf(stderr, "Provider doesn't support %s" " compare atomic operation\n", get_fi_op_name(op)); return 0; } return 1; }
static inline int compare_atomicvalid_DTxOP(int DT_MAX, int OPS_MAX, int DT[], int OPS[], atomic_support_lv atomic_sup) { int i, j, ret = 0; size_t atomic_size; for(i=0; i<DT_MAX; i++) { for(j=0; j<OPS_MAX; j++) { ret = fi_compare_atomicvalid(shmem_transport_ofi_epfd, DT[i], OPS[j], &atomic_size); if(atomicvalid_rtncheck(ret, atomic_size, atomic_sup, SHMEM_OpName[OPS[j]], SHMEM_DtName[DT[i]])) return ret; } } return 0; }