int main() { printf("\n*** Creating file with datasets & attributes that have scalar dataspaces..."); { hid_t fileid; hid_t fcplid; hid_t dsetid; hid_t dcplid; hid_t scalar_spaceid; hid_t vlstr_typeid, fixstr_typeid; hid_t attid; /* Create scalar dataspace */ if ((scalar_spaceid = H5Screate(H5S_SCALAR)) < 0) ERR; /* Set creation ordering for file, so we can revise its contents later */ if ((fcplid = H5Pcreate(H5P_FILE_CREATE)) < 0) ERR; if (H5Pset_link_creation_order(fcplid, H5P_CRT_ORDER_TRACKED) < 0) ERR; if (H5Pset_attr_creation_order(fcplid, H5P_CRT_ORDER_TRACKED) < 0) ERR; /* Create new file, using default properties */ if ((fileid = H5Fcreate(FILE_NAME, H5F_ACC_TRUNC, fcplid, H5P_DEFAULT)) < 0) ERR; /* Close file creation property list */ if (H5Pclose(fcplid) < 0) ERR; /* Create variable-length string datatype */ if ((vlstr_typeid = H5Tcreate(H5T_STRING, (size_t)H5T_VARIABLE)) < 0) ERR; /* Create fixed-length string datatype */ if ((fixstr_typeid = H5Tcreate(H5T_STRING, (size_t)10)) < 0) ERR; /* Set creation ordering for dataset, so we can revise its contents later */ if ((dcplid = H5Pcreate(H5P_DATASET_CREATE)) < 0) ERR; if (H5Pset_attr_creation_order(dcplid, H5P_CRT_ORDER_TRACKED) < 0) ERR; /* Create scalar dataset with VL string datatype */ if ((dsetid = H5Dcreate2(fileid, VSTR_VAR1_NAME, vlstr_typeid, scalar_spaceid, H5P_DEFAULT, dcplid, H5P_DEFAULT)) < 0) ERR; /* Add attributes to dataset */ if (add_attrs(dsetid) < 0) ERR; /* Close VL string dataset */ if (H5Dclose(dsetid) < 0) ERR; /* Create scalar dataset with fixed-length string datatype */ if ((dsetid = H5Dcreate2(fileid, FSTR_VAR_NAME, fixstr_typeid, scalar_spaceid, H5P_DEFAULT, dcplid, H5P_DEFAULT)) < 0) ERR; /* Add attributes to dataset */ if (add_attrs(dsetid) < 0) ERR; /* Close fixed-length string dataset */ if (H5Dclose(dsetid) < 0) ERR; /* Create scalar dataset with native integer datatype */ if ((dsetid = H5Dcreate2(fileid, INT_VAR_NAME, H5T_NATIVE_INT, scalar_spaceid, H5P_DEFAULT, dcplid, H5P_DEFAULT)) < 0) ERR; /* Add attributes to dataset */ if (add_attrs(dsetid) < 0) ERR; /* Close native integer dataset */ if (H5Dclose(dsetid) < 0) ERR; /* Add attributes to root group */ if (add_attrs(fileid) < 0) ERR; /* Close dataset creation property list */ if (H5Pclose(dcplid) < 0) ERR; /* Close string datatypes */ if (H5Tclose(vlstr_typeid) < 0) ERR; if (H5Tclose(fixstr_typeid) < 0) ERR; /* Close rest */ if (H5Sclose(scalar_spaceid) < 0) ERR; if (H5Fclose(fileid) < 0) ERR; } SUMMARIZE_ERR; printf("*** Checking accessing file through netCDF-4 API..."); { int ncid, varid; size_t len; nc_type type; int ndims; char *vlstr; int x; if (nc_open(FILE_NAME, NC_NOWRITE, &ncid)) ERR; /* Check the global attributes are OK */ if (check_attrs(ncid, NC_GLOBAL) < 0) ERR; /* Verify that the VL string dataset is present and OK */ if (nc_inq_varid(ncid, VSTR_VAR1_NAME, &varid)) ERR; if (varid != 0) ERR; if (nc_inq_vartype(ncid, varid, &type)) ERR; if (type != NC_STRING) ERR; if (nc_inq_varndims(ncid, varid, &ndims)) ERR; if (ndims != 0) ERR; vlstr = NULL; if (nc_get_var(ncid, varid, &vlstr)) ERR; if (NULL != vlstr) ERR; /* Check the variable's attributes are OK */ if (check_attrs(ncid, varid) < 0) ERR; /* Verify that the fixed-length string dataset is present and OK */ if (nc_inq_varid(ncid, FSTR_VAR_NAME, &varid)) ERR; if (varid != 1) ERR; if (nc_inq_vartype(ncid, varid, &type)) ERR; if (type != NC_STRING) ERR; if (nc_inq_varndims(ncid, varid, &ndims)) ERR; if (ndims != 0) ERR; vlstr = NULL; if (nc_get_var(ncid, varid, &vlstr)) ERR; if ('\0' != *vlstr) ERR; free(vlstr); /* Check the variable's attributes are OK */ if (check_attrs(ncid, varid) < 0) ERR; /* Verify that the integer dataset is present and OK */ if (nc_inq_varid(ncid, INT_VAR_NAME, &varid)) ERR; if (varid != 2) ERR; if (nc_inq_vartype(ncid, varid, &type)) ERR; if (type != NC_INT) ERR; if (nc_inq_varndims(ncid, varid, &ndims)) ERR; if (ndims != 0) ERR; x = -1; if (nc_get_var(ncid, varid, &x)) ERR; if (0 != x) ERR; /* Check the variable's attributes are OK */ if (check_attrs(ncid, varid) < 0) ERR; if (nc_close(ncid)) ERR; } SUMMARIZE_ERR; printf("*** Checking revising file through netCDF-4 API..."); { int ncid, varid; char *vlstr; if (nc_open(FILE_NAME, NC_WRITE, &ncid)) ERR; /* Write to the VL string variable */ if (nc_inq_varid(ncid, VSTR_VAR1_NAME, &varid)) ERR; vlstr = NULL; if (nc_put_var(ncid, varid, &vlstr)) ERR; vlstr = malloc(10); *vlstr = '\0'; if (nc_put_var(ncid, varid, &vlstr)) ERR; strcpy(vlstr, "foo"); if (nc_put_var(ncid, varid, &vlstr)) ERR; free(vlstr); /* Write to a VL string attribute */ vlstr = NULL; if (nc_put_att(ncid, varid, VSTR_ATT1_NAME, NC_STRING, 1, &vlstr)) ERR; vlstr = malloc(10); *vlstr = '\0'; if (nc_put_att(ncid, varid, VSTR_ATT1_NAME, NC_STRING, 1, &vlstr)) ERR; strcpy(vlstr, "foo"); if (nc_put_att(ncid, varid, VSTR_ATT1_NAME, NC_STRING, 1, &vlstr)) ERR; free(vlstr); /* Define a new VL string variable */ if (nc_def_var(ncid, VSTR_VAR2_NAME , NC_STRING, 0, NULL, &varid)) ERR; /* Write to the variable's fill-value */ vlstr = NULL; if (nc_put_att(ncid, varid, _FillValue, NC_STRING, 1, &vlstr)) ERR; vlstr = malloc(10); *vlstr = '\0'; if (nc_put_att(ncid, varid, _FillValue, NC_STRING, 1, &vlstr)) ERR; strcpy(vlstr, "foo"); if (nc_put_att(ncid, varid, _FillValue, NC_STRING, 1, &vlstr)) ERR; free(vlstr); if (nc_close(ncid)) ERR; } SUMMARIZE_ERR; FINAL_RESULTS; }
/** * the first step in original MPID_nem_ib_setup_conn() function * open hca, create ptags and create cqs */ int MPID_nem_ib_open_ports() { int mpi_errno = MPI_SUCCESS; /* Infiniband Verb Structures */ struct ibv_port_attr port_attr; struct ibv_device_attr dev_attr; int nHca; /* , curRank, rail_index ; */ MPIDI_STATE_DECL(MPID_STATE_MPIDI_OPEN_HCA); MPIDI_FUNC_ENTER(MPID_STATE_MPIDI_OPEN_HCA); for (nHca = 0; nHca < ib_hca_num_hcas; nHca++) { if (ibv_query_device(hca_list[nHca].nic_context, &dev_attr)) { MPIU_ERR_SETFATALANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s", "Error getting HCA attributes"); } /* detecting active ports */ if (rdma_default_port < 0 || ib_hca_num_ports > 1) { int nPort; int k = 0; for (nPort = 1; nPort <= RDMA_DEFAULT_MAX_PORTS; nPort ++) { if ((! ibv_query_port(hca_list[nHca].nic_context, nPort, &port_attr)) && port_attr.state == IBV_PORT_ACTIVE && (port_attr.lid || (!port_attr.lid && use_iboeth))) { if (use_iboeth) { if (ibv_query_gid(hca_list[nHca].nic_context, nPort, 0, &hca_list[nHca].gids[k])) { /* new error information function needed */ MPIU_ERR_SETFATALANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**fail", "Failed to retrieve gid on rank %d", process_info.rank); } DEBUG_PRINT("[%d] %s(%d): Getting gid[%d][%d] for" " port %d subnet_prefix = %llx," " intf_id = %llx\r\n", process_info.rank, __FUNCTION__, __LINE__, nHca, k, k, hca_list[nHca].gids[k].global.subnet_prefix, hca_list[nHca].gids[k].global.interface_id); } else { hca_list[nHca].lids[k] = port_attr.lid; } hca_list[nHca].ports[k++] = nPort; if (check_attrs(&port_attr, &dev_attr)) { MPIU_ERR_SETFATALANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s", "Attributes failed sanity check"); } } } if (k < ib_hca_num_ports) { MPIU_ERR_SETFATALANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**activeports", "**activeports %d", ib_hca_num_ports); } } else { if(ibv_query_port(hca_list[nHca].nic_context, rdma_default_port, &port_attr) || (!port_attr.lid && !use_iboeth) || (port_attr.state != IBV_PORT_ACTIVE)) { MPIU_ERR_SETFATALANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**portquery", "**portquery %d", rdma_default_port); } hca_list[nHca].ports[0] = rdma_default_port; if (use_iboeth) { if (ibv_query_gid(hca_list[nHca].nic_context, 0, 0, &hca_list[nHca].gids[0])) { /* new error function needed */ MPIU_ERR_SETFATALANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**fail", "Failed to retrieve gid on rank %d", process_info.rank); } if (check_attrs(&port_attr, &dev_attr)) { MPIU_ERR_SETFATALANDJUMP1(mpi_errno, MPI_ERR_OTHER, "**fail", "**fail %s", "Attributes failed sanity check"); } } else { hca_list[nHca].lids[0] = port_attr.lid; } } if (rdma_use_blocking) { hca_list[nHca].comp_channel = ibv_create_comp_channel(hca_list[nHca].nic_context); if (!hca_list[nHca].comp_channel) { MPIU_ERR_SETFATALANDSTMT1(mpi_errno, MPI_ERR_OTHER, goto fn_fail, "**fail", "**fail %s", "cannot create completion channel"); } hca_list[nHca].send_cq_hndl = NULL; hca_list[nHca].recv_cq_hndl = NULL; hca_list[nHca].cq_hndl = ibv_create_cq(hca_list[nHca].nic_context, rdma_default_max_cq_size, NULL, hca_list[nHca].comp_channel, 0); if (!hca_list[nHca].cq_hndl) { MPIU_ERR_SETFATALANDSTMT1(mpi_errno, MPI_ERR_OTHER, goto fn_fail, "**fail", "**fail %s", "cannot create cq"); } if (ibv_req_notify_cq(hca_list[nHca].cq_hndl, 0)) { MPIU_ERR_SETFATALANDSTMT1(mpi_errno, MPI_ERR_OTHER, goto fn_fail, "**fail", "**fail %s", "cannot request cq notification"); }