From 50803cdbb1c0f82615225ba0fe2532560e989990 Mon Sep 17 00:00:00 2001 From: WickedJack99 Date: Sat, 21 Jun 2025 13:44:06 +0200 Subject: [PATCH] Finished exc3 --- lab12/exc3/hrc | Bin 0 -> 105704 bytes lab12/exc3/hybrid_ring_com.cpp | 47 +++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100755 lab12/exc3/hrc create mode 100644 lab12/exc3/hybrid_ring_com.cpp diff --git a/lab12/exc3/hrc b/lab12/exc3/hrc new file mode 100755 index 0000000000000000000000000000000000000000..4586fe8d8c40a3830b470fad42d2c3472c82c4f8 GIT binary patch literal 105704 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

&3e=hA%8LphLa5bbYCO3q>ko-qLfv*eAoy> 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 literal 0 HcmV?d00001 diff --git a/lab12/exc3/hybrid_ring_com.cpp b/lab12/exc3/hybrid_ring_com.cpp new file mode 100644 index 0000000..1c67db7 --- /dev/null +++ b/lab12/exc3/hybrid_ring_com.cpp @@ -0,0 +1,47 @@ +#include +#include +#include +#include + +int main(int argc, char *argv[]) +{ + int required = MPI_THREAD_MULTIPLE; + int provided; + MPI_Init_thread(&argc, &argv, required, &provided); + + int rank; + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + + int numProc; + MPI_Comm_size(MPI_COMM_WORLD, &numProc); + + int leftNeighbor = (rank - 1) % numProc; + int rightNeighbor = (rank + 1) % numProc; + + std::ofstream outfile("rank_" + std::to_string(rank) + ".txt"); + +#pragma omp parallel + { + int threadId = omp_get_thread_num(); + + std::vector rankThreadId = {rank, threadId}; + std::vector recvBuffer(2); + + MPI_Request sendReq, recvReq; + MPI_Status statusRec, statusSend; + MPI_Isend(rankThreadId.data(), 2, MPI_INT, rightNeighbor, threadId, MPI_COMM_WORLD, &sendReq); + MPI_Irecv(recvBuffer.data(), 2, MPI_INT, leftNeighbor, threadId, MPI_COMM_WORLD, &recvReq); + MPI_Wait(&sendReq, &statusSend); + +#pragma omp critical + outfile << " sent (" << rankThreadId[0] << "," << rankThreadId[1] << ")" << std::endl; + + MPI_Wait(&recvReq, &statusRec); +#pragma omp critical + outfile << " received (" << recvBuffer[0] << "," << recvBuffer[1] << ")" << std::endl; + } + + outfile.close(); + + MPI_Finalize(); +} \ No newline at end of file