CppTransport 2018.1
Description
2018.1 release of the CppTransport platform for computation of correlation functions generated during an inflationary epoch in the early universe.
2018.1 includes major new features:
- Supports models with a nontrivial field-space metric
- Fully supports integration using arbitrary floating-point types, including
double,long doubleor multiprecision types such as MPFR, either directly or via a Boost.Multiprecision wrapper - New email reporting options during computation
- Improved code generation
- Performance improvements and bug fixes, especially in the translator
- More substantial library of background quantities, including the eta parameter and the mass spectrum
In addition, the database schema for integration data containers has been adjusted slightly. If you encounter the error
SQLite error: no such column: cpu_brand
(normally issued when generating an HTML report) then your repository requires upgrading to the new format. To do so, use the --upgrade flag. Upgrading need be performed only once and leaves the repository backwards-compatible with older versions of CppTransport. While it is possible to use old-format databases with CppTransport 2018.1 if you are not using HTML reports, we recommend that you upgrade all databases.
Platform improvements – translator
- Major rewrite of the translator front-end to modernize the code-base. Much of this code dated back to 2013. This restructuring makes the parser simpler, more robust and easier to extend
- Algebra layer now distinguishes between real and complex fields (although currently all fields are real), meaning that operations like
abs(x)now work as expected - New
lagrangianoption allows selection of canonical of nontrivial-metric models. Newmetrickeyword allows specification of the metric in a similar way to the potential - The translator now understands index variances (ie. covariant or contravariant) and performs validation of these between left- and right-hand sides of indexed expressions
- Enforces that left-hand side indices occur only once, so that the expression represents a valid tensor assignment
- Add
require_versionconstruct (as part of a new top-levelmetadatablock) to enforce a minimum CppTransport version when processing.modelfiles - Improved handling of directives (such as
$IFor$SET). These must now appear on a single line by themselves to avoid ambiguity when unrolling indices, and their indices are validated more carefully - Report resources that are not used before they are reassigned. This can help catch unnecessary computation when developing templates
- New replacement rules for the metric and Riemann tensor combinations needed in models with a nontrivial metric. Also new resource labels for these combinations
- New
$MOMENTAreplacement rule allows access to the momentum vector. Previously, only$FIELDSand$COORDINATESwere available, giving access to the field vector or the full phase-space coordinate vector, respectively - Distinguishes resources with different index variance assignments and can reposition these indices on-the-fly as needed. A command-line switch
--Wrepositioncan be used to identify when on-the-fly repositioning occurs, possibly signalling that the computation can be speeded up by caching the result as a new resource - Now applies common-subexpression-elimination to code deposited as part of a lambda function. In most cases this will improve efficiency and reduce the code size
- New command-line switch
--Wdevelopprovides developer warnings to assist in constructing templates, but allows these warnings to be suppressed in production use. These warnings include unroll-policy violations, enabling easy identification of functions where insufficient resources are available for roll-up to occur - Performance profile data is no longer reported unless explicitly enabled with
--profileswitch. Profiling data is now reported from the lambda manager - Improved handling of roll-up or unroll specifiers, and improved handling of roll-up conflicts
- Improved context information supplied with error or warning reports. To prevent error reports becoming unreadable, processing is now aborted if too many errors occur
- Enables new adaptive Adams-Bashforth-Moulton stepper from odeint-v2, although its performance is not yet tested
- The build process will now download and build GiNaC automatically if a system-wide install is not found
- The odeint-v2 library is downloaded direct from its git repository rather than relying on a version bundled with Boost. This means we can be more aggressive about moving forward as odeint-v2 develops
- Builds are now tested by continuous integration using Travis.CI. Builds correctly with Clang, Intel C++ 18 and GCC v6
- Old, deprecated
transport-objectscode removed
Platform improvements – runtime
- Supports models with nontrivial field-space metric
- Track and report average load for master node and worker processes. Also, track and report database performance in inserts-per-second. This may help in spotting performance degradation or other issues during long running jobs
- Progress reports can now be generated at fixed time intervals or percentage intervals, rather than being fixed at 10%, 20% ... 90% of the complete task. This is done using new
--report-intervaland--report-percentagecommand-line switches. Report intervals can now be specified in seconds, minutes, hours or days rather than just minutes - Progress reports are now written to a separate log file rather than being mixed in with general logging for the master process
- Add option to email progress reports during execution (use
--report-emailto specify one or more email addresses, and--report-whento specify when reports should be issued). Dispatch is done using a separateCppTransport-sendmailscript. New CMake variablesEMAIL_SMTP_SERVER,EMAIL_FROMandEMAIL_PASSWORDcan be specified at build configuration time to set up the script automatically, or a suitable script can be provided separately - Detects a number of common integration problems
- Computations may be vetted for
std::nanandstd::infby definingCPPTRANSPORT_STRICT_FP_TEST. If detected, the integration is flagged as failed - Implements new derived products for mass spectrum and eta parameter
- Failed integration and post-integration groups are now committed by default, rather than being moved to the failure cache. This allows their results to be re-used as the seed for a later integration (perhaps with a different stepper). The pre-2018.1 behaviour can be restored using the command-line switch
--reject-failed - Calculate and report estimated total CPU time during work
- CPU type is recorded in worker information table. To support this the database format has been updated. If you need to upgrade a repository to the new format, use the
--upgradeswitch. Upgrading need be done only once and leaves the repository backwards-compatible with older versions of CppTransport - Time intervals can now be measured in days and weeks, not just seconds, minutes and hours (eg. for checkpoint interval)
- Improved general logging, now tagged with timestamps and severity levels
Bug fixes – translator
- The mass matrix
Mwas previously computed incorrectly. At some point, the formula forMwas replaced by the formula for the scale-matrix (confusingly also calledM) defined in Eq. (3.2b) of arXiv:1210.7800 (b5d7674c) - Fix major bug with use-counting in common-subexpression-elimination. Previously, use-counting was not applied recursively to the arguments of special functions. Instead, the
cpp_cseimplementation simply printed these using GiNaC's own C++ formatting. As a result, required variables might not be deposited to the temporary pool (f7d8a28c) - Fix major bug which could lead to incorrect expression output because of bracketing problems (1b4de464)
- GiNaC functions are now mapped to their C++ versions more correctly. Not all functions are implemented, although most of them are available in Boost.Math and could be included in future (f7d8a28c)
Bug fixes – runtime
--includecommand-line switch to specify include path was unintentionally ignored in configuration files (a4aebd1b)- The Planck mass
M_Pwas not available in code to compute the potential derivatives, leading to compilation errors in models that required it (0375f4b2) - The runtime platform was not properly agnostic regarding the floating point data type (d2e561d3, 1b0ad972, b24e5368, 38497859, 23862fbe)
u3derived product was computed using an incorrect momentum configuration (74138ca7)- Some index-manipulation functions such as
SPECIESandFLATTENwere declared in the globaltransportnamespace, leading to symbol collisions and compilation errors on any attempt to use two or more models simultaneously. These symbols should be declared in a model-local namespace and imported as needed (ec4162bb) - Tidy up formatting of tabulated output to remove unneeded trailing spaces
- Detection of terminal width did not always work correctly (25ede97e)
- CppTransport no longer uses
whichto locate the Python,dot, andCppTransport-sendmailexecutables. This causes a fork which can cause trouble if CppTransport is being used under OpenMPI (1f82131b)
Files
Files
(1.2 MB)
| Name | Size | Download all |
|---|---|---|
|
md5:266f7be19cac91691392606355652ace
|
1.2 MB | Download |
Additional details
Related works
- Is new version of
- 10.5281/zenodo.61237 (DOI)
- 10.5281/zenodo.58710 (DOI)
- 10.5281/zenodo.59403 (DOI)