Beispiel #1
0
value caml_mpi_group_translate_ranks(value group1, value ranks, value group2)
{
  int n = Wosize_val(ranks);
  int * ranks1 = stat_alloc(n * sizeof(int));
  int * ranks2 = stat_alloc(n * sizeof(int));
  int i;
  value res;

  for (i = 0; i < n; i++) ranks1[i] = Int_val(Field(ranks, i));
  MPI_Group_translate_ranks(Group_val(group1), n, ranks1,
                            Group_val(group2), ranks2);
  res = alloc(n, 0);
  for (i = 0; i < n; i++) Field(res, i) = Val_int(ranks2[i]);
  stat_free(ranks1);
  stat_free(ranks2);
  return res;
}
Beispiel #2
0
value caml_mpi_alloc_group(MPI_Group g)
{
  value res =
    alloc_final(1 + (sizeof(MPI_Group) + sizeof(value) - 1) / sizeof(value),
                caml_mpi_finalize_group, 1, 100);
  Group_val(res) = g;
  return res;
}
Beispiel #3
0
value caml_mpi_group_range_excl(value group, value vranges)
{
  int num;
  int (*ranges)[3];
  MPI_Group newgroup;
  caml_mpi_extract_ranges(vranges, &num, &ranges);
  MPI_Group_range_excl(Group_val(group), num, ranges, &newgroup);
  stat_free(ranges);
  return caml_mpi_alloc_group(newgroup);
}
Beispiel #4
0
value caml_mpi_group_incl(value group, value vranks)
{
  MPI_Group newgroup;
  int n = Wosize_val(vranks);
  int * ranks = stat_alloc(n * sizeof(int));
  int i;

  for (i = 0; i < n; i++) ranks[i] = Int_val(Field(vranks, i));
  MPI_Group_incl(Group_val(group), n, ranks, &newgroup);
  stat_free(ranks);
  return caml_mpi_alloc_group(newgroup);
}
Beispiel #5
0
value caml_mpi_group_intersection(value group1, value group2)
{
  MPI_Group group;
  MPI_Group_intersection(Group_val(group1), Group_val(group2), &group);
  return caml_mpi_alloc_group(group);
}
Beispiel #6
0
value caml_mpi_group_difference(value group1, value group2)
{
  MPI_Group group;
  MPI_Group_difference(Group_val(group1), Group_val(group2), &group);
  return caml_mpi_alloc_group(group);
}
Beispiel #7
0
value caml_mpi_group_rank(value group)
{
  int size;
  MPI_Group_rank(Group_val(group), &size);
  return Val_int(size);
}
Beispiel #8
0
static void caml_mpi_finalize_group(value v)
{
  MPI_Group_free(&Group_val(v));
}
Beispiel #9
0
value caml_mpi_comm_create(value comm, value group)
{
  MPI_Comm newcomm;
  MPI_Comm_create(Comm_val(comm), Group_val(group), &newcomm);
  return caml_mpi_alloc_comm(newcomm);
}