Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
have last algos use also temporary buffers
[simgrid.git] / src / smpi / colls / gather-ompi.c
index 06a9488..b0da94d 100644 (file)
@@ -77,7 +77,7 @@ smpi_coll_tuned_gather_ompi_binomial(void *sbuf, int scount,
        } else {
            /* root is not on 0, allocate temp buffer for recv,
             * rotate data at the end */
-           tempbuf = (char *) malloc(rtrue_extent + (rcount*size - 1) * rextent);
+           tempbuf = (char *) smpi_get_tmp_recvbuffer(rtrue_extent + (rcount*size - 1) * rextent);
            if (NULL == tempbuf) {
                err= MPI_ERR_OTHER; line = __LINE__; goto err_hndl;
            }
@@ -99,7 +99,7 @@ smpi_coll_tuned_gather_ompi_binomial(void *sbuf, int scount,
        /* other non-leaf nodes, allocate temp buffer for data received from
         * children, the most we need is half of the total data elements due
         * to the property of binimoal tree */
-       tempbuf = (char *) malloc(strue_extent + (scount*size - 1) * sextent);
+       tempbuf = (char *) smpi_get_tmp_sendbuffer(strue_extent + (scount*size - 1) * sextent);
        if (NULL == tempbuf) {
            err= MPI_ERR_OTHER; line = __LINE__; goto err_hndl;
        }
@@ -169,7 +169,7 @@ smpi_coll_tuned_gather_ompi_binomial(void *sbuf, int scount,
                                                 (char *) rbuf,rcount*root,rdtype);
            if (MPI_SUCCESS != err) { line = __LINE__; goto err_hndl; }
 
-           free(tempbuf);
+           smpi_free_tmp_buffer(tempbuf);
        }
     } else if (!(vrank % 2)) {
        /* other non-leaf nodes */
@@ -280,7 +280,6 @@ smpi_coll_tuned_gather_ompi_linear_sync(void *sbuf, int scount,
         COLL_TUNED_COMPUTED_SEGCOUNT( (size_t)first_segment_size, typelng, 
                                       first_segment_count );
 
-        ptmp = (char *) rbuf;
         for (i = 0; i < size; ++i) {
             if (i == rank) {  
                 /* skip myself */
@@ -319,6 +318,7 @@ smpi_coll_tuned_gather_ompi_linear_sync(void *sbuf, int scount,
         
         /* wait all second segments to complete */
         ret = smpi_mpi_waitall(size, reqs, MPI_STATUSES_IGNORE);
+        if (ret != MPI_SUCCESS) { line = __LINE__; goto error_hndl; }
 
         free(reqs);
     }