value caml_mpi_broadcast_floatarray(value data, value root, value comm) { mlsize_t len = Wosize_val(data) / Double_wosize; double * d = caml_mpi_input_floatarray(data, len); MPI_Bcast(d, len, MPI_DOUBLE, Int_val(root), Comm_val(comm)); caml_mpi_commit_floatarray(d, data, len); return Val_unit; }
value caml_mpi_scan_floatarray(value data, value result, value op, value comm) { mlsize_t len = Wosize_val(data) / Double_wosize; double * d = caml_mpi_input_floatarray(data, len); double * res = caml_mpi_output_floatarray(result, len); MPI_Scan(d, res, len, MPI_DOUBLE, reduce_floatop[Int_val(op)], Comm_val(comm)); caml_mpi_free_floatarray(d); caml_mpi_commit_floatarray(res, result, len); return Val_unit; }
value caml_mpi_allgather_float(value data, value result, value comm) { mlsize_t len = Wosize_val(data) / Double_wosize; double * d = caml_mpi_input_floatarray(data, len); double * res = caml_mpi_output_floatarray(result, reslen); MPI_Allgather(d, len, MPI_DOUBLE, res, len, MPI_DOUBLE, Comm_val(comm)); caml_mpi_free_floatarray(d); caml_mpi_commit_floatarray(res, result, reslen); return Val_unit; }
value caml_mpi_scatter_floatarray(value source, value dest, value root, value comm) { mlsize_t len = Wosize_val(dest) / Double_wosize; double * src = caml_mpi_input_floatarray_at_node(source, srclen, root, comm); double * dst = caml_mpi_output_floatarray(dest, len); MPI_Scatter(src, len, MPI_DOUBLE, dst, len, MPI_DOUBLE, Int_val(root), Comm_val(comm)); caml_mpi_free_floatarray(src); caml_mpi_commit_floatarray(dst, dest, len); return Val_unit; }
value caml_mpi_gather_float(value data, value result, value root, value comm) { mlsize_t len = Wosize_val(data) / Double_wosize; mlsize_t reslen = Wosize_val(result) / Double_wosize; double * d = caml_mpi_input_floatarray(data, len); double * res = caml_mpi_output_floatarray_at_node(result, reslen, root, comm); MPI_Gather(d, len, MPI_DOUBLE, res, len, MPI_DOUBLE, Int_val(root), Comm_val(comm)); caml_mpi_free_floatarray(d); caml_mpi_commit_floatarray(res, result, reslen); return Val_unit; }