=========================== Verteilen mit Überlappungen =========================== Um dem Jacobi-Verfahren noch mehr entgegenzukommen, lohnt es sich beim Verteilen und Einsammeln der Blöcke Überlappungen zu berücksichtigen. Aufgabe ======= Erweitern Sie `scatter_by_block` und `gather_by_block` um den optionalen Parameter `overlap`, der angibt, wie umfangreich der Rand ist bzw. wieweit sich die einzelnen zu verteilenden Blöcke überlappen. Achten Sie darauf, dass bei `overlap > 0` die Operationen nicht mehr symmetrisch sind, da `scatter_by_block` die überlappenden Bereiche mehrfach versendet und die Ränder ebenfalls verteilt, während `gather_by_block` nur jeweils die Innenbereiche verschickt. ---- CODE (type=cpp) ---------------------------------------------------------- template typename std::enable_if< hpc::matvec::IsGeMatrix::value && hpc::matvec::IsGeMatrix::value && std::is_same::value, int>::type scatter_by_block(const MA& A, MB& B, int root, MPI_Comm grid, int dims[2], int coords[2], int overlap = 0) { /* ... */ } template typename std::enable_if< hpc::matvec::IsGeMatrix::value && hpc::matvec::IsGeMatrix::value && std::is_same::value, int>::type gather_by_block(const MA& A, MB& B, int root, MPI_Comm grid, int dims[2], int coords[2], int overlap = 0) { /* ... */ } ------------------------------------------------------------------------------- Vorlage ======= Zum Testen steht eine Vorlage zur Verfügung: :import:session22/scatter-gather5.cpp :navigate: up -> doc:index back -> doc:session22/page08 next -> doc:session22/page10