As announced in our weekly phone calls, I just committed a set of changes to Carpet. These changes will in the future significantly improve parallel scaling, but also touch much of the low-level code. There is thus a certain inherent danger that something broke. However, I expect that these build and run fine.
The performance-improving features are disabled by default, and require setting compile-time flags to enable them. This will replace the current bboxset set class by a new implementation build on a tree structure. With this improvement, I was able to run Carpet on 260k cores (8k nodes) on Blue Waters.
For the curious cats among us: these flags are
-DCARPET_ENABLE_BBOXSET2: build (but do not use) the new class (for testing)
-DCARPET_USE_BBOXSET2: use the new class instead of the old (if enabled)
The new implementation requires certain C++11 features that may not be present on older compilers. In this case, you may have to set some of the macros below to activate work-arounds. You may also need to build the Boost library.
-DCARPET_AVOID_LAMBDA: Use macros instead of lambda expressions
Lambda expressions simplify writing iterators for data structures.
-DCARPET_USE_BOOST_FOREACH: Use Boost's FOREACH instead of C++11 range-based for loops
Range-based for loops are syntactic sugar for using iterators that (finally!) lead to shorter, simpler code when using iterators.
-DCARPET_USE_BOOST_SHARED_PTR: Use Boost's shared_ptr instead of the C++11 shared_ptr
shared_ptr automatically call delete when necessary when pointers go out of scope, simplifying code and increasing safety.