Version 7 (modified by 12 years ago) ( diff ) | ,
---|
Threading in Scrambler
Level Threading
Algorithmically the cleanest, this requires a thread safe communication library. I'm also not sure if Hypre is thread safe.
Level Advance Threading
This approach puts all of the communication calls in one control thread and splits of threads to perform only the Advance. This allows global load balancing of the advance stage instead of level by level balancing - however this does not hold true for the elliptic solves… Althought currently every processor is used for every elliptic solve so this requires hypre to properly load balance.
Pseudo Threading (Scheduling)
This approach is algorithmically the most complicated and mimics to some extent Level Advance Threading within the program itself by estimating the time required for the advance stages and doing the switching between the level advances during each finest level advance stage. While this does not require any third party threading libraries, it does not allow for lower level advances to be performed during higher level control routine waits. For more details on the scheduling see ScramblerScheduling