Unverified Commit 0249cf75 authored by Axel Kohlmeyer's avatar Axel Kohlmeyer
Browse files

better and more general version of the previous commit

parent a4de04d8
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -901,7 +901,7 @@ rendezvous_irregular(int n, char *inbuf, int insize, int inorder, int *procs,
  if (inorder) nrvous = irregular->create_data_grouped(n,procs);
  else nrvous = irregular->create_data(n,procs);

  char *inbuf_rvous = (char *) memory->smalloc((bigint) nrvous*insize,
  char *inbuf_rvous = (char *) memory->smalloc((bigint) nrvous*insize+1,
                                               "rendezvous:inbuf");
  irregular->exchange_data(inbuf,insize,inbuf_rvous);

@@ -936,7 +936,7 @@ rendezvous_irregular(int n, char *inbuf, int insize, int inorder, int *procs,
    nout = irregular->create_data_grouped(nrvous_out,procs_rvous);
  else nout = irregular->create_data(nrvous_out,procs_rvous);

  outbuf = (char *) memory->smalloc((bigint) nout*outsize,
  outbuf = (char *) memory->smalloc((bigint) nout*outsize+1,
                                    "rendezvous:outbuf");
  irregular->exchange_data(outbuf_rvous,outsize,outbuf);

@@ -975,9 +975,9 @@ rendezvous_all2all(int n, char *inbuf, int insize, int inorder, int *procs,

  if (!inorder) {
    memory->create(procs_a2a,nprocs,"rendezvous:procs");
    inbuf_a2a = (char *) memory->smalloc((bigint) n*insize,
    inbuf_a2a = (char *) memory->smalloc((bigint) n*insize+1,
                                         "rendezvous:inbuf");
    memset(inbuf_a2a,0,(bigint)(n+1)*insize*sizeof(char));
    memset(inbuf_a2a,0,(bigint)n*insize*sizeof(char));
    memory->create(offsets,nprocs,"rendezvous:offsets");

    for (int i = 0; i < nprocs; i++) procs_a2a[i] = 0;
@@ -1039,7 +1039,7 @@ rendezvous_all2all(int n, char *inbuf, int insize, int inorder, int *procs,

  // all2all comm of inbuf from caller decomp to rendezvous decomp

  char *inbuf_rvous = (char *) memory->smalloc((bigint) (nrvous+1)*insize,
  char *inbuf_rvous = (char *) memory->smalloc((bigint) nrvous*insize+1,
                                               "rendezvous:inbuf");
  memset(inbuf_rvous,0,(bigint) nrvous*insize*sizeof(char));

@@ -1079,7 +1079,7 @@ rendezvous_all2all(int n, char *inbuf, int insize, int inorder, int *procs,
  if (!outorder) {
    memory->create(procs_a2a,nprocs,"rendezvous_a2a:procs");

    outbuf_a2a = (char *) memory->smalloc((bigint) (nrvous_out+1)*outsize,
    outbuf_a2a = (char *) memory->smalloc((bigint) nrvous_out*outsize+1,
                                          "rendezvous:outbuf");
    memory->create(offsets,nprocs,"rendezvous:offsets");

@@ -1139,7 +1139,7 @@ rendezvous_all2all(int n, char *inbuf, int insize, int inorder, int *procs,
  // all2all comm of outbuf from rendezvous decomp back to caller decomp
  // caller will free outbuf

  outbuf = (char *) memory->smalloc((bigint)(nout+1)*outsize,"rendezvous:outbuf");
  outbuf = (char *) memory->smalloc((bigint) nout*outsize+1,"rendezvous:outbuf");

  MPI_Alltoallv(outbuf_a2a,sendcount,sdispls,MPI_CHAR,
                outbuf,recvcount,rdispls,MPI_CHAR,world);