BLonD code development meeting

Europe/Zurich
CERN

CERN

Video conferencing only

General

  • pull request on FWHM extension for BLonD-common: approved

BLonD Ring object discussion

Simon: SWAN examples — Reshaping

  • Voltages defined by time or RF system
    • Can reshape for a given time array
    • Extra harmonics can be passed and will be interpreted
    • Less harmonics returns less arrays
    • array.data_type contains also ‘func_time’ (momentum/energy/B-field) -> Heiko: why tagging it at this level, why not in Ring? Function generation generic -> Simon: only data_type carries the label -> Helga: pass label to Ring and convert one to another -> Alex/Simon advantage of objects: B-field could contain bending radius
    • Toy model to compare implementation with objects vs linked variables and tagging
    • Heiko: group voltage, phase, and harmonic? Why have everything in one object?
    • I.e. have various RFSystem objects - harmonic, voltage, phase vs time
  • Simon will try to experiment with it for the next time

Simon: SWAN examples — Ring object passing

  • synchronous_data passed and gets interpreted internally
  • Different time spacings possible
  • Try and give your suggestions!

Alex: Usage of Ring object apart from

  • Data analysis: f_rev clock not available -> needs Ring
  • Bunch spacing detection: beta, gamma, T_rev variables required
  • Impedance toolbox: wrapper for Machine object to interface with impedance team (beta, gamma, T_rev passed)
    • Ring, RF are stored internally in Machine

Alex: Test and Overview

Editable collection of Ring objects comparison

  • Inputs in tracking/common
  • Functions
    •     Additional functions: as a function of time/turn/sample -> Heiko: just as kwarg?
    •     tracking -> info per turn (default, if no interpolation time specified), momentum still calculated turn by turn -- Simon: if turn numbers are not needed, can be made optional
    •     parameters_at_time: np.interp()
    •     paramters_at_sample: returns at a given sample
    •     conversion between turns and time is an iterative process -> calculation overhead anyway
  • Attributes: n_turns -> n_samples
    • The two are the same in default
  • Main question is how to pre-treat the data — object/matrix etc. TOY MODEL FOR NEXT TIME
  • Alex: user custom potential wells -> NEXT TIME

Kostis: Synchrotron Radiation benchmarking

  • SR with quantum excitation: use Boost if possible
    •     std C++ RNG 4x slower than Boost RNG; no installation needed
    •     separate or single loops: single loop for dE coordinate and parallelisation gives 10-15 % speed-up only
    •     RNG thread safe now
    •     checked: normal distribution looks the same in all implementations
    •     some unit tests added python output vs c++
    •     pull request: merge, add also Markus’ changes (seed option for C++ and more unit tests)

Panagiotis: Synchrotron radiation on GPU

  • Bigger cluster for benchmarks used with 28 physical cores
    •     Comparison with Haswell 28 cores
  • CPU vs GPU comparison: speed-up ~x25

Panagiotis: First BLonD implementation on GPU

  • Main loop: kick - drift - slice
    •     dE, dt transfer to GPU should be minimised
    •     For kick, need to transfer voltage, omega_rf, phi_rf
    •     For the profile update, need to transfer profile data every turn
  • Interaction with main loop every N_dt turns
    •     Speed-up increases as N_dt increases, more effect with more particles
    •     Interaction every 200 turns: 1.5x-4x speed-up
    •     Interaction every 1000 turns: 1.5x-7x speed-up (highest from 16 M particles)
    •     Maximum speed-up? is probably close to the case with 1000 turns
    • Speed up quite good considering that the CPU case is on Haswell - not a small machine!
  • For NEXT TIME: test no interaction with the main loop at all!!
There are minutes attached to this event. Show them.