{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Space Charge on the GPU\n", "\n", "PyHEADTAIL offers space charge models which are accelerated on graphics processing units (GPUs).\n", "\n", "Space charge refers to the impact of the beam's self-fields on itself. In PyHEADTAIL, we model space charge by lumped kicks, which are applied after each tracking segment. The kicks correspond to the integrated space charge effect over the tracked segment's length.\n", "\n", "In the present notebook we demonstrate the transverse defocussing effect of space charge. The corresponding detuning over a revolution is modelled with two different approaches:\n", "\n", "1. frozen Gaussian field map\n", "2. self-consistent field solving\n", "\n", "The first method assumes a fixed Gaussian beam distribution: the actually tracked beam then moves like test particles through the correspondingly generated fields. The second method solves for the fields generated by the particle distribution at each interaction point. \n", "\n", "For a more in-depth discussion of the two methods, you may refer to http://frs.web.cern.ch/frs/Source/space_charge/Meetings/meeting98_17.08.2017/oeftiger_sc_modelling.pdf .\n", "\n", "Note that this tutorial requires a GPU with the NVIDIA `CUDA` suite and the python package `PyCUDA` installed.\n", "\n", "-- 2017, Adrian Oeftiger" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## general imports" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from __future__ import division, print_function\n", "\n", "import numpy as np\n", "np.random.seed(42)\n", "\n", "from scipy.constants import c, epsilon_0, e, m_p\n", "\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# sets the PyHEADTAIL directory etc.\n", "try:\n", " from settings import *\n", "except:\n", " pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## PyHEADTAIL imports" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from pycuda.autoinit import context\n", "from pycuda import gpuarray as gp\n", "\n", "import pycuda.compiler\n", "pycuda.compiler.DEFAULT_NVCC_FLAGS += ['-Wno-deprecated-gpu-targets']" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "PyHEADTAIL v1.12.4.7\n", "\n", "\n", "Shared libraries of Fortran versions of m2p/p2m (rhocompute, int_field_for, int_field_for_border) not found. Limited functionality\n" ] } ], "source": [ "from PyHEADTAIL.particles.slicing import UniformBinSlicer\n", "from PyHEADTAIL.field_maps.field_map import FieldMap, FieldMapSliceWise\n", "from PyHEADTAIL.spacecharge.spacecharge import TransverseGaussianSpaceCharge\n", "from PyHEADTAIL.spacecharge.pypic_factory import create_mesh, create_3dmesh_from_beam\n", "from PyHEADTAIL.spacecharge.pypic_spacecharge import FrozenGaussianSpaceCharge25D\n", "from PyHEADTAIL.particles.rfbucket_matching import RFBucketMatcher\n", "\n", "from PyHEADTAIL.general.printers import SilentPrinter\n", "from PyHEADTAIL.general.contextmanager import GPU" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from PyHEADTAIL.spacecharge.pypic_spacecharge import SpaceChargePIC" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from PyCERNmachines.CERNmachines import SPS" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `PyPIC.GPU` library for the particle-in-cell algorithm in `PyHEADTAIL` can be installed from https://github.com/PyCOMPLETE/PyPIC:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from PyPIC.GPU.poisson_solver.FFT_solver import GPUFFTPoissonSolver_2_5D\n", "from PyPIC.GPU.pypic import PyPIC_GPU\n", "\n", "# not necessary but nice: memory pool sharing between PyHEADTAIL and PyPIC\n", "try:\n", " from PyHEADTAIL.gpu.gpu_utils import memory_pool\n", "except:\n", " memory_pool = None" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setting up the machine and functions" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import time\n", "\n", "timing_fct = time.time #time.clock\n", "\n", "class Timer:\n", " '''Used for timing purposes. Possibly use\n", " https://docs.python.org/dev/library/contextlib.html\n", " #contextlib.ContextDecorator .\n", " '''\n", " def __enter__(self):\n", " self.start = timing_fct()\n", " return self\n", "\n", " def __exit__(self, *args):\n", " self.end = timing_fct()\n", " self.interval = self.end - self.start" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "n_macroparticles = int(1e6)\n", "n_slices_sc = 32\n", "\n", "# fixed field map for space charge\n", "n_mesh_nodes = 1024\n", "n_mesh_sigma = 6\n", "\n", "# self-consistent PIC solving for space charge\n", "n_mesh_nodes_pic = 128\n", "n_mesh_sigma_pic = 5\n", "\n", "intensity = 1.3e11\n", "epsn_x = epsn_y = 2e-6 # in [m.rad]\n", "sigma_z = 0.23 # in [m]" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "def make_machine(n_segments=100):\n", " return SPS(n_segments=n_segments,\n", " machine_configuration='Q20-injection',\n", " optics='smooth',\n", " printer=SilentPrinter(),\n", " Q_x=20.24,\n", " Q_y=20.31,\n", " )\n", "\n", "def make_beam(machine=make_machine()):\n", " return machine.generate_6D_Gaussian_bunch_matched(\n", " n_macroparticles, intensity, epsn_x, epsn_y, sigma_z)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "*** PyHEADTAIL WARNING! RFBucketMatcher: failed to converge with Brent method, continuing with Newton-Raphson method.\n" ] } ], "source": [ "m = make_machine()\n", "beam = make_beam(m)\n", "\n", "sig_x = beam.sigma_x()\n", "sig_y = beam.sigma_y()\n", "\n", "slicing_interval = m.longitudinal_map.get_bucket(beam).interval\n", "\n", "slicer_sc = UniformBinSlicer(n_slices_sc, z_cuts=slicing_interval)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Let's Go!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Before we extract the incoherent space charge detuning from the two different simulations approaches, we compute the theoretically expected tune spreads:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dQ_x = 0.155 and dQ_y = 0.154\n" ] } ], "source": [ "lmbda = intensity * e / (4*sigma_z)\n", "Ksc = e / (beam.gamma**3 * m_p * (beam.beta * c)**2) * lmbda / (2*np.pi*epsilon_0)\n", "R = m.circumference / (2*np.pi)\n", "\n", "def dQ_inc(thissize, theothersize, thistune, Ksc=Ksc):\n", " return Ksc * R**2 / (thistune * thissize * (thissize+theothersize))\n", "\n", "print ('dQ_x = {0:.3f} and dQ_y = {1:.3f}'.format(\n", " dQ_inc(beam.sigma_x(), beam.sigma_y(), m.Q_x), \n", " dQ_inc(beam.sigma_y(), beam.sigma_x(), m.Q_y)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. 2.5D slice-by-slice frozen space charge" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "*** PyHEADTAIL WARNING! RFBucketMatcher: failed to converge with Brent method, continuing with Newton-Raphson method.\n" ] } ], "source": [ "m_GPU = make_machine(100)\n", "beam_GPU = make_beam(m_GPU)\n", "assert (m_GPU.optics == 'smooth')\n", "sc_integration_length = m_GPU.circumference / len(m_GPU.transverse_map)\n", "\n", "with GPU(beam_GPU) as cmg:\n", " frozen_sc_node_GPU = FrozenGaussianSpaceCharge25D(\n", " slicer=slicer_sc,\n", " length=sc_integration_length,\n", " beam=beam_GPU,\n", " n_mesh_sigma=[n_mesh_sigma]*2,\n", " mesh_size=[n_mesh_nodes]*2,\n", " )\n", "\n", "m_GPU.install_after_each_transverse_segment(frozen_sc_node_GPU)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "with GPU(beam_GPU) as cmg:\n", " with Timer() as t:\n", " m_GPU.track(beam_GPU)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The one-turn map of 100 segments took 5.813 sec.\n" ] } ], "source": [ "print ('The one-turn map of {} segments took {:.3f} sec.'.format(len(m_GPU.transverse_map), t.interval))" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": true }, "outputs": [], "source": [ "x = gp.empty((512, 1024), dtype=np.float64)\n", "y = gp.empty((512, 1024), dtype=np.float64)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "with GPU(beam_GPU) as cmg:\n", " beam_GPU.sort_for('id')\n", " x[0,:] = beam_GPU.x[:x.shape[1]]\n", " y[0,:] = beam_GPU.y[:y.shape[1]]\n", " for turn in xrange(1, len(x)):\n", " m_GPU.track(beam_GPU)\n", " beam_GPU.sort_for('id')\n", " x[turn,:] = beam_GPU.x[:x.shape[1]]\n", " y[turn,:] = beam_GPU.y[:y.shape[1]]" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\ndCGEWCD+P94knQ9cIeCuAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 1024 mesh nodes, 100 segments\n", "ffts_x = map(np.abs, map(np.fft.rfft, x.T.get()))\n", "ffts_y = map(np.abs, map(np.fft.rfft, y.T.get()))\n", "\n", "plt.plot(np.fft.rfftfreq(len(x)), np.sum(ffts_x, axis=0))\n", "plt.plot(np.fft.rfftfreq(len(y)), np.sum(ffts_y, axis=0))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The spread matches the previously computed theoretical value of `dQ_x = 0.155 and dQ_y = 0.154` in both planes." ] }, { "cell_type": "code", "execution_count": 223, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 223, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.imshow(frozen_sc_node_GPU.fields[0].get(), origin='lower', interpolation='None')\n", "plt.colorbar()" ] }, { "cell_type": "code", "execution_count": 109, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 109, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(slices.sigma_y)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": true }, "outputs": [], "source": [ "beam_GPU.x *= 4\n", "beam_GPU.xp *= 4" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": true }, "outputs": [], "source": [ "frozen_sc_node_GPU.sigma_rtol = 0.2" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "with GPU(beam_GPU) as cmg:\n", " with Timer() as t:\n", " m_GPU.track(beam_GPU)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "STORE centroid FFT! compare to 2.5D PIC..." ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### 2. 2.5D slice-by-slice self-consistent PIC" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "mesh_3d = create_3dmesh_from_beam(beam, [n_mesh_nodes_pic]*2, [n_mesh_sigma_pic]*2, \n", " slices=beam.get_slices(slicer_sc))" ] }, { "cell_type": "code", "execution_count": 169, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "*** PyHEADTAIL WARNING! RFBucketMatcher: failed to converge with Brent method, continuing with Newton-Raphson method.\n" ] } ], "source": [ "m_GPU = make_machine(100)\n", "np.random.seed(42)\n", "beam_GPU = make_beam(m_GPU)\n", "assert (m_GPU.optics == 'smooth')\n", "sc_integration_length = m_GPU.circumference / len(m_GPU.transverse_map)\n", "\n", "poissonsolver = GPUFFTPoissonSolver_2_5D(mesh_3d, context=context, save_memory=False)\n", "pypic_algorithm = PyPIC_GPU(mesh_3d, poissonsolver, context=context, \n", " memory_pool=memory_pool)\n", "pic_sc_node = SpaceChargePIC(sc_integration_length, pypic_algorithm)\n", "\n", "m_GPU.install_after_each_transverse_segment(pic_sc_node)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "with GPU(beam_GPU) as cmg:\n", " with Timer() as t:\n", " m_GPU.track(beam_GPU)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The one-turn map of 100 segments took 2.497 sec.\n" ] } ], "source": [ "print ('The one-turn map of {} segments took {:.3f} sec.'.format(\n", " len(m_GPU.transverse_map), t.interval))" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": true }, "outputs": [], "source": [ "x = gp.empty((512, 1024), dtype=np.float64)\n", "y = gp.empty((512, 1024), dtype=np.float64)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "with GPU(beam_GPU) as cmg:\n", " beam_GPU.sort_for('id')\n", " x[0,:] = beam_GPU.x[:x.shape[1]]\n", " y[0,:] = beam_GPU.y[:y.shape[1]]\n", " for turn in xrange(1, len(x)):\n", " m_GPU.track(beam_GPU)\n", " beam_GPU.sort_for('id')\n", " x[turn,:] = beam_GPU.x[:x.shape[1]]\n", " y[turn,:] = beam_GPU.y[:y.shape[1]]" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 128 mesh nodes, 100 segments\n", "ffts_x = map(np.abs, map(np.fft.rfft, x.T.get()))\n", "ffts_y = map(np.abs, map(np.fft.rfft, y.T.get()))\n", "\n", "plt.plot(np.fft.rfftfreq(len(x)), np.sum(ffts_x, axis=0))\n", "plt.plot(np.fft.rfftfreq(len(y)), np.sum(ffts_y, axis=0))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Precision Influence" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": true }, "outputs": [], "source": [ "pic_sc_node.pic_dtype = np.float32" ] }, { "cell_type": "code", "execution_count": 106, "metadata": { "collapsed": true }, "outputs": [], "source": [ "pic_sc_node.pic_dtype = np.float64" ] }, { "cell_type": "code", "execution_count": 170, "metadata": {}, "outputs": [], "source": [ "pic_sc_node.sort_particles = True" ] }, { "cell_type": "code", "execution_count": 171, "metadata": { "collapsed": true }, "outputs": [], "source": [ "cmg = GPU(beam_GPU).__enter__()" ] }, { "cell_type": "code", "execution_count": 172, "metadata": { "collapsed": true }, "outputs": [], "source": [ "beam_GPU.sort_for('id')\n", "xp0, yp0 = beam_GPU.xp.copy(), beam_GPU.yp.copy()" ] }, { "cell_type": "code", "execution_count": 173, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "100 loops, best of 3: 8.12 ms per loop\n" ] } ], "source": [ "%timeit pic_sc_node.track(beam_GPU)" ] }, { "cell_type": "code", "execution_count": 174, "metadata": { "collapsed": true }, "outputs": [], "source": [ "beam_GPU.sort_for('id')\n", "xp1, yp1 = beam_GPU.xp.copy(), beam_GPU.yp.copy()" ] }, { "cell_type": "code", "execution_count": 175, "metadata": { "collapsed": true }, "outputs": [], "source": [ "cmg.__exit__(None, None, None)" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "data": { "image/png": "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\njJmZteb/A9Y8aTrKvOtvAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist2d(beam_GPU.x, (xp1 - xp0).get(), bins=100);" ] }, { "cell_type": "code", "execution_count": 176, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(-2.8185787037671162e-14)" ] }, "execution_count": 176, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gp.sum(xp1 - xp0)" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.00019818394329538174" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.max(np.abs((xp1-xp0).get()))" ] }, { "cell_type": "code", "execution_count": 112, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([ 7.03262415e-05, -2.84137838e-05, 9.20420436e-05, ...,\n", " -1.59709115e-05, 1.17050456e-04, 9.24976018e-05]),\n", " array([ 1, 2, 3, ..., 999998, 999999, 1000000], dtype=int32))" ] }, "execution_count": 112, "metadata": {}, "output_type": "execute_result" } ], "source": [ "beam_GPU.xp, beam_GPU.id" ] }, { "cell_type": "code", "execution_count": 120, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([ 7.03262415e-05, -2.84137838e-05, 9.20420436e-05, ...,\n", " -1.59709115e-05, 1.17052379e-04, 9.24976018e-05]),\n", " array([ 1, 2, 3, ..., 999998, 999999, 1000000], dtype=int32))" ] }, "execution_count": 120, "metadata": {}, "output_type": "execute_result" } ], "source": [ "beam_GPU.xp, beam_GPU.id" ] }, { "cell_type": "code", "execution_count": 122, "metadata": { "collapsed": true }, "outputs": [], "source": [ "xp1_sorted = xp1.copy()" ] }, { "cell_type": "code", "execution_count": 129, "metadata": { "collapsed": true }, "outputs": [], "source": [ "xp1_fp64 = xp1.copy()" ] }, { "cell_type": "code", "execution_count": 167, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(np.cumsum((xp1 - xp0).get()))\n", "plt.yscale('log')\n", "plt.title('FP64 AtomicAdd')\n", "plt.xlabel('particle ID')\n", "plt.ylabel('cumulative sum of differences');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$\\implies$ for FP64 atomicAdd, the total centroid kick correctly adds up to $10^{-14}$ which is equivalent to zero within double precision error. " ] }, { "cell_type": "code", "execution_count": 168, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n/wOWfCq17ZteRwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(np.cumsum((xp1_fp64 - xp1_sorted).get()))\n", "plt.ylabel('cumulative sum of ')\n", "plt.xlabel('particle ID');" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "$\\implies$ for the sorted algorithm, the total centroid kick adds up to $10^{-5}$ (which should be more around $10^{-14}$ as in the FP64 AtomicAdd case which we compare to here)." ] }, { "cell_type": "code", "execution_count": 159, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(np.cumsum(np.abs((xp1_fp64 - xp1_sorted).get())))\n", "plt.ylabel('cumulative sum of absolute differences')\n", "plt.xlabel('particle ID');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$\\implies$ each particle adds equally to the $10^{-5}$ total sum of the kicks, otherwise we would see a jump somewhere and not a smoothly monotonically increasing line.\n", "\n", "$\\implies$ i.e., the sorted algorithm has a systematic problem leading to a non-vanishing centroid kick which violates the third law of Newton (direct space charge should not have any influence on the centroid)." ] }, { "cell_type": "code", "execution_count": 153, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 153, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist(np.abs((xp1_fp64 - xp1_sorted).get())[np.abs((xp1_fp64 - xp1_sorted).get()) != 0], bins=20,)\n", "plt.yscale('log')\n", "plt.xlabel('difference between FP64 AtomicAdd\\nand sorted approach')\n", "plt.ylabel('# particles (out of 1e6)')" ] }, { "cell_type": "code", "execution_count": 150, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 150, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nYWZmpf4bt/L4+3cGA+EAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist(np.log10(np.abs((xp1_fp64 - xp1_sorted).get())[np.abs((xp1_fp64 - xp1_sorted).get()) != 0]), bins=20,)\n", "plt.yscale('log')\n", "plt.xlabel('order of magnitude difference [$10^x$] between\\nFP64 AtomicAdd and sorted approach')\n", "plt.ylabel('# particles (out of 1e6)')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.14" } }, "nbformat": 4, "nbformat_minor": 2 }