Giter Club home page Giter Club logo

computationalradiationphysics / picongpu Goto Github PK

View Code? Open in Web Editor NEW
678.0 53.0 213.0 49.6 MB

Performance-Portable Particle-in-Cell Simulations for the Exascale Era :sparkles:

Home Page: https://picongpu.readthedocs.io

License: Other

Shell 5.76% C++ 76.80% Python 15.18% Awk 0.04% Gnuplot 0.02% CMake 1.38% Jupyter Notebook 0.14% Mustache 0.67%
laser plasma physics gpu physics-simulation gpu-computing particle-accelerator particle-in-cell pic research

picongpu's Introduction

PIConGPU - Particle-in-Cell Simulations for the Exascale Era

Code Status dev Documentation Status Doxygen Language License PIConGPU License PMacc

PIConGPU Presentation Video PIConGPU Release

Introduction

PIConGPU is a fully relativistic, manycore, 3D3V particle-in-cell (PIC) code. The Particle-in-Cell algorithm is a central tool in plasma physics. It describes the dynamics of a plasma by computing the motion of electrons and ions in the plasma based on Maxwell's equations.

PIConGPU implements various numerical schemes to solve the PIC cycle. Its features for the electro-magnetic PIC algorithm include:

  • a central or Yee-lattice for fields
  • particle pushers that solve the equation of motion for charged and neutral particles, e.g., the Boris- and the Vay-Pusher
  • Maxwell field solvers, e.g. Yee's and Lehe's scheme
  • rigorously charge conserving current deposition schemes, such as Esirkepov and EZ (Esirkepov meets ZigZag)
  • macro-particle form factors ranging from NGP (0th order), CIC (1st), TSC (2nd), PQS (3rd) to PCS (4th)

and the electro-magnetic PIC algorithm is further self-consistently coupled to:

Besides the electro-magnetic PIC algorithm and extensions to it, we developed a wide range of tools and diagnostics, e.g.:

  • online, far-field radiation diagnostics for coherent and incoherent radiation emitted by charged particles
  • full restart and output capabilities via openPMD, including parallel HDF5
  • 2D and 3D live view and diagnostics tools
  • a large selection of extensible online-plugins

As one of our supported compute platforms, GPUs provide a computational performance of several TFLOP/s at considerable lower invest and maintenance costs compared to multi CPU-based compute architectures of similar performance. The latest high-performance systems (TOP500) are enhanced by accelerator hardware that boost their peak performance up to the multi-PFLOP/s level. With its outstanding performance and scalability to more than 18'000 GPUs, PIConGPU was one of the finalists of the 2013 Gordon Bell Prize.

PIConGPU is developed and maintained by the Computational Radiation Physics Group at the Institute for Radiation Physics at HZDR in close collaboration with the Center for Information Services and High Performance Computing (ZIH) of the Technical University Dresden (TUD). We are a member of the Dresden GPU Center of Excellence that cooperates on a broad range of scientific GPU and manycore applications, workshops and teaching efforts.

Attribution

PIConGPU is a scientific project. If you present and/or publish scientific results that used PIConGPU, you should set a reference to show your support.

Our according up-to-date publication at the time of your publication should be inquired from:

Please also consider adding yourself to our community map. We would love to hear from you!

Oral Presentations

The following slide should be part of oral presentations. It is intended to acknowledge the team maintaining PIConGPU and to support our community:

(coming soon) presentation_picongpu.pdf (svg version, key note version, png version: 1920x1080 and 1024x768)

Software License

PIConGPU is licensed under the GPLv3+. Furthermore, you can develop your own particle-mesh algorithms based on our general library PMacc that is shipped alongside PIConGPU. PMacc is dual licensed under both the GPLv3+ and LGPLv3+. For a detailed description, please refer to LICENSE.md


Install

See our notes in INSTALL.rst.

Users

Dear User, we hereby emphasize that we are still actively developing PIConGPU at great speed and do, from time to time, break backwards compatibility.

When using this software, please stick to the latest release or use the dev branch containing the latest changes. It also contains a file CHANGELOG.md with the latest changes (and how to update your simulations). Read it first before updating between two versions! Also, we add a git tag according to a version number for each release.

For any questions regarding the usage of PIConGPU please do not contact the developers and maintainers directly.

Instead, please open an issue on GitHub.

Before you post a question, browse the PIConGPU documentation, wiki and the issue tracker to see if your question has been answered, already.

PIConGPU is a collaborative project. We thus encourage users to engage in answering questions of other users and post solutions to problems to the list. A problem you have encountered might be the future problem of another user.

In addition, please consider using the collaborative features of GitHub if you have questions or comments on code or documentation. This will allow other users to see the piece of code or documentation you are referring to.

Main ressources are in our online manual, the user section of our wiki, documentation files in .md (Markdown) and .rst (reStructuredText) format in this repository and a getting started video. Feel free to visit picongpu.hzdr.de to learn more about the PIC algorithm.

Software Upgrades

PIConGPU ships new and frequent changes to the code in the development branch dev.

From time to time we publish a new release of PIConGPU. Before you pull the changes in, please read our ChangeLog! You may have to update some of your simulation .param and .cfg files by hand since PIConGPU is an active project and new features often require changes in input files. Additionally, a full description of new features and fixed bugs in comparison to the previous release is provided in that file.

In case you decide to use new, potentially buggy and experimental features from our dev branch, be aware that you must participate or at least follow the development yourself. Syntax changes and in-development bugs will not be announced outside of their according pull requests and issues.

Before drafting a new release, we open a new release-* branch from dev with the * being the version number of the upcoming release. This branch only receives bug fixes (feature freeze) and users are welcome to try it out (however, the change log and a detailed announcement might still be missing in it).

Developers

How to participate

See CONTRIBUTING.md

If you like to jump in right away, see
open "good first issue" issues

Active Team

Scientific Supervision

  • Dr. Michael Bussmann

Maintainers* and core developers

  • Dr. Sergei Bastrakov*
  • Finn-Ole Carstens
  • Dr. Alexander Debus
  • Dr. Marco Garten*
  • Dr. Axel Huebl*
  • Brian Edward Marre
  • Pawel Ordyna
  • Dr. Richard Pausch*
  • Franz Poeschel
  • Dr. Klaus Steiniger*
  • Rene Widera*

Former Members, Contributions and Thanks

The PIConGPU Team expresses its gratitude to:

Florian Berninger, Heiko Burau, Fabia Dietrich, Robert Dietrich, Carlchristian Eckert, Simeon Ehrig, Wen Fu, Ph.D., Alexander Grund, Sebastian Hahn, Anton Helm, Wolfgang Hoehnig, Dr.-Ing. Guido Juckeland, Jeffrey Kelling, Maximilian Knespel, Dr. Remi Lehe, Felix Schmitt, Frank Winkler, Benjamin Schneider, Joseph Schuchart, Conrad Schumann, Stefan Tietze, Marija Vranic, Ph.D., Benjamin Worpitz, Erik Zenker, Sophie Rudat, Sebastian Starke, Alexander Matthes, Kseniia Bastrakova, Bernhard Manfred Gruber, Jakob Trojok, Anton Lebedev, Nils Prinz, Felix Meyer, Lennert Sprenger, Manhui Wang, Maxence Thevenet, Ilja Goethel, Mika Soren Voß, Lei Bifeng, Andrei Berceanu, Felix Meyer, Lennert Sprenger and Nico Wrobel.

Kudos to everyone, mentioned or unmentioned, who contributed further in any way!


image of an lwfa image of our strong scaling

picongpu's People

Contributors

anton-le avatar ax3l avatar benjaminw3 avatar bernhardmgruber avatar beyondespresso avatar brianmarre avatar c-schumann-zih avatar chillenzer avatar codings3b avatar erikzenker avatar f-schmitt avatar felixtud avatar finnolec avatar flamefire avatar franzpoeschel avatar hightower8083 avatar ikbuibui avatar jkelling avatar kossag14 avatar kseniabastrakova avatar lennertsprenger avatar n01r avatar pordyna avatar prometheuspi avatar psychocoderhpc avatar s9105947 avatar sbastrakov avatar slizzered avatar steindev avatar theziz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

picongpu's Issues

Examples: Readme and runtime tests

Write a Readme file for each example.
The Readme should contain

  • a description
  • tests to run (on a cluster)
  • commands for post processing
  • files to compare (within a separate git repository)

Progress:

documentation / tests

RCF Stack Plugin

Build a plugin for a single rcf stack

  • transversal 2D plane with scalar energy information with restriction to the two transversal aperture angles
  • options:
    • energyMin/Max range
    • stack: normal vector, spatial bins (number and size), distance
  • rcf multi: allows defining the above plugin multiple times

Stability Check: Particle2Cell Modules

  • Check if the problems in the LiveVisualization with Density and EnergyDensity came from the Particle2Cell algorithms or from wrong usage (Note: could be caused by #174 setValue bug)
  • Check Phase Space Plugin stability

LineSliceField: Gather before dump

Gather the local arrays of the LinceSliceFields plugin before dumping it to a file.
Write in a parallel hdf5 file.

Btw: may we can find a more intuitive name for that plugin...

HDF5 Meta Data

Add missing meta data:

  • GRID data needs self-descriptive edge lengths, too
    • example: vacuum simulations -> no info on CELL_WIDTH, ... so far
  • POLYDATA: unit for momentum is wrong
    • dimension: velocity * mass
    • unit: UNIT_SPEED * UNIT_MASS
  • time step: DELTA_T
  • maybe add the seven base units (see output)
    • UNIT_LENGTH, UNIT_MASS, UNIT_TIME, UNIT_CHARGE/UNIT_CURRENT, UNIT_TEMPERATURE
    • skip luminous intensity and amount of substance ?
  • ...

Species: Attributes and Participation in Algorithms

Species (Electrons and Ions) should select their participation in algorithm XYZ in a parameter file, but not by a #define.

The definition of additional attributes should be automatically triggered, e.g. by the radiation plugin, but a user should have the possibility to manually add this attribute even without an algorithm requiring it.

Available attributes will be provided by PIConGPU, plugins can select out of them. (If an attribute is missing, a plugin developer should propose a new particle attributes to PIConGPU in general, so other plugins can use it too).

Example:

  • Electrons: Vay Push + Radiation + momentum_mt1(*) + localB + localE + shape:PSQ
  • Ions: Boris Push + momentum_mt1+ shape:TSC

(*) implicit added by Radiation; if selected explicit, add only once

Comment:

  • localB, localE could be attributes remembering the last E and B field a particle saw during its push (this could also be time averaged over N steps)

Integrate all Singletons in master Environment

There should be only one singleton (Environment) in PIC. All previous singletons can only be accessed via Environment.

This allows to implement a stable init/deinit point and order.
We would have a stable point where to put cudaDeviceReset.

Parallel HDF5 Capabilities

We are going to change our file I/O strategy to parallel hdf5.

Our I/O library libSplash is undergoing an update to add this feature.

Major updates:

  • 1 parallel written file per timestep (now: n files for all timesteps)

Rewrite gbAnalysis tools for parallel splash? :

  • Algorithmic building blocks like forEachCell (fields) and forEachParticle ( parallel c++ analysis interfaces for mpi)
  • splash2txt -> move back to libSplash

Later (1.0?):

  • New high level interfaces for equal spaced field data and particle data

Configure Script: if target does not exist, warn or abort

The configure script, called with a invalid parameter like configure ../pathTypo/, should either give a warning about a non-existent path or abort.

Pretending the path in $1 is valid and compiling the default all-disabled example is not a good idea.

Compile errors with gcc/4.7.1

PIC does NOT compile with gcc 4.7.1 (tested on machine joker).
Compile error is:
[ 83%] Built target cuda_memtest /home.local/others/fschmitt/pic/picongpu/src/libPMacc/include/mappings/kernel/ExchangeMapping.hpp: In instantiation of ‘PMacc::DataSpace<DIM> PMacc::ExchangeMapping<areaType, baseClass<DIM, SuperCellSize_> >::getGridDim() [with unsigned int areaType = 4u; baseClass = PMacc::MappingDescription; unsigned int DIM = 3u; SuperCellSize_ = PMacc::TVec<8u, 8u, 4u>]’: /home.local/others/fschmitt/pic/picongpu/src/picongpu/include/fields/FieldJ.tpp:120:31: required from here /home.local/others/fschmitt/pic/picongpu/src/libPMacc/include/mappings/kernel/ExchangeMapping.hpp:97:87: error: ‘reduce’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] /home.local/others/fschmitt/pic/picongpu/src/libPMacc/include/mappings/kernel/ExchangeMapping.hpp:97:87: note: declarations in dependent base ‘PMacc::CudaGridDimRestrictions<3u>’ are not found by unqualified lookup /home.local/others/fschmitt/pic/picongpu/src/libPMacc/include/mappings/kernel/ExchangeMapping.hpp:97:87: note: use ‘this->reduce’ instead /home.local/others/fschmitt/pic/picongpu/src/libPMacc/include/mappings/kernel/AreaMapping.hpp: In instantiation of ‘PMacc::DataSpace<DIM> PMacc::AreaMapping<areaType, baseClass<DIM, SuperCellSize_> >::getGridDim() [with unsigned int areaType = 3u; baseClass = PMacc::MappingDescription; unsigned int DIM = 3u; SuperCellSize_ = PMacc::TVec<8u, 8u, 4u>]’: /home.local/others/fschmitt/pic/picongpu/src/picongpu/include/plugins/SumCurrents.hpp:190:246: required from here /home.local/others/fschmitt/pic/picongpu/src/libPMacc/include/mappings/kernel/AreaMapping.hpp:72:98: error: ‘reduce’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] /home.local/others/fschmitt/pic/picongpu/src/libPMacc/include/mappings/kernel/AreaMapping.hpp:72:98: note: declarations in dependent base ‘PMacc::CudaGridDimRestrictions<3u>’ are not found by unqualified lookup /home.local/others/fschmitt/pic/picongpu/src/libPMacc/include/mappings/kernel/AreaMapping.hpp:72:98: note: use ‘this->reduce’ instead /home.local/others/fschmitt/pic/picongpu/src/libPMacc/include/mappings/kernel/StrideMapping.hpp: In instantiation of ‘PMacc::DataSpace<DIM> PMacc::StrideMapping<areaType, stride, baseClass<DIM, SuperCellSize_> >::getGridDim() [with unsigned int areaType = 3u; unsigned int stride = 3u; baseClass = PMacc::MappingDescription; unsigned int DIM = 3u; SuperCellSize_ = PMacc::TVec<8u, 8u, 4u>]’: /home.local/others/fschmitt/pic/picongpu/src/picongpu/include/fields/FieldJ.tpp:212:125: required from ‘void picongpu::FieldJ::computeCurrent(ParticlesClass&, uint32_t) [with unsigned int AREA = 3u; ParticlesClass = picongpu::Particles<boost::mpl::vector2<picongpu::ElectronMethods<>, picongpu::ParticlesData<> > >; uint32_t = unsigned int]’ /home.local/others/fschmitt/pic/picongpu/src/picongpu/include/simulationControl/MySimulation.hpp:372:131: required from here /home.local/others/fschmitt/pic/picongpu/src/libPMacc/include/mappings/kernel/StrideMapping.hpp:75:114: error: ‘reduce’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive] /home.local/others/fschmitt/pic/picongpu/src/libPMacc/include/mappings/kernel/StrideMapping.hpp:75:114: note: declarations in dependent base ‘PMacc::CudaGridDimRestrictions<3u>’ are not found by unqualified lookup /home.local/others/fschmitt/pic/picongpu/src/libPMacc/include/mappings/kernel/StrideMapping.hpp:75:114: note: use ‘this->reduce’ instead

New Memory Controller

Add new memory controller.

Tasks:

  • Patch bugs in mem controller
  • report fixed version back to the original developers (they will be happy about that)
  • select the memory controller to use in memory.param (preferred) or by macro
    • CUDA native new (required by GPUOcelot and good for comparisons)
    • new mem controller (good for NVidia GPUs)
    • old ring buffer (if still possible)
    • ...

Signal Support

Add Posix signal support as described in our doc/SIGNALS.md

We will probably need a more general Simulation Control class to get the communication between the signal handler (thread?), plugins (signal reduce/sync) and the simulation itself clean.

Compile Suite Integration

Add a travis-ci.org like status checker for all commits and pull requests.

  • Merge test -> done by GitHub itself
  • Compile tests -> should be done automatically by our Compile Suite and should set a status [v3 API]
  • Run time tests -> preparation see #7

Batch systems files must be ASCII

All files that may be submitted in any form to the batch system must be ASCII to work properly on all machines. Currently, they are UTF-8 due to a special character in René. We might have to change this to Rene to get this working.

HDF5Writer: DCollector::Dimensions getPointer

While using methods like writeAttribute with DCollector::Dimensions objects, one should use getPointer() instead of &:

&sim_size -> sim_size.getPointer()

DCollector::Dimensions sim_size( 1, 2, 3);
domainCollector.writeAttribute( currentStep,
                                DCollector::ColTypeDim(),
                                dataSetName.str().c_str(),
                                "sim_size",
                                sim_size.getPointer() );

Clarify .cfg files

It should be clear in the submit/.cfg files which variables are used and which are just examples and need to be added to e.g. TBG_programParams to be actually used.

example: TBG_movingWindow in 0016gpus.cfg.

ADIOS: Particle Output and Restart

Follow up to #40, in order of priority

  • Restart from ADIOS files (currently working on: #679 @ax3l)
  • ADIOS multi-species support (broken?) ok
  • ADIOS 2D support (currently working on: no one #679)
  • ADIOS particle dumps
  • Add an ADIOS version of splash2txt (adios2txt)

Class member align problem

Member inside a class must ordered by it size. First big member than smaller. If you don't do this you get a undefined behavior with sm_13 and slow byte by byte copies inside a kernel in higher architectures.
This can be the reason of compiler bug #76. IMO both bugs point to the same code lines.

ptx example with bad sm_35 code:

///home/widera/workspace/dev/src/libPMacc/include/lambda/Expression.hpp:63
        .loc 75 63 1
        ld.u8   %rc1, [%rd2];
        ld.u8   %rc2, [%rd2+1];
        ld.u8   %rc3, [%rd2+2];
        ld.u8   %rc4, [%rd2+3];
        ld.u8   %rc5, [%rd2+4];
        ld.u8   %rc6, [%rd2+5];
        ld.u8   %rc7, [%rd2+6];
        st.u8   [%rd1+6], %rc7;
        st.u8   [%rd1+5], %rc6;
        st.u8   [%rd1+4], %rc5;
        st.u8   [%rd1+3], %rc4;
        st.u8   [%rd1+2], %rc3;
        st.u8   [%rd1+1], %rc2;
        st.u8   [%rd1], %rc1;

Splash: writeAttribute DCollector::ColTypeDim()

All attribute writes with DCollector::ColTypeDim() attributes are broken.

One should use e.g.

dataCollector->writeAttribute(
    params->currentStep,
    DCollector::ColTypeDim(),
    str.str().c_str(),
    "sim_size",
    sim_size.getPointer());

instead of

dataCollector->writeAttribute(
    params->currentStep,
    DCollector::ColTypeDim(),
    str.str().c_str(),
    "sim_size",
    &sim_size);

See related libSplash bug 33.

Wiki: Params Structure & Hierarchy

  • Translate, update and push old file doc/physical_inputs.txt -> wiki (describe .param structure as in beta-rc6 changelog)
  • describe multi-species initalization workflow
  • Fix SI:: vs _SI redundancy...
  • "dot" file with dependency diagram

GameOfLife: Warning Taurus (host-device)

src/picongpu/src/libPMacc/include/mappings/simulation/SubGrid.hpp(49):
warning: calling a __host__ function("__assert_fail") from a __host__ __device__
function("PMacc::SimulationBox<(unsigned int)2u> ::SimulationBox") is not allowed

Output: Time averaged fields

Output time-averaged fields, too.

  • Reduce (add) selected field in given interval [nextDump - Navg ; nextDump] on host-side
  • Should be possible for any field wie dump already (E,B,J,Tmp)
  • Add to dump as new field (and divide value by number of timesteps in the interval)

precision64Bit - ABI GCC>4.6 alignment

Occurs with precision64Bit, e.g. with examples/LaserWakefield cmakePreset #5

En:

The ABI for passing parameters with 32-byte alignment has changed in GCC 4.6

De:

src/libPMacc/include/eventSystem/tasks/TaskSetValue.hpp:111:1:
Anmerkung: Das ABI der Parameterübergabe mit 32-Byte-Ausrichtung hat sich in GCC 4.6 geändert

related to alignment in src/libPMAcc/include/types.h __optimal_align__ for host-side data

References:
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44948

Fix cmake compiler test

We need to add " " here to prevent this error when compiling with vtc++:

"STREQUAL" "PGI"

Unknown arguments specified

Use hierarchical groups in libSplash

Use hierarchical groups to better distinguish particles, fields, ghost cells, indices

Current idea:
fileset 1 (simulation data):

/data/timestamp/...

fields/FieldB/x
fields/FieldB/y

particles/electrons/momentum
particles/electrons/positions
particles/ions/

fileset 2 (simulation restart data):

as above + 
fields/FieldB/_ghosts/top/x
fields/FieldB/_ghosts/bottom/x

Moving Window Restart: Missing first cells in Y

I just noticed that during a restart with moving window enabled, some of the first y-cells are not loaded in the X-Z plane.

This picture was taken some steps after the restart. At the time of the restart, the virtualWindow was exactly at the positon where the "gap" came from.

Size of the gap: 7px, scale to cellsize: true, dx/dy = 5.3125 -> ~37 cells or 4-5 super cells? (Standard super cell: 8x8x4).

Can someone reproduce that?

7000 (restart point):
pngimageelectrons_yx_0 5_007000

7500:
pngimageelectrons_yx_0 5_007500

Restart because of a crash at 7200 with:

terminate called after throwing an instance of '
std::runtime_error'
 what():  [CUDA] Error: unspecified launch failure` `

Plugins: Specify Output by Default

Plugins should describe their generated output in a common interface.

For example a plugin calculates:

  • a simple number: unit, type of a single datum, dimension=0, no axis, name
  • a 2D matrix (e.g. a slice of density data): unit, type of a single datum, optional axis for x, y, colorbar, dimension=2, name/title
  • a histogram (e.g. for particle energies): unit, type of the bins, optional axis for x, y, dimension=1, name/title

Axis information should be optional, deciding either to specify:

  • min/max range + lin/log scale (preferred if possible)
  • n discrete numbers/ticks on that axis/"color"bar

Advantages:

  • one can implement general outputs to txt, hdf5, anything, ... for n-dimensional data
  • one can forward that data to an other plugin by that common interface, e.g. a live visualization plugin

plugins/TotalDivJ.tpp:84 PseudoBuffer warning

The PseudoBuffer in plugins/TotalDivJ.tpp:84 causes a warning when compiled with

  • gcc/4.6.2
  • openmpi/1.6.3
  • cuda/5.0
  • boost/1.49.0

on hypnos:

src/libPMacc/include/cuSTL/container/CartBuffer.tpp:
  In member function ‘virtual void picongpu::TotalDivJ::notify(uint32_t)’:
src/libPMacc/include/cuSTL/container/CartBuffer.tpp:154:1:
  warning: ‘*((void*)& fieldJ +8)’ may be used uninitialized in this
  function [-Wuninitialized]
src/picongpu/include/plugins/TotalDivJ.tpp:84:69:
  note: ‘*((void*)& fieldJ +8)’ was declared here

Pls fix me :)

FirstRun Desktop Example

Create a my first run example.

  • Link to Install.md
  • close to last section of the install.md but for a single desktop GPU?
  • create, configure, make install
  • tbg bash mpiexec for 1 GPU
  • Add Run an Example Video
  • add splash2txt example

Restart: Plugins

Plugins must be able to restart themselves.
The SimRestartInitializer is crap since this should be handled by the hdf5-plugin, method restart (another init). This restart does not only reload the state of the plugin itself, but may also affect the state of PIConGPU.

One may have to trigger a checkpoint like a notify to save the internal state, too.

An other trivial example:

Plugins that write to txt files should remove post-restart related data during restart and append to the already created files. (Similar how our hdf5 plugin works)

math::pow for arbitrary scalar types

I tried to use math::pow( float_X value, int) but did not find an implementation (on the device).

Could you please add it?
We will need at least the following C++98 overloads for optimal performance

float_X pow (float_X base, float_X exponent);
float_X pow (float_X base, int exponent);

Especially, it is not desired to cast the exponents from ints to floats since the standard algorithms for integer exponents can be performed much faster than for floating point exponents.

Thanks :)

Plugins: analysis on selected window only

Plugins that calculate

  • total Energy
  • energy histograms
  • images
  • data output
  • slices
  • phase space
  • ...

should operate on the volume given by the VirtualWindow only.

Affects: plugins for moving window simulations.

Possible solution: #1288

Warnings: ForEach with Lambda Parameters

If one enables -Wunused-parameter for GCC, one gets a warning for cuSTL/algorithm/kernel/Foreach.hpp during its usage with lambda parameters, for example in cuSTL/container/assigner/DeviceMemAssigner.hpp:62:

cuSTL/algorithm/kernel/Foreach.hpp:
In Instanziierung von »void PMacc::algorithm::kernel::detail::__wrapper__device_stub_kernelForeach(Mapper&, C0&, Functor&) [with Mapper = PMacc::algorithm::kernel::detail::SphericMapper<2, PMacc::math::CT::Int<1, 1, 1> >, C0 = PMacc::cursor::BufferCursor<int, 2>, Functor = PMacc::lambda::ExprFunctor<PMacc::lambda::Expression<PMacc::lambda::exprTypes::assign, boost::mpl::vector<PMacc::lambda::Expression<PMacc::lambda::exprTypes::terminal, boost::mpl::vector<PMacc::lambda::placeholder<0> > >, PMacc::lambda::Expression<PMacc::lambda::exprTypes::terminal, ... > >]«:

cuSTL/algorithm/kernel/Foreach.hpp:65:109:
instanziiert von »void PMacc::algorithm::kernel::detail::kernelForeach(Mapper, C0, Functor) [with Mapper = PMacc::algorithm::kernel::detail::SphericMapper<2, PMacc::math::CT::Int<1, 1, 1> >, C0 = PMacc::cursor::BufferCursor<int, 2>, Functor = PMacc::lambda::ExprFunctor<PMacc::lambda::Expression<PMacc::lambda::exprTypes::assign, boost::mpl::vector<PMacc::lambda::Expression<PMacc::lambda::exprTypes::terminal, boost::mpl::vector<PMacc::lambda::placeholder<0> > >, PMacc::lambda::Expression<PMacc::lambda::exprTypes::terminal, ... > >]«

cuSTL/algorithm/kernel/Foreach.hpp:91:414:
instanziiert von »void PMacc::algorithm::kernel::Foreach::operator()(const Zone&, C0, const Functor&) [with Zone = PMacc::zone::SphericZone<2>, C0 = PMacc::cursor::BufferCursor<int, 2>, Functor = PMacc::lambda::Expression<PMacc::lambda::exprTypes::assign, boost::mpl::vector<PMacc::lambda::Expression<PMacc::lambda::exprTypes::terminal, boost::mpl::vector<PMacc::lambda::placeholder<0> > >, PMacc::lambda::Expression<PMacc::lambda::exprTypes::terminal, ... >, BlockDim = PMacc::math::CT::Int<1, 1, 1>]«

cuSTL/container/assigner/DeviceMemAssigner.hpp:62:1:
instanziiert von »static void PMacc::assigner::DeviceMemAssigner<_dim>::assign(Type*, const PMacc::math::Size_t<(dim - 1)>&, const Type&, const PMacc::math::Size_t&) [with Type = int, int _dim = 2]«
cuSTL/container/CartBuffer.tpp:215:1: instanziiert von »void PMacc::container::CartBuffer<Type, _dim, Allocator, Copier, Assigner>::assign(const Type&) [with Type = int, int _dim = 2, Allocator = PMacc::allocator::DeviceMemAllocator<int, 2>, Copier = PMacc::copier::D2DCopier<2>, Assigner = PMacc::assigner::DeviceMemAssigner<2>]«

src/picongpu/include/plugins/ParticleDensity.tpp:128:1:
instanziiert von »void picongpu::heiko::ParticleDensity::notify(uint32_t) [with ParticlesType = picongpu::Particlesboost::mpl::vector2<picongpu::ElectronMethods<, picongpu::ParticlesData<> > >, uint32_t = unsigned int]«

/tmp/tmpxft_000043cb_00000000-3_main.cudafe1.stub.c:270:334:
instanziiert von hier

cuSTL/algorithm/kernel/Foreach.hpp:65:62: Warnung: unbenutzter Parameter »mapper« [-Wunused-parameter]
cuSTL/algorithm/kernel/Foreach.hpp:65:62: Warnung: unbenutzter Parameter »c0« [-Wunused-parameter]
cuSTL/algorithm/kernel/Foreach.hpp:65:62: Warnung: unbenutzter Parameter »functor« [-Wunused-parameter]

Rerunable / Restartable

Many batch systems support a flag if a job can be aborted and/or restarted. We may want to use that sometimes.

List of flags and their meaning

qsub/torque: Rerunable, fault_tolerant
...

Intel/icc 12.1 Errors

icc 12.1 on taurus (module load intel/12.1 boost/1.54.0-intel12.1) fails since #42 was merged in eef746a

[ 16%] Building NVCC (Device) object build_picongpu/CMakeFiles/picongpu.dir//./picongpu_generated_main.cu.o
/sw/taurus/libraries/boost/1.54.0-intel12.1/include/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp(153): error: class "boost::mpl::vector<PMacc::lam
bda::placeholder<0>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_
::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>" has no member "item2"
          detected during:
            instantiation of class "boost::mpl::v_at<V, 2L> [with V=boost::mpl::vector<PMacc::lambda::placeholder<0>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>]" 
/sw/taurus/libraries/boost/1.54.0-intel12.1/include/boost/mpl/vector/aux_/at.hpp(69): here
            instantiation of class "boost::mpl::at_impl<boost::mpl::aux::vector_tag<n_>>::apply<Vector, N> [with n_=1L, Vector=boost::mpl::vector<PMacc::lambda::placeholder<0>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, N=mpl_::long_<2L>]" 
/sw/taurus/libraries/boost/1.54.0-intel12.1/include/boost/mpl/at.hpp(43): here
            instantiation of class "boost::mpl::at_c<Sequence, N> [with Sequence=boost::mpl::vector<PMacc::lambda::placeholder<0>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>, N=2L]" 
/home/s4343183/src/picongpu/src/libPMacc/include/lambda/Expression.hpp(121): here
            instantiation of class "PMacc::lambda::Expression<_ExprType, _Childs> [with _ExprType=PMacc::lambda::exprTypes::terminal, _Childs=boost::mpl::vector<PMacc::lambda::placeholder<0>, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na>]" 
/home/s4343183/src/picongpu/src/libPMacc/include/lambda/Expression.hpp(215): here
...

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.