簡體   English   中英

MPI沒有收到與阻止發送/接收時發送的緩沖區相同的緩沖區

[英]MPI not receiving the same buffer I sent with blocking send/recv

我沒有收到與發送相同的緩沖區。 即使阻止發送/接收。 我使用連續分配的緩沖區。

我基本上在每個消息中都更改了該緩沖區中的第一行。 由主機發送后,具有更改的緩沖區可以,但是在從屬設備中接收到緩沖區后,它是錯誤的。

我已經花了15多個小時。 任何幫助表示贊賞。

這是我在1個主控+ 1個從屬情況下的許多消息。 注意主節點上的第一行如何更改,但緩沖區的其余部分保持不變。 在從站側,其余緩沖區也將更改。 它是: 日志消息

size_t order = 0;
floattype **getWork(floattype **work, floattype **tmatrix)
{
     size_t tmp = 1;

     // leading row
     work[0] = tmatrix[order++];

     // get needed rows
     for(size_t row = 1; row < 5; row++)
     {
          work[tmp++] = tmatrix[row];
     }

     return work;
 }


void master(size_t chunksize, floattype **extendedmatrix, size_t paramcount, size_t rowcount)
{
     int ntasks, node;
     size_t reply;
     floattype **tmatrix = transponeMatrix(extendedmatrix, paramcount, rowcount);
     floattype **work = AllocMatrix(rowcount, chunksize + 1);


     MPI_Status status;
     MPI_Comm_size(MPI_COMM_WORLD, &ntasks);


     // init all slaves
     for (node = 1; node < ntasks; ++node) 
     {      
          getWork(work, tmatrix);

          MPI_Send(work[0], 32, MPI_DOUBLE, node, WORKTAG, MPI_COMM_WORLD);
     }

     size_t rpt = 0;

     while (rpt < 3) 
     {
        rpt++;
        MPI_Recv(&reply, 1, MPI_UNSIGNED_LONG, MPI_ANY_SOURCE, INFOTAG, MPI_COMM_WORLD, &status); 

        getWork(work, tmatrix);

        MPI_Send(work[0], 32, MPI_DOUBLE, status.MPI_SOURCE, WORKTAG, MPI_COMM_WORLD);  
     }
 }

void slave(size_t chunksize, size_t paramcount, size_t rowcount)
{
    floattype **received = AllocMatrix(rowcount, chunksize + 1);
        size_t reply = 0;

    MPI_Status status;

    while (true) {
         MPI_Recv(received[0], 32, MPI_DOUBLE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status);

         // lets finish
         if (status.MPI_TAG == DIETAG) {
             FreeMatrix(received);

             return;
         }


         MPI_Send(&reply, 1, MPI_UNSIGNED_LONG, 0, INFOTAG, MPI_COMM_WORLD);
    }

}

錯誤的內存分配...應該使用memcpy()將內存塊從一個緩沖區復制到getWork()中的另一個緩沖區。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM