MCPcopy Create free account
hub / github.com/RenderKit/ospray / gatherFinalErrors

Method gatherFinalErrors

modules/mpi/ospray/fb/DistributedFrameBuffer.cpp:761–823  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

759}
760
761void DFB::gatherFinalErrors()
762{
763 using namespace mpicommon;
764 using namespace rkcommon;
765
766 std::vector<int> tilesFromRank(workerSize(), 0);
767 const int myTileCount = tileIDs.size();
768 gather(&myTileCount,
769 1,
770 MPI_INT,
771 tilesFromRank.data(),
772 1,
773 MPI_INT,
774 masterRank(),
775 mpiGroup.comm)
776 .wait();
777
778 std::vector<char> tileGatherResult;
779 std::vector<int> tileBytesExpected(workerSize(), 0);
780 std::vector<int> processOffsets(workerSize(), 0);
781 const size_t tileInfoSize = sizeof(float) + sizeof(vec2i);
782 if (IamTheMaster()) {
783 size_t recvOffset = 0;
784 for (int i = 0; i < workerSize(); ++i) {
785 processOffsets[i] = recvOffset;
786 tileBytesExpected[i] = tilesFromRank[i] * tileInfoSize;
787 recvOffset += tileBytesExpected[i];
788 }
789 tileGatherResult.resize(recvOffset);
790 }
791
792 std::vector<char> sendBuffer(myTileCount * tileInfoSize);
793 std::memcpy(
794 sendBuffer.data(), tileIDs.data(), tileIDs.size() * sizeof(vec2i));
795 std::memcpy(sendBuffer.data() + tileIDs.size() * sizeof(vec2i),
796 tileErrors.data(),
797 tileErrors.size() * sizeof(float));
798
799 gatherv(sendBuffer.data(),
800 sendBuffer.size(),
801 MPI_BYTE,
802 tileGatherResult.data(),
803 tileBytesExpected,
804 processOffsets,
805 MPI_BYTE,
806 masterRank(),
807 mpiGroup.comm)
808 .wait();
809
810 if (IamTheMaster()) {
811 tasking::parallel_for(workerSize(), [&](int rank) {
812 const vec2i *tileID = reinterpret_cast<vec2i *>(
813 tileGatherResult.data() + processOffsets[rank]);
814 const float *error = reinterpret_cast<float *>(tileGatherResult.data()
815 + processOffsets[rank] + tilesFromRank[rank] * sizeof(vec2i));
816 for (int i = 0; i < tilesFromRank[rank]; ++i) {
817 if (error[i] < (float)inf) {
818 tileErrorRegion.update(tileID[i], error[i]);

Callers

nothing calls this directly

Calls 7

workerSizeFunction · 0.85
masterRankFunction · 0.85
IamTheMasterFunction · 0.85
updateMethod · 0.80
sizeMethod · 0.45
waitMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected