Git Product home page Git Product logo

domain-decomposed-pde-solver's People

Watchers

 avatar  avatar

Forkers

lacrymose

domain-decomposed-pde-solver's Issues

Alternative Solution: Naively convert mesh into matrix (`createOneToOne` to consturct Tpetra::Map) and Zoltan2's MatrixInput

It just came to me that I could have done this in a different and much easier manner, but I am not sure how efficient it would be compared to current approach. There would be a question as to whether partitioning the graph w.r.t nodes vs elements (and then handling ghosted nodes) will provide equally high-quality partitioning.

Approach

  1. Read in Mesh from Exodus-II
  2. Convert directly to nodal matrix (two nodes are adjacent if they share an element in the mesh) [Tpetra::Map::createOneToOne will give it a default meh distribution]
  3. Use Zoltan2's MatrixInput adapter to partition the matrix

This results in a partitioning being done based on nodes, and not elements. Also, ghosted IDs are handled prior to partitioning the matrix. Overall, I am skeptical that this will result in as high a quality of a partitioning scheme as one that is based on elements.

Improvements List

Leveraging Locality Information for Domain Decomposition

Locality of individual processors can be better leveraged by distributing data based on how close processors are in locality (i.e. hosted on same NUMA socket, same PE, etc.) This results in a lot more local communication at the boundary of each partition of the mesh, which will definitely speed things up a bunch.

For example, in the below mesh, it would be terrible if you had processors that owned far remote corners from each other that were on the same PE, as it would result in a lot of unnecessary communication; instead you would want the processors to cluster together in some way.

Screen Shot 2021-07-14 at 2 22 53 PM

Sharing of the Mesh between Local Processors

Given that Exodus-II API reads the entire file into memory at times, and given that you can have multiple processes on a single PE, it would be greatly beneficial if you had groups of processors that shared memory between them, i.e. for the node mappings, the mappings from one Tpetra::Map to another Tpetra::Map (used when redistributing the graph when export/import is not enough), and on sharing computation with close neighbors, and of course eliding unnecessary communication. This is an extreme optimization that no-doubt will increase the maximum size of the mesh that can be processed.

Exodus-II Improvements: Streaming the Mesh

It would be useful if the Exodus-II API could possibly be streamed in a way that you can read in a portion of the mesh rather than all of it at once.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.