Example #1
0
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");
	}
}
Example #2
0
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;		
}
Example #3
0
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;
}