12 research outputs found
Multilayered abstractions for partial differential equations
How do we build maintainable, robust, and performance-portable scientific
applications? This thesis argues that the answer to this software engineering
question in the context of the finite element method is through the use of
layers of Domain-Specific Languages (DSLs) to separate the various concerns in
the engineering of such codes.
Performance-portable software achieves high performance on multiple diverse
hardware platforms without source code changes. We demonstrate that finite
element solvers written in a low-level language are not performance-portable,
and therefore code must be specialised to the target architecture by a code
generation framework. A prototype compiler for finite element variational forms
that generates CUDA code is presented, and is used to explore how good
performance on many-core platforms in automatically-generated finite element
applications can be achieved. The differing code generation requirements for
multi- and many-core platforms motivates the design of an additional
abstraction, called PyOP2, that enables unstructured mesh applications to be
performance-portable.
We present a runtime code generation framework comprised of the Unified Form
Language (UFL), the FEniCS Form Compiler, and PyOP2. This toolchain separates
the succinct expression of a numerical method from the selection and
generation of efficient code for local assembly. This is further decoupled from
the selection of data formats and algorithms for efficient parallel
implementation on a specific target architecture.
We establish the successful separation of these concerns by demonstrating the
performance-portability of code generated from a single high-level source code
written in UFL across sequential C, CUDA, MPI and OpenMP targets. The
performance of the generated code exceeds the performance of comparable
alternative toolchains on multi-core architectures.Open Acces
Firedrake: automating the finite element method by composing abstractions
Firedrake is a new tool for automating the numerical solution of partial differential equations. Firedrake adopts the domain-specific language for the finite element method of the FEniCS project, but with a pure Python runtime-only implementation centered on the composition of several existing and new abstractions for particular aspects of scientific computing. The result is a more complete separation of concerns that eases the incorporation of separate contributions from computer scientists, numerical analysts, and application specialists. These contributions may add functionality or improve performance. Firedrake benefits from automatically applying new optimizations. This includes factorizing mixed function spaces, transforming and vectorizing inner loops, and intrinsically supporting block matrix operations. Importantly, Firedrake presents a simple public API for escaping the UFL abstraction. This allows users to implement common operations that fall outside of pure variational formulations, such as flux limiters
Fatiando a Terra v0.4: Modeling and inversion in geophysics
<p>Fatiando a Terra (Portuguese for Slicing the Earth) is an open-source Python toolkit for modeling and inversion in geophysics. It provides an easy and flexible way to perform and implement geophysical data analysis.</p>
<p>Official website and documentation: http://www.fatiando.org</p>
<p>DOI for this release: http://dx.doi.org/10.5281/zenodo.49087</p>
<p>Main changes to version 0.4 (see http://www.fatiando.org/changelog.html#version-0-4 for a complete list):</p>
<p>* **New** module to obtain a synthetic convolutional seismogram in<br>
聽 `fatiando.seismic.conv`. It can be given a depth model that will be<br>
聽 converted to a time model before generating the synthetic seismogram.<br>
* **Refactor** `fatiando.inversion`. Completely redesigned classes make<br>
聽 implementing new inversions simpler. Subclassing `Misfit` is simpler, with<br>
聽 fewer parameters necessary. The usage of existing inversions has changed<br>
聽 little. A **new dependency** `future` was added to ease the transition to<br>
聽 support Python 3.<br>
* **BUG FIX**: Tesseroid computations failed (silently) when tesseroids were<br>
聽 smaller than 1e-6 degrees on a side (~ 10 cm). Code now ignores these<br>
聽 tesseroids on input and warns the user about it. If a tesseroid becomes<br>
聽 smaller than this during adaptive discretization, the tesseroid effect will<br>
聽 be computed without division.聽 The user will be warned when this happens.<br>
* **New** reduction to the pole and upward continuation with FFT in<br>
聽 `fatiando.gravmag.transform`. The pole reduction allows both remanent and<br>
聽 induced magnetization. Upward continuation is more stable and faster than the<br>
聽 old space domain approach that was implemented.<br>
* **IMPORTANT BUG FIX**: Fixed wrong ordering of nodes in<br>
聽 `fatiando.mesher.PointGrid`. The order of nodes had the same problem as the<br>
聽 regular grids. This was not caught<br>
聽 before because `PointGrid` didn't use `gridder.regular` to generate its<br>
聽 internal regular grid. This is an example of why reuse is a good thing! Tests<br>
聽 now should catch any future problems.<br>
* **IMPORTANT BUG FIX**: `fatiando.gridder.regular` and many other places in<br>
聽 Fatiando where using the wrong convention for x, y dimensions.<br>
聽 x should point North and y East. Thus, a data matrix (regular grid) should<br>
聽 have x varying in the lines and y varying in the columns. This is **oposite**<br>
聽 what we had. This fix also changes the `shape` argument to be `(nx, ny)`<br>
聽 instead of `(ny, nx)`. **Users should be aware of this and double check<br>
聽 their code.**<br>
* More stable derivatives in `fatiando.gravamag.transform`. The horizontal<br>
聽 derivatives default to central finite-differences for greater stability. The<br>
聽 FFT based derivatives use a grid padding to avoid edge effects.<br>
聽 Thanks to [Matteo Niccoli](https://mycarta.wordpress.com/) for suggesting<br>
聽 this fix.<br>
* **Renamed** `fatiando.gravmag.fourier.ansig` to<br>
聽 `fatiando.gravmag.transform.tga`<br>
* **Remove** `fatiando.gravmag.fourier` by moving relevant functions into<br>
聽 `fatiando.gravmag.transform`.<br>
* **New** `seismic_wiggle` and `seismic_image` plotting functions for<br>
聽 seismic data in `fatiando.vis.mpl`<br>
* **Remove** OpenMP parallelism from the `fatiando.gravmag` Cython coded<br>
聽 forward modeling. Caused the majority of our install problems and didn't<br>
聽 offer a great speed up anyway (< 2x). Can be replaced by `multiprocessing`<br>
聽 parallelism without the install problems<br>
* Tesseroid forward modeling functions in `fatiando.gravmag.tesseroid` take<br>
聽 an optional `pool` argument. Use it to pass an open<br>
聽 `multiprocessing.Pool` for the function to use. Useful to avoid processes<br>
聽 spawning overhead when calling the forward modeling many times<br>
* **BUG FIX**: Avoid weird numba error when tesseroid has zero volume. Let to<br>
聽 better sanitizing the input model. Tesseroids with dimensions < 1cm are<br>
聽 ignored because they have almost zero gravitational effect<br>
* Ported the tesseroid forward modeling code from Cython to numba. This is<br>
聽 following the discussion on issue<br>
聽 [#169](https://github.com/fatiando/fatiando/issues/169) to make installing<br>
聽 less of burden by removing the compilation step. The numba code runs just as<br>
聽 fast. New functions support multiprocessing parallelism.<br>
聽 Thanks to new contributor Graham Markall for help with numba.<br>
* **BUG FIX**: Replace `matplotlib.mlab.griddata` with<br>
聽 `scipy.interpolate.griddata` in `fatiando.gridder.interp` to avoid<br>
聽 incompatibilities when using `matplotlib > 1.3`<br>
聽 (at least in MacOS). Nearest neighbor interpolation method flagged as `nn`<br>
聽 was removed. Now it becomes only `nearest`. Also replace `matplotlib`<br>
聽 with `scipy` in `fatiando.mesher.PrismMesh.carvetopo`<br>
* **New class** `fatiando.gravmag.basin2d.PolygonalBasinGravity` for 2D<br>
聽 gravity inversion for the relief of a basin.<br>
* **Removed** package `fatiando.gui`. This was an experimental and temporary<br>
聽 package to explore interactivity.<br>
* Moved `Moulder` to the **new module** `fatiando.gravmag.interactive`.<br>
聽 Completely rewrote the application. It now allows editing, moving, and<br>
聽 deleting polygons, persisting the application to a pickle file and reloading,<br>
聽 etc.</p>
<p>聽</p
Fatiando a Terra v0.5: Modeling and inversion in geophysics
Fatiando a Terra (Portuguese for Slicing the Earth) is an open-source Python toolkit for modeling and inversion in geophysics. It provides an easy and flexible way to perform and implement geophysical data analysis.
Official website and documentation: http://www.fatiando.org
Main changes to version 0.5: http://www.fatiando.org/changelog.html#version-0-
firedrakeproject/ffc: the FEniCS Form Compiler
Modified FFC with nonaffine support for some experiments of the TSFC paper
This release is specifically created to document the version of
Firedrake used in a particular set of experiments. Please do not cite
this as a general source for Firedrake or any of its
dependencies. Instead, refer to
http://www.firedrakeproject.org/publications.htm
OP2/PyOP2: Framework for performance-portable parallel computations on unstructured meshes
<p>This release is specifically created to document the version of
PyOP2 used in a particular set of experiments using
Firedrake. Please do not cite this as a general source for Firedrake
or any of its dependencies. Instead, refer to
https://www.firedrakeproject.org/citing.html</p>
Images of Reality - Interacton space analysis and large-scale design in open office landscape environments
This chapter explores communication patterns and media choices among employees, as well as their connection with the ongoing changes in workplace design. It presents a multiple case study of communication and co-ordination in open landscape office environments. The study was carried out in three different organisations; an advertising firm, a manufacturing business, and an IT development office. In the organisations the work practice was to some degree dependent on possibilities to communicate from various locations among co-workers, both within and outside the office. This paper suggests that utilising more personalised and effective communication media could provide necessary means for more efficient support of co-operative work. The issues of interaction space analysis and large-scale design, i.e. integration with the existing installed base of services and infrastructures, both technical and social, were here put into focus as influencing factors. To Trevino et al鈥檚 (1990) three factors I have added a forth factor, namely company culture that I believe has a great influence on employee鈥檚 media choices. The conclusions were that the organisational culture had deep impact on how the technology features were accepted and incorporated in the work practice for communication purposes
PyCUDA
CUDA integration for Python, plus shiny featuresIf you use this software, please cite it as below