MCPcopy Create free account
hub / github.com/SeisSol/SeisSol / initializeMemoryLayout

Method initializeMemoryLayout

src/Initializer/MemoryManager.cpp:771–848  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

769}
770
771void seissol::initializer::MemoryManager::initializeMemoryLayout()
772{
773 // correct LTS-information in the ghost layer
774 correctGhostRegionSetups();
775
776 // derive the layouts of the layers
777 deriveLayerLayouts();
778
779 for (unsigned tc = 0; tc < m_ltsTree.numChildren(); ++tc) {
780 TimeCluster& cluster = m_ltsTree.child(tc);
781
782 size_t l_ghostSize = 0;
783 size_t l_copySize = 0;
784 size_t l_interiorSize = 0;
785#ifdef USE_MPI
786 for( unsigned int l_region = 0; l_region < m_meshStructure[tc].numberOfRegions; l_region++ ) {
787 l_ghostSize += sizeof(real) * tensor::Q::size() * m_numberOfGhostRegionBuffers[tc][l_region];
788 l_ghostSize += sizeof(real) * yateto::computeFamilySize<tensor::dQ>() * m_numberOfGhostRegionDerivatives[tc][l_region];
789
790 l_copySize += sizeof(real) * tensor::Q::size() * m_numberOfCopyRegionBuffers[tc][l_region];
791 l_copySize += sizeof(real) * yateto::computeFamilySize<tensor::dQ>() * m_numberOfCopyRegionDerivatives[tc][l_region];
792 }
793#endif // USE_MPI
794 l_interiorSize += sizeof(real) * tensor::Q::size() * m_numberOfInteriorBuffers[tc];
795 l_interiorSize += sizeof(real) * yateto::computeFamilySize<tensor::dQ>() * m_numberOfInteriorDerivatives[tc];
796
797 cluster.child<Ghost>().setBucketSize(m_lts.buffersDerivatives, l_ghostSize);
798 cluster.child<Copy>().setBucketSize(m_lts.buffersDerivatives, l_copySize);
799 cluster.child<Interior>().setBucketSize(m_lts.buffersDerivatives, l_interiorSize);
800 }
801
802 deriveFaceDisplacementsBucket();
803
804 m_ltsTree.allocateBuckets();
805
806 // initialize the internal state
807 initializeBuffersDerivatives();
808
809 // initialize face neighbors
810 for (unsigned tc = 0; tc < m_ltsTree.numChildren(); ++tc) {
811 TimeCluster& cluster = m_ltsTree.child(tc);
812#ifdef USE_MPI
813 initializeFaceNeighbors(tc, cluster.child<Copy>());
814#endif
815 initializeFaceNeighbors(tc, cluster.child<Interior>());
816 }
817
818#ifdef ACL_DEVICE
819 void* stream = device::DeviceInstance::getInstance().api->getDefaultStream();
820 for (auto& layer : m_ltsTree.leaves()) {
821 if (layer.getBucketSize(m_lts.buffersDerivatives) > 0) {
822 void* data = layer.bucket(m_lts.buffersDerivatives, seissol::initializer::AllocationPlace::Device);
823 device::DeviceInstance::getInstance().algorithms.touchMemory(
824 reinterpret_cast<real*>(data),
825 layer.getBucketSize(m_lts.buffersDerivatives) / sizeof(real),
826 true, stream);
827 }
828 }

Callers 1

initializeMemoryLayoutFunction · 0.80

Calls 11

sizeFunction · 0.85
touchBuffersDerivativesFunction · 0.85
numChildrenMethod · 0.80
setBucketSizeMethod · 0.80
allocateBucketsMethod · 0.80
leavesMethod · 0.80
getBucketSizeMethod · 0.80
bucketMethod · 0.80
allocateScratchPadsMethod · 0.80
varMethod · 0.45
getNumberOfCellsMethod · 0.45

Tested by

no test coverage detected