54
Simulation Num´ erique de Nuages d’ions pi´ eg´ es sur GPU Nicolas Sillitoe Mars-Juin 2014 Responsable de Stage Laurent Hilico Equipe Ions Pi´ eg´ es Laurent Hilico Albane Douillet Jean-Philippe Karr 1

Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Simulation Numeriquede Nuages d’ions pieges sur GPU

Nicolas Sillitoe

Mars-Juin 2014

Responsable de StageLaurent Hilico

Equipe Ions PiegesLaurent Hilico

Albane DouilletJean-Philippe Karr

1

Page 2: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Remerciements

Outre mon maitre de stage, qui m’a consacre beaucoup de temps, et l’equipe d’accueil, jesouhaite remercier Pierre Dupre qui m’a aide et nous a mis en relation avec le LLR, LLR quenous remercions pour nous avoir mis a disposition la machine LLRTitan qui nous a servi deplateforme de developpement et de calcul.

This work has been funded by the P2IO LabEx (ANR-10-LABX-0038) in the framework”Investissements d’Avenir” (ANR-11-IDEX-0003-01) managed by the French National ResearchAgency (ANR).

Contents

I Introduction 5

II Partie Theorique 5

1 Piegeage d’ions dans un piege de Paul ideal 51.1 Presentation du probleme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.2 Principe du piegeage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51.3 Equations de Mathieu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61.4 Approximation adiabatique dans un champ electromagnetique inhomogene

dependant du temps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.4.1 Approximation adiabatique . . . . . . . . . . . . . . . . . . . . . . . . . 71.4.2 Justification des hypotheses . . . . . . . . . . . . . . . . . . . . . . . . . 9

2 Piege de Paul lineaire 102.1 Geometrie du piege de Paul lineaire . . . . . . . . . . . . . . . . . . . . . . . . . 102.2 Equations du mouvement et approximation adiabatique . . . . . . . . . . . . . . 112.3 Potentiel effectif, Profondeur du puits et ordres de grandeurs . . . . . . . . . . . 13

3 Interaction avec le laser de refroidissement 13

4 Taille du nuage d’ions pour le refroidissement sympathique 16

5 Refroidissement Sympathique et besoin de puissance de calcul 17

III Partie Numerique 19

6 GPU 196.1 Qu’est-ce que le GPU? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196.2 Pourquoi calculer sur GPU? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206.3 Pourquoi le GPU est-il plus efficace? . . . . . . . . . . . . . . . . . . . . . . . . 20

6.3.1 En terme de vitesse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206.3.2 En terme d’efficacite energetique . . . . . . . . . . . . . . . . . . . . . . 21

2

Page 3: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

6.4 Pourquoi tout le monde n’utilise pas les GPU? . . . . . . . . . . . . . . . . . . . 216.5 Quelles sont les options pour programmer sur GPU? . . . . . . . . . . . . . . . . 21

6.5.1 Le CUDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216.5.2 L’OpenCL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216.5.3 L’OpenACC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

6.6 Y-a-t il plus performant que le GPU? . . . . . . . . . . . . . . . . . . . . . . . . 226.6.1 ASIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226.6.2 FPGA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

7 Introduction au C++ 237.1 Pointeur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

7.1.1 Pointeur, operateur reference et operateur dereference . . . . . . . . . . . 237.1.2 Les tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237.1.3 La programmation orientee objet . . . . . . . . . . . . . . . . . . . . . . 24

8 Le modele de programmation du CUDA 248.1 Architecture physique et terminologie . . . . . . . . . . . . . . . . . . . . . . . . 24

8.1.1 Host et Device . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248.1.2 Coeurs, Warps et Streaming Multiprocessors . . . . . . . . . . . . . . . . 248.1.3 Memoire globale, partagee, cache L1, constante et texture . . . . . . . . 25

8.2 Structure Logique d’un Programme . . . . . . . . . . . . . . . . . . . . . . . . . 268.2.1 Blocks et Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268.2.2 Kernel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268.2.3 Stream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278.2.4 Synchronicite et Asynchronicite . . . . . . . . . . . . . . . . . . . . . . . 28

8.3 Allocations et Transferts de memoire . . . . . . . . . . . . . . . . . . . . . . . . 288.4 Exemple de programmation en parallele . . . . . . . . . . . . . . . . . . . . . . . 29

8.4.1 Apercu du Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298.4.2 Detail du fonctionnement du kernel . . . . . . . . . . . . . . . . . . . . . 30

9 Notre implementation de l’integration sur GPU 309.1 Representation des ions dans la memoire . . . . . . . . . . . . . . . . . . . . . . 309.2 Calcul de la force de coulomb . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

9.2.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319.2.2 Presentation du code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319.2.3 Detail du Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319.2.4 Considerations sur le Nombre de Particules . . . . . . . . . . . . . . . . . 349.2.5 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

9.3 Force du Piege de Paul Lineaire . . . . . . . . . . . . . . . . . . . . . . . . . . . 349.4 Interaction avec le Laser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359.5 Initialisation des Ions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

9.5.1 Relaxation non Physique . . . . . . . . . . . . . . . . . . . . . . . . . . . 369.5.2 Relaxation Physique avec le Laser . . . . . . . . . . . . . . . . . . . . . . 36

9.6 Refroidissement Sympathique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369.7 Resolution d’Equation Differentielle par Verlet Vitesse . . . . . . . . . . . . . . 37

9.7.1 L’algorithme Verlet Vitesse . . . . . . . . . . . . . . . . . . . . . . . . . 379.7.2 Notre algorithme sur GPU . . . . . . . . . . . . . . . . . . . . . . . . . . 379.7.3 Pourquoi un Algorithme Different? . . . . . . . . . . . . . . . . . . . . . 38

3

Page 4: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

9.8 Choix du pas de temps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409.9 Choix de la double precision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409.10 Analyse et sauvegarde des resultats . . . . . . . . . . . . . . . . . . . . . . . . . 40

10 Adaptation Multi GPU 4110.1 Difficulte de la tache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4110.2 Partage des positions entre les GPU . . . . . . . . . . . . . . . . . . . . . . . . . 42

10.2.1 Transferts via CPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4210.2.2 Transferts Peer to Peer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4210.2.3 Implementation finale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4310.2.4 Considerations sur le nombre de particules . . . . . . . . . . . . . . . . . 43

IV Resultats 43

11 Resultats numeriques 4311.1 Validite du Programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4311.2 Resultats en termes de performances . . . . . . . . . . . . . . . . . . . . . . . . 4411.3 Resultats de l’implementation multi GPU . . . . . . . . . . . . . . . . . . . . . 46

12 Resultats physiques 4612.1 Taille du nuage d’ions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4612.2 Refroidissement sympathique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4612.3 Parametres du laser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

12.3.1 Angle du laser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4912.3.2 Detuning du laser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

V Conclusion 53

4

Page 5: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Part I

IntroductionL’objectif principal de ce stage est d’ecrire un code de simulation de refroidissement sympa-thique avec d’un nuage d’ions en CUDA en partant d’un code en Fortran. Dans ce rapport jediscute de la physique du phenomene simule, des raisons pour choisir le GPU comme plateformede calcul, les alternatives aux GPU, son modele de programmation et les resultats obtenus entermes de performances et de physique.

Part II

Partie TheoriqueDans cette partie nous presentons le probleme physique traite et la theorie justifiant les formulesphysiques utilisees dans le programme de calcul numerique.

1 Piegeage d’ions dans un piege de Paul ideal

1.1 Presentation du probleme

On veut simuler la dynamique d’un nuage d’ions Be+ pieges et refroidis par laser pour lerefroidissement d’ions H+

2 produits a l’exterieur. Les ions Be+ sont pieges dans un piege dePaul lineaire que nous decrivons en section 2. Le refroidissement des ions H+

2 , insensibles aulaser, se fait par thermalisation par collision (interaction coulombienne) avec le nuage de Be+,c’est ce qu’on appelle le refroidissement sympathique.

1.2 Principe du piegeage

Le piege de Paul ideal, represente en figure 1, est compose de deux electrodes chapeau aupotentiel 0 et d’une electrode en anneau au potentiel V aux courbures hyperboliques. La formede potentiel est

Φ =V

2d2(2z2 − x2 − y2 + r2

0), (1)

avec r0 la distance la plus courte du centre a l’electrode en anneau, z0 la distance la plus courte

entre le centre et les electrodes chapeau et d =√

12r2

0 + z20 .

Si V est constant le piege est confinant en z et deconfinant en x et y. L’idee de WolfgangPaul a ete d’utiliser un potentiel V oscillant, de la forme

Φ =U0 + V0 cos(Ωt)

2d2(2z2 − x2 − y2 + r2

0). (2)

Le champ electrique a donc une composante statique

E0 =U0

2d2(−2zz + xx + yy), (3)

5

Page 6: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

et une composante oscillante

EΩ(r) cos(Ωt) =V0 cos(Ωt)

2d2(−2zz + xx + yy). (4)

Le champ electrique vaut donc

E =U0 + V0 cos(Ωt)

2d2(−2zz + xx + yy). (5)

Concretement on obtient un tel champ avec une electrode en anneau et deux electrodeschapeau aux courbures parfaitement hyperboliques. Les courbures hyperboliques permettentd’obtenir le champ voulu car dans l’equation (2), on voit que le champ a des equipotentielleshyperboliques, donc par unicite des solutions de l’equation de Laplace avec conditions auxbords, il faut des equipotentielles hyperboliques et donc des electrodes hyperboliques.

Figure 1: A gauche une illustration du piege de Paul ideal. Les electrodes cha-peau sont au potentiel V et l’electrode en anneau est a potentiel nul. Figure prisesur http://www.triumf.ca/headlines/current-events/nobel-laureate-visits-triumf. A droite lapremiere zone de stabilite du diagramme de stabilite en az,qz

1.3 Equations de Mathieu

De l’expression du champ (5) on peut deduire les equations du mouvement d’un ion de chargeQ et de masse M :

d2x

dt2− Q

Md2(U0 + V0 cos(Ωt))x = 0, (6)

d2y

dt2− Q

Md2(U0 + V0 cos(Ωt))y = 0, (7)

d2z

dt2+

2Q

Md2(U0 + V0 cos(Ωt))z = 0. (8)

6

Page 7: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Introduisons les parametres adimensionnes suivants:

ax = ay = − 4QU0

Md2Ω2, az =

8QU0

Md2Ω2, qx = qy =

2QV0

Md2Ω2, qz = − 4QV0

Md2Ω2, τ =

1

2Ωt. (9)

En utilisant les parametres adimensionnes de l’equation (9) on obtient des equations differentiellesnon couplees de type equation de Mathieu:

d2x

dτ 2+ (ax − 2qx cos(2τ))x = 0, (10)

d2y

dτ 2+ (ay − 2qy cos(2τ))y = 0, (11)

d2z

dτ 2+ (az − 2qz cos(2τ))z = 0. (12)

Ces equations sont connues et d’apres le theoreme de Floquet, il y a des solutions oscillanteset des solutions divergentes. On peut montrer qu’il y a alors des domaines de stabilites dansle plan (a,q). Pour certaines valeurs de a et q le piege est confinant et d’autres pas [MGW06].La figure 1 montre le diagramme de stabilite du piege hyperbolique dans le plan (q,a).

1.4 Approximation adiabatique dans un champ electromagnetiqueinhomogene dependant du temps

Pour a et q petits on peut interpreter la stabilite du piege a l’aide d’une approximationadiabatique en terme de force ponderomotrice. Nous suivons un developpement presentedans [MGW06].

1.4.1 Approximation adiabatique

Considerons une particule de charge Q et de masse M qui se meut dans un champ inhomogeneavec une composante statique E0(r) et une composante RF EΩ(r, t). On considere un cas oula vitesse de variation spatiale du champ est suffisamment faible pour que les variations duchamp soient negligeables sur l’amplitude d’oscillation de la particule. C’est l’approximationadiabatique bien connue en physique. En d’autres termes on suppose que EΩ(r, t) n’est pasnecessairement petit devant E0(r) mais que l’amplitude des oscillations de la particule sousl’effet de EΩ(r, t) est suffisamment faible pour que le champ E0 varie tres peu sur l’amplituded’une oscillation. De plus on suppose que le mouvement de la particule se decompose enun mouvement lent de grande amplitude R(t) superpose a un mouvement rapide de faibleamplitude ξ(t). On ecrit r(t) = R(t) + ξ(t). Ces hypotheses nous permettent de developper lechamp au premier ordre en ξ,

E0(R + ξ) = E0(R) +dE0

drξ, EΩ(R + ξ) = EΩ(R) +

dEΩ

drξ. (13)

Dans cette expression, la derivee d’un vecteur par un vecteur est une notation pour la matricedes derivees partielles, ainsi

dEΩ

dr=

∂EΩx

∂x

∂EΩx

∂y

∂EΩx

∂z∂EΩy

∂x

∂EΩy

∂y

∂EΩy

∂z∂EΩz

∂x

∂EΩz

∂y

∂EΩz

∂z

. (14)

7

Page 8: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

L’equation du mouvement devient alors,

d2R

dt2+d2ξ

dt2=

Q

M

[E0(r) +

dE0(r)

drξ + EΩ(r) cos(Ωt) +

dEΩ(r)

drξ cos(Ωt)

]. (15)

Comme nous avons suppose que ξ et R sont a des frequences tres differentes on peut separerl’equation en termes rapides et lents. Ainsi on obtient les deux equations suivantes:

d2R

dt2=

Q

M

[E0(r) +

dEΩ(r)

drξ cos(Ωt)

], (16)

d2ξ

dt2=

Q

M

[ξdE0

dr+ EΩ(r) cos(Ωt) +

dEΩ(r)

drξ cos(Ωt)

]. (17)

Ce n’est pas mathematiquement rigoureux mais le terme dEΩ(r)dr

ξ cos(Ωt) apparait dans les deuxequations car il contient un terme de frequence nulle et un terme de frequence 2Ω. Supposonsque dans le membre de droite de l’equation (17) les termes en ξ soient negligeables, alors on a

d2ξ

dt2≈ Q

MEΩ(r) cos(Ωt), (18)

qui s’integre en

ξ = − QM

EΩ(r)

Ω2cos(Ωt) =

QV0

2MΩ2d2cos(Ωt)

−2zxy

, (19)

en utilisant (4). Reportant l’expression (19) dans l’equation (16) on obtient

d2R

dt2=

Q

M

[E0(r)− Q

MΩ2

dEΩ(r)

drEΩ(r) cos2(Ωt)

]. (20)

Montrons que dEΩ(r)dr

EΩ(r) = 12~∇ (EΩ(r))2. On peut ecrire

dEΩ(r)

drEΩ(r) =

∂EΩx

∂xEΩx +

∂EΩx

∂yEΩy +

∂EΩx

∂zEΩz

∂EΩy

∂xEΩx +

∂EΩy

∂yEΩy +

∂EΩy

∂zEΩz

∂EΩz

∂xEΩx +

∂EΩz

∂yEΩy +

∂EΩz

∂zEΩz

. (21)

Comme ~∇× EΩ(r) = 0, ∂Eωz

∂y=

∂Eωy

∂z, ∂Eωx

∂z= ∂Eωz

∂xet

∂Eωy

∂x= ∂Eωx

∂ydonc

dEΩ(r)

drEΩ(r) =

∂EΩx

∂xEΩx +

∂EΩy

∂xEΩy +

∂EΩz

∂xEΩz

∂EΩx

∂yEΩx +

∂EΩy

∂yEΩy +

∂EΩz

∂yEΩz

∂EΩx

∂zEΩx +

∂EΩy

∂zEΩy +

∂EΩz

∂zEΩz

=1

2

∂∂x

(E2Ωx

+ E2Ωy

+ E2Ωz

)∂∂y

(E2Ωx

+ E2Ωy

+ E2Ωz

)∂∂z

(E2Ωx

+ E2Ωy

+ E2Ωz

)

. (22)

Moyennant sur une periode du micro mouvement on obtient

d2R

dt2=

Q

M

[E0(r)− Q

2MΩ2< ~∇ (EΩ(r))2 cos2(Ωt) >

]. (23)

D’apres l’approximation adiabatique, EΩ2 et ses derivees ne varient pas sur une periode du

micro mouvement donc comme < cos2(Ωt) >= 12, on a

d2R

dt2=

Q

M[E0(r)− Q

4MΩ2~∇ (EΩ(r))2]. (24)

8

Page 9: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Dans l’equation (24) le terme Q4MΩ2

~∇ (EΩ(r))2 est la force ponderomotrice et on voit que lemouvement seculaire, ou macro mouvement, R(t) evolue dans un potentiel effectif donne par

Ueff = U0(r) +Q

4MΩ2(EΩ(r))2 . (25)

En remplacant par l’expression (4) de EΩ on obtient

Ueff = U0(r) +Q

4MΩ2(4z2 + x2 + y2). (26)

On voit que dans le domaine de validite de l’approximation adiabatique le potentiel effectif estconfinant dans les trois directions de l’espace.

1.4.2 Justification des hypotheses

Justifions a posteriori la decision de negliger les deux termes en ξ du membre de droite del’equation (17). En utilisant (19) et (4) on obtient pour les deux termes en ξ du membre dedroite de l’equation (17)

dEΩ(r)

drξ cos(Ωt) =

Q

MΩ2

(V0

2d2

)2

cos2(Ωt)

−2 0 00 1 00 0 1

−2zxy

, (27)

dE0(r)

drξ =

Q

MΩ2

U0

2d2

V0

2d2cos(Ωt)

−2 0 00 1 00 0 1

−2zxy

. (28)

Pour le terme suppose dominant du membre de droite de l’equation (17) on obtient

EΩ(r) cos(Ωt) =V0

2d2cos(Ωt)

−2zxy

. (29)

Pour que le terme de droite de l’equation (27) soit negligeable devant le terme de droite del’equation (29) il faut que ∣∣∣∣ QV0

M2d2Ω2

∣∣∣∣ 1. (30)

De la meme facon, pour que le terme de droite de l’equation (28) soit negligeable devant leterme de droite de l’equation (29) il faut que∣∣∣∣ QU0

M2d2Ω2

∣∣∣∣ 1. (31)

En comparant terme a terme (29) a (27) ou (28), on voit qu’on peut negliger les termes en ξ dumembre de droite de (17) pour n’importe quelle position (x,y,z) si

∣∣ QV0

M2d2r2

∣∣ 1 et QU0

M2d2Ω2 1.D’apres les definitions (9) ceci correspond a

|ax|, |ay|, |az| 1, (32)

9

Page 10: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

et|qx|, |qy|, |qz| 1. (33)

Dans l’approximation adiabatique, on montre que la coordonnee x du mouvement de laparticule est de la forme [MGW06]

x(t) ∝ (1− qx2

cos(Ωt)) cos(ωt), (34)

ou ω est la frequence dite seculaire du mouvement. Ainsi on retrouve le fait que pour quel’amplitude du micro mouvement soit negligeable devant celle du macro mouvement, il fautque |qx|, |qy|, |qz| 1, ce qui est la meme condition que celle de l’equation (33), cela permet de

justifier a posteriori le fait de sortir dEΩ2(x)dx

de la moyenne sur une periode du micro mouvementdans l’equation (24).

2 Piege de Paul lineaire

2.1 Geometrie du piege de Paul lineaire

Il y a differentes facons de realiser un piege de paul lineaire. Le point commun de toutes cesgeometries est que le champ electromagnetique oscillant est 2D, par convention selon les axesx et y. Voici une representation de la geometrie utilisee dans notre groupe: Les dimensions du

Figure 2: A gauche une implementation du piege de paul lineaire avec le schema des connections.difference de potentiel entre les electrodes est V = U0 + V0 cos(Ωt).

piege sont bien sur finies mais les dimensions selon l’axe z sont plus grandes que les autres.Ainsi on peut dire qu’il y a une symetrie par translation selon l’axe z. Ainsi le champ electriqueselon cet axe doit etre nul. On remarque que les electrodes ne sont pas du tout hyperboliques,mais correspondent plutot a un cercle tangent a l’hyperbole. Dans la pratique si R est la

10

Page 11: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

distance la plus courte entre le centre du piege et les electrodes on prend des electrodes de rayon1.15R, comme illustre sur la figure 2. Ce choix de 1.15R correspond aux dimensions optimalespour minimiser les anharmonicites du champ [Den71] [RSM+96]. Ceci fait qu’en pratiqueles potentiels de piegeage ne sont jamais purement quadrupolaires mais ont des composantesd’ordre plus eleve, le prochain terme etant le terme hexapolaire. Meme les pieges avec deselectrodes hyperboliques ont ces termes d’ordre plus eleves car il faut bien tronquer les electrodesa un moment donne (par opposition a des hyperboles infinies) et car la fabrication ne peut pasetre parfaite.

Le potentiel RF est applique a une paire d’electrodes opposees.

2.2 Equations du mouvement et approximation adiabatique

Le potentiel est de la forme

Φ =U0 + V0 cos(Ωt)

2R2(x2 − y2). (35)

Ce potentiel n’est valable que pres du centre avec x, r R.

Les equations du mouvement radial, selon x et y, sont alors:

d2x

dt2+

Q

MR2(U0 + V0 cos(Ωt))x = 0, (36)

d2y

dt2− Q

MR2(U0 + V0 cos(Ωt))y = 0. (37)

En definissant

ax = −ay =4QU0

MR2Ω2, qx = −qy =

2QV0

MR2Ω2et τ =

Ωt

2(38)

on retrouve des equations de type equation de Mathieu que voici:

d2x

dτ 2+ (ax + 2qx cos(2τ))x = 0, (39)

d2y

dτ 2+ (ay + 2qy cos(2τ))y = 0. (40)

De la meme facon qu’en section 1.4 si |ax|, |ay|, |qx|, |qy| 1 l’approximation adiabatique estvalide et [Gho95]:

x(t) ∝ cos(ωxt)(1 +qx2

cos(Ωt)) (41)

y(t) ∝ cos(ωyt)(1 +qy2

cos(Ωt)) (42)

avec:

ωx =Ω

2

√q2x

2+ ax et ωy =

Ω

2

√q2y

2+ ay. (43)

Ainsi le mouvement de la particule est la superposition d’un mouvement seculaire de frequenceωx, ωy et d’un micro mouvement de frequence Ω. Le micro mouvement etant de periode maisaussi d’amplitude bien plus faible que le macro mouvement. De meme qu’en section 1.4 on

11

Page 12: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

peut moyenner sur le micro mouvement et dire que le macro mouvement est gouverne par unpotentiel effectif qu’on ecrit

Φr =M

2(ω2

xx2 + ω2

yy2) (44)

Notons dans l’expression (43) que ay = −ax et qy = −qx donc:

ω2y = ω2

x −2QU0

MR2. (45)

L’effet du U0 est de disymetriser radialement les directions x et y. Dans l’experience et dans lasimulation le fait d’avoir un U0 non nul permet d’eviter une symetrie radiale parfaite qui en-trainerait une conservation du moment cinetique selon l’axe z et qui se traduit par une rotationsans fin du nuage.

Le confinement axial, selon z, est assure par un autre jeu d’electrodes qui cree un potentielquadrupolaire confinant en z et legerement deconfinant en x et y. Il faut faire en sorte que leconfinement RF radial soit plus fort que ce deconfinement.

Figure 3: Illustration du dispositif experimental. Un jeu de quatres electrodes centrales as-surent le confinement radial tandis qu’un autre jeu de quatres electrodes aux bords assurent leconfinement axial avec une tension UDC ≥ 0.

Le potentiel total est donc la somme du potentiel axial

Φz =Mω2

z(M)

2

(z2 − x2

2− y2

2

), (46)

pour un certain ωz constant dans le temps, dependant de M, et du potentiel radial dontl’expression est donnee dans l’equation (35). Ainsi le potentiel total s’ecrit

Φ =U0 + V0 cos(Ωt)

2R2(x2 − y2) +

Mω2z(M)

2

(z2 − x2

2− y2

2

), (47)

et on en deduit le champ electrique

E =U0 + V0 cos(Ωt)

R2(xx− yy) +Mω2

z(M)

(zz− xx

2− yy

2

), (48)

qui est utilise dans le programme pour calculer la force de piegeage subie par un ion avecF = QE.

12

Page 13: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Il est important de noter que la dependance de ωz en M est en 1√M

donc le produit Mω2z(M)

est independant de M, si bien qu’on peut pieger dans le meme piege des ions de massesdifferentes, ce qui est important pour le refroidissement sympathique ou il s’agit de refroidirune espece d’ions avec une autre. Toutefois des ions de masses differentes auront un ωz differentet des parametres de stabilite axiale ax,ay,qx et qy differents. Il faut alors faire attention queles parametres soient dans la zone de stabilite en figure 1 pour les deux especes.

2.3 Potentiel effectif, Profondeur du puits et ordres de grandeurs

Potentiel effectif Le potentiel effectif permettant de decrire le macro mouvement s’ecrit, enutilisant (44) et (46),

Ueff =M

2

(ω2zz

2 + (ω2x − ω2

z)x2 + (ω2

y − ω2z)y

2). (49)

Ordres de grandeurs Pour donner un ordre de grandeur voici un point de fonctionnementtypique du piege:

• U0 = 0.1V, V0 = 200V, Ω = 17MHz, R = 3.5mm

• Pour M = 9 et Q = 1: ax = 3, 07 10−5, qx = 3, 07 10−2, ωx = 190, 4kHz, ωy = 178, 4kHz,ωz = 100kHz

• Pour M = 2 et Q = 1: ax = 1, 381 10−4, qx = 1, 381 10−1, ωx = 836kHz, ωy = 694, 5kHz,ωz = 212, 1kHz

Profondeur du puit de potentiel Donnons un ordre de grandeur de la barriere de potentielen evaluant le potentiel effectif au niveau des electrodes de confinement radial et axial.

Pour M =9 et Q =1, suivant x on trouve une barriere de 0, 59 eV, suivant y une barrierede 0.492 eV et suivant z, a une distance de 1cm, 1, 84 eV.

3 Interaction avec le laser de refroidissement

Dans cette section nous expliquons la facon dont nous traitons l’interaction avec le laser derefroidissement. Ceci s’applique a la partie des ions qui est sensible au laser de refroidissement.Dans le programme on differencie ces ions, ici les ions Be+ des autres par le fait qu’ils sont enpremier dans les tableaux, comme nous le mentionnerons en 9.1.

On considere nos ions comme ayant deux niveaux, le fondamental d’energie E0 et l’etatexcite d’energie E1. Le faisceau laser est de frequence ωL, de desaccord a resonance δω et depulsation de Rabi Ω1, definie comme |<D>·E|

h, avec < D > l’element de matrice du dipole. Ce

faisceau laser est gaussien et passe par l’origine mais n’est pas forcement aligne selon l’axe dupiege. Generalement on aligne le faisceau avec l’axe z mais avec les deux angles de coordonneesspheriques on peut choisir l’angle d’incidence par rapport a l’axe z. Nous traitons l’interactiondes ions avec le laser par des absorptions et des emissions discretes car c’est la methode la plusfidele a la realite. Il est courant d’utiliser des methodes de force effective par exemple. Maisune force effective de friction en −kv va refroidir les atomes continuellement et la physique dela limite Doppler est perdue a moins de rajouter des forces de Langevin. Ainsi pour nous ils’agit d’exprimer les probabilites par intervalle de temps dt:

13

Page 14: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

• d’absorption B12dt

• d’emission stimulee B21dt

• d’emission spontanee A21dt

en fonction de la position et de l’etat interne de l’ion. L’emission spontanee est un resultatd’electrodynamique quantique et on peut exprimer

A21dt = Γdt, (50)

ou Γ est la largeur naturelle de la transition, soit 2π × 19, 4MHz pour le Be+. Bien entenduA21dt = 0 si l’ion est dans l’etat fondamental. D’apres [CPP82] on a

B12dt =Ω2

1

Γ + 4δω2

Γ

dt. (51)

En introduisant le parametre de saturation sans dimension sat = 2Ω2

1

Γ2 , on peut reecrire

B12dt =1

2

Γsat

1 + 4(δωΓ

)2 . (52)

Mais le calcul de [CPP82] est valable pour une onde plane. Dans notre cas il faut prendre en

Figure 4: Un ion au point M se projette sur l’axe de propagation du laser au point H. L’originedu systeme de coordonnees est en O. Le centre du col du faisceau est en C. La distance CWest le waist w0.

compte la structure spatiale du faisceau gaussien en fonction de la distance de l’ion par rapporta l’axe de propagation du faisceau. La figure 4 illustre la situation. L’expression de B21dtdevient donc

B12dt =1

2

Γsat

1 + 4(δωΓ

)2

(w0

w(CH)

)2

e−2

(MH)2

w2(CH) . (53)

14

Page 15: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Il faut exprimer MH et CH dans les coordonnes du piege. Il faut d’abord faire une translationpour passer du systeme de coordonnees de centre O au systeme de coordonnees de centre C. Ennotant (x′,y′,z′) les coordonnees cartesiennes de M dans le systeme de coordonnees de centreC et en notant φ et θ l’angle azimutal et polaire de l’orientation du laser par rapport auxcoordonnes du piege de centre O, on trouve

CH2 = ((x′ cosφ+ y′ sinφ) sin θ + z′ cos θ)2. (54)

Par le theoreme de pythagore on peut ecrire

HM2 = CM2 −CH2 = x′2 + y′2 + z′2 − ((x′ cosφ+ y′ sinφ) sin θ + z′ cos θ)2. (55)

Pour w(z), le resultat de l’optique gaussienne est que [KL66](w0

w(z′)

)2

=1

1 +(z′

z0

)2 , (56)

avec la longueur de rayleigh z0 =πw2

0

λou λ est la longueur d’onde du laser de refroidissement.

L’expression de B12dt devient

B12dt =1

2

Γsat

1 + 4(δωΓ

)2 e−2

(MH)2

w20

1

1+( zz0 )

2 1

1 +(zz0

)2 . (57)

En ce qui concerne B21dt on a

B21dt =g1

g2

B12dt, (58)

avec g1 la degenerescence du niveau 1 et g2 la degenerescence du niveau 2. Bien entendu laprobabilite d’absorption B12dt est nulle si l’ion est dans l’etat excite et la probabilite d’emissionstimulee B21dt est nulle si l’ion est dans l’etat fondamental.

Du point de vue numerique, a chaque pas de temps, si l’ion est dans l’etat fondamental onfait un tirage aleatoire pour savoir si il absorbe, et s’il est dans l’etat excite on fait un tiragealeatoire pour savoir s’il emet par emission stimulee, par emission spontanee ou s’il n’emet pas.Et s’il emet par emission spontanee il faut encore tirer aleatoirement la direction d’emissiondu photon. A chaque absorption et a chaque emission on ajoute ou on soustrait l’impulsion duphoton emis ou absorbe.Exemple: Supposons que l’ion soit dans l’etat fondamental et que le resultat de B12dt est 0, 002.On tire un nombre aleatoire entre 0 et 1. Si le nombre est inferieur a 0, 002, l’ion absorbe etgagne l’impulsion du photon.Exemple: Supposons que l’ion soit dans l’etat excite et que B21dt = 0.0005 et A21dt = 0.0015.On tire un nombre aleatoire α entre 0 et 1. Si 0 < α < 0.0015 il y a emission spontanee, si0.0015 < α < 0.02 il y a emission stimulee, sinon rien ne se passe.

Le choix arbitraire de tirer l’emission spontanee puis l’emission stimulee introduit un bi-ais qui diminue la probabilite de l’emission stimulee, on peut montrer que ce biais decroitlineairement avec A21dt. Etant donne notre pas de temps de 2 10−10 on montre que le biais

15

Page 16: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

est negligeable et connaissant son expression on pourrait facilement le corriger. On negligeaussi les phenomenes d’absorption et d’emission multiple lors d’un pas de temps car les proba-bilites de transitions sont suffisamment faibles. De plus, on neglige l’attenuation du faisceau parle nuage car le nombre de photons absorbe par pas de temps est tres inferieur au flux de photon.

Lorsqu’il y a emission spontanee il faut tirer aleatoirement la direction d’emission du photon.Pour ce faire on tire φ entre −π et π et pour obtenir θ on tire un nombre entre −1 et 1 donton prend l’arccosinus. En effet l’element de surface de la sphere est sin(θ)dθdφ = |d cos(θ)| dφdonc il faut que la distribution de φ et cos(θ) soit uniforme, et comme la distribution de cos(θ)doit etre uniforme il faut que la distribution de θ soit en arccos([−1, 1]).

4 Taille du nuage d’ions pour le refroidissement sympa-

thique

L’objectif de cette section est de donner des formules theoriques approximatives pour la tailleet les dimensions du nuage d’ions Be+ en fonction du nombre d’ions et des parametres depiegeage. Dans notre derivation nous faisons trois suppositions:

• La distribution des ions forme un ellipsoıde de revolution autour de l’axe z, uniformementcharge.

• L’approximation adiabatique est verifiee et donc le modele du potentiel effectif aussi.

• Le nuage est a l’equilibre.

Le potentiel d’une ellipse uniformement chargee est donne, a l’interieur de l’ellipsoıde,par [Tur87]

VE(r, x, y) = πnqa2b2√

a2 − b2arcsin

(√a2 − b2

a2

)

−(x2 + y2

)πnqa2b

[1

(a2 − b2)32

arcsin

(√a2 − b2

a2

)− b

(a2 − b2) a2

]

+ z2πnqa2b

[2

(a2 − b2)32

arcsin

(√a2 − b2

a2

)− 2

(a2 − b2) b

], (59)

avec n la densite d’ions, q la charge des ions, a l’axe de l’ellipse dans le plan (x,y) et b l’axe del’ellipse en z.Comme nous supposons une symetrie de revolution autour de l’axe z de l’ellipsoıde il faut queU0 = 0, et l’isopotentiel effectif de piegeage, avec le modele du potentiel effectif, est de la forme

Veff =1

2m[ω2x

(x2 + y2

)+ ω2

zz2], (60)

cf l’equation (49) dans le cas ou il y a symetrie entre les axes x et y.A l’equilibre, la force electromagnetique due au potentiel (59) doit compenser la force de

16

Page 17: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

piegeage due au potentiel effectif (60) a l’interieur du nuage. Cela est possible si Veff + VE estuniforme dans le nuage, donc si

ω2z

ω2x

= −2arcsin

√1− 1

α2 − α√

1− 1α2

arcsin√

1− 1α2 − 1

α

√1− 1

α2

(α > 1) , (61)

avec α = ab

le rapport d’aspect. La formule (61) est valable pour α > 1, c’est a dire pour le casd’une ellipsoıde aplatie. Pour une ellipsoıde allongee avec α < 1 les arcsin sont remplaces pardes argsinh et la formule devient

ω2z

ω2x

= −2argsinh

√1α2 − 1− α

√1α2 − 1

argsinh√

1α2 − 1− 1

α

√1α2 − 1

(α < 1) , (62)

Pour des parametres de piegeage donnes on connait ωz et on peut calculer ωx, on obtient donc ω2z

ω2x

ce qui nous donne α en inversant la formule (61) ou (62) avec un logiciel comme Mathematica.De plus l’equation de Poisson donne la densite de charge ρ a partir du potentiel de piegeagepar ∆V = ρ

ε0= qn

ε0= m

(ω2x + ω2

y + ω2z

). Le volume du nuage est donne par 4

3πa2b = 4

3πα2b3 et

vaut aussi Nions

ρ. On peut exprimer b et on a

b =

(3Nions

4πα2ρ

) 13

. (63)

Ayant exprime l’axe de l’ellipsoıde suivant l’axe z en (63) on peut evaluer le potentiel aux bordsdu nuage via la forme de potentiel (60), et on obtient

Ebord =1

2mω2

z

(3

4πα2ρ

) 23

N23ions. (64)

Nous montrons en figure 5 la courbe que nous obtenons pour la valeur du potentiel de piegeageaux bords du nuage en fonction du nombre d’ions.

Pour le refroidissement sympathique, la valeur du potentiel aux bords du nuage nous donneun bon ordre de grandeur de l’energie incidente des ions que le nuage pourra capturer et refroidirfacilement. En effet, des ions partant avec une energie cinetique similaire a l’energie potentielaux bords du nuage vont passer la plus part de leur temps a osciller a l’interieur du nuage etnon pas a l’exterieur. A l’inverse, des ions partant avec une energie cinetique bien plus grandeque l’energie potentiel des ions aux bords du nuage vont avoir une amplitude d’oscillation plusgrande que la taille du nuage et vont donc passer la plus part de leur temps hors du nuage.La croissance en puissance deux tiers de l’energie potentiel aux bords du nuage permet decomprendre le besoin d’avoir de gros nuages avec beaucoup d’ions pour pouvoir refroidir desions energetiques.

5 Refroidissement Sympathique et besoin de puissance

de calcul

Le piegeage d’ions a plusieurs applications, notamment la spectroscopie. Dans notre groupenous utilisons un piege de Paul lineaire. Le confinement suivant l’axe z est assure par un champ

17

Page 18: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Figure 5: Valeur du potentiel de piegeage aux bords du nuage en fonction du nombre d’ionsavec V0 = 200V,Ω = 2π × 17MHz,ωz = 300kHz et R=3, 5mm.

statique quadrupolaire confinant en z et deconfinant radialement. Le confinement radial estlui assure par un champ quadrupolaire RF alternativement confinant/deconfinant suivant x ety. Le champ total est de la forme (48). Les equations du mouvement d’un ion dans un telsysteme sont les equations de Mathieu et on peut montrer qu’avec des choix d’amplitudes etde frequence judicieux le piege est confinant, par exemple dans la zone de stabilite illustree enfigure 1.

Pour la spectroscopie de precision il faut non seulement pieger mais aussi refroidir les ions.Le refroidissement laser vient naturellement a l’esprit mais certains ions et molecules ont destransitions dont la longueur d’onde est inaccessible aux lasers actuels et d’autres n’ont pas detransitions a un photon. Il faut alors recourir au refroidissement sympathique. Pour cela, onpiege un nuage mesoscopique d’ions refroidis par laser et on introduit un faible nombre d’ionsqui ne peuvent pas etre refroidis par laser. Ces derniers vont alors se thermaliser par interactioncoulombienne avec le nuage d’ions refroidis par laser. C’est ce qu’on appelle le refroidissementsympathique.

Toutefois, les equations du mouvement (39) et (40) ne peuvent pas etre resolues exactementanalytiquement et des qu’on a plus de 2 ions dans le piege on a a faire a un probleme a N corps.Il faut donc simuler le probleme numeriquement. L’interaction coulombienne corps a corps entreles ions croit comme N2 donc pour simuler 10 fois plus d’ions en un temps donne il faut 100 foisplus de puissance de calcul. Dans certains domaines des approximations ramenent le problemea des complexites en N ou N ∗ ln(N). Mais ces approximations ne sont pas valables dans nosnuages d’ions ou les nombres d’ions ne sont ni infimes ni colossaux et ou la densite est presquehomogene dans un domaine bien delimite, voir figure 7, et ou les effets de bords jouent un roleimportant. En astrophysique par exemple on parle d’algorithmes a arbres ou l’interaction entre

18

Page 19: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

corps celestes relativement proches, par exemple dans une galaxie, est calculee exactement maisl’interaction entre corps de galaxies differentes est approximee par centre de leur masse. Onpeut ainsi continuer avec les clusters de galaxies, donc dans le cas de l’astrophysique ce sontles gradients de densites qui permettent d’approximer. De telles approximations n’existant pasdans notre cas, nous calculons l’interaction coulombienne de facon exacte. Il nous faut doncbeaucoup de puissance de calcul.

La necessite de simuler elle-meme vient bien sur du besoin de comprendre les phenomenes enjeu et par exemple de voir l’effet de certains parametres. Simuler peut par exemple permettred’optimiser le refroidissement sympathique pour capturer un maximum d’ions en un minimumde temps.

• Dans le projet GBAR, dont notre groupe faire partie, il s’agira de capturer et refroidirde l’antimatiere avec un minimum de pertes et en un minimum de temps car la duree devie des ions d’antimatiere sera de l’ordre de la seconde.

• Nous souhaitons refroidir sympathiquement des ions moleculaires H+2 pour faire de la

spectroscopie de haute precision en vue par exemple de faire des mesures sur la derivedes constantes fondamentales. Cette tache est difficile car H+

2 n’est charge qu’une fois etson ratio de masse avec le Be+ est de 2 pour 9.

• Nous souhaitons refroidir sympathiquement des ions multi-charges tels que 40Ar13+ et208Pb28+ interessants pour les tests de QED et les applications aux horloges.

Part III

Partie Numerique

6 GPU

6.1 Qu’est-ce que le GPU?

Le GPU ou Graphical Processing Unit est le nom donne aux puces dediees au calcul desgraphiques dans les jeux videos et dans les applications plus professionnelles tels que le rendugraphique pour les animations 3D dans les films par exemple.

Historiquement la principale utilisation du GPU a toujours ete le jeux video. La raisond’etre de cette puce dediee au graphisme est que le CPU n’est pas assez puissant pour genererles graphismes sur des millions de pixels en temps reel.

Le CPU peut repondre plus rapidement a une faible charge de travail que le GPU alors quele GPU a un ordre de grandeur de puissance de calcul supplementaire lorsqu’il y a suffisammentde travail disponible. On dit que le CPU est optimise latence et le GPU optimise debit. Auniveau du silicium le GPU a plus d’unites de calculs mais le CPU a plus de memoire cache etd’unites de structure de controle (gestion des instructions, des boucles, des conditions).

L’idee d’exploiter la formidable puissance de calcul du GPU pour faire des simulations vientalors naturellement a l’esprit. De tels demarches ont eu un certain succes mais la programmationsur GPU etait artificiellement difficile dans la mesure ou il fallait deguiser sa simulation enartifices comprehensibles par le GPU. Ce n’est qu’au debut 2007 que la premiere version du

19

Page 20: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

CUDA est apparue. Le CUDA est un langage de programmation proprietaire de Nvidia quifonctionne sur leurs GPU et qui est base sur le langage C++. Avec ce langage bien plus familieret intuitif le developpement de simulations sur GPU est devenu beaucoup plus accessible.

6.2 Pourquoi calculer sur GPU?

Outre les questions de performances mentionnee dans la section precedente, il faut aussi men-tionner que le GPU a des rapports cout-performance et performance-consommation electriqueplus avantageux.

En effet comparons un CPU et un GPU recents, disons le Intel i7 4770K et la NvidiaTitan Black. Le 4770K coute 300 euros TTC et donne aux alentours de 180 MFlops en doubleprecision tandis que la Titan Black coute 1000 euros TTC et donne 1.3 TFlops. Ainsi onvoit dans cet exemple que le ratio entre performance et cout est 2.2 fois plus avantageux enfaveur du GPU. Bien entendu ce ratio depend beaucoup du CPU et du GPU que l’on compare,neanmoins l’avantage est toujours du cote du GPU. De plus un 4770K consomme 84W et laTitan Black 250W ce qui equivaut a un ratio entre performance et consommation electrique2.5 fois meilleur en faveur du GPU.

Les considerations energetiques ont longtemps ete negligees mais dans les toutes dernieresannees, tous les meilleurs super-ordinateurs ont ete batis a base de GPU. Aujourd’hui les10 super-ordinateurs les plus puissants sont a base de GPU. La raison est precisement cetteproblematique energetique car au fil des annees le cout electrique a cru de paire avec la puissancede calcul au point qu’aujourd’hui a 0.137 euros du Kwh (tarif EDF 2014 pour les menages) ilcoute 100.8 euros a l’annee pour faire tourner (sans arret) un 4770K. Soit 1 tiers de sa valeurmarchande TTC grand public en un an pour faire du calcul. Il faut tout de meme garderen tete que les institutions comme les universites paient leur electricite moins cher que lesparticuliers mais on peut aussi concevoir qu’elles recoivent des remises sur l’achat de quantitesde processeurs necessaires a la construction d’un super-ordinateur. Dans touts les cas, cetexemple montre bien a quel point les couts electriques sont devenus une question importante.

Nous avons ainsi vu en comparant un CPU et un GPU moderne que le GPU a un ordre degrandeur de puissance de calcul de plus que le CPU, que son cout pour atteindre un niveaude performance donne est 2 fois meilleur et que son cout sur le long terme est lui aussi 2 foismeilleur.

6.3 Pourquoi le GPU est-il plus efficace?

6.3.1 En terme de vitesse

Comme nous l’avons mentionne, le GPU a un ordre de grandeur de plus que le CPU en termede puissance de calcul. Une explication partielle est que le GPU est optimise debit alors quele CPU est optimise latence. Ainsi le CPU est plus apte a faire face rapidement a toutessortes de petites taches tandis que le GPU est mieux utilise lorsqu’il y a une grosse charge detravail a effectuer. Il est typique de voir les performances d’un programme sur GPU augmenteravec la charge de travail jusqu’a une valeur de saturation. Et des taches minuscules telles quel’incrementation d’une variable prennent de l’ordre de la dizaine de microsecondes tandis qu’unprocesseur peut facilement faire ce genre d’operation en quelques cycles d’horloges(<1ns).

Idem pour la memoire du GPU (dite GDDR), qui a sur la Titan Black un debit de∼300GB/scontre ∼13GB/s pour la memoire DDR3 moderne qui accompagne le CPU. Les temps delatences eux sont de ∼8ns pour la DDR contre ∼15ns pour la GDDR.

20

Page 21: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Au niveau de l’architecture on dit que les GPU n’ont quasiment que des unites de calcultandis que le CPU a beaucoup plus de memoire cache et d’unites de structure de controle.

6.3.2 En terme d’efficacite energetique

La raison pour laquelle le GPU est considerablement plus efficace energetiquement que le CPUest que c’est un processeur massivement parallele.

En effet lorsque l’on veut augmenter le debit d’un processeur, on peut par exemple doublersa cadence ce qui double le courant necessaire. Hors la puissance dissipee croıt comme le carredu courant. Ainsi sa consommation electrique est multipliee par 4. Si par contre on utiliseun deuxieme processeur on double la puissance de calcul et la consommation electrique aussi.Ainsi la consommation electrique d’un processeur est quadratique en FLOP tandis que celled’une hypothetique machine infiniment parallelisee est lineaire.

C’est pour cette raison que depuis des annees les fabricants de processeurs ont cessed’augmenter la frequence d’horloge de leurs puces, obliges d’avoir recourt a d’autres methodestels que le passage de processeurs simple coeur a multicoeur et l’amelioration de la finesse degravure pour graver plus de transistors sur la meme puce et ainsi partager le travail (une formede parallelisation en fait).

Aujourd’hui une Titan Black contient 2880 coeurs contre 4 pour un 4770K. Les CPU lesplus parallele ont aujourd’hui 16 coeurs.

6.4 Pourquoi tout le monde n’utilise pas les GPU?

Le GPU presente des avantages considerables pour la simulation numerique car les chargesde travail sont considerables et souvent assez simples, par exemple un tres grand nombre decalculs d’interaction gravitationnelle entre corps celestes puis une mise a jour des positionsen astrophysique. La question se pose alors: pourquoi tout le monde n’utilise pas les GPU?Outre le fait qu’il faut un certains temps pour changer les moeurs, il faut mentionner le faitque la programmation sur GPU est plus compliquee que sur CPU. Cette difficulte accrue estdue en partie aux difficultes associees a la programmation parallele et en partie a la necessited’apprendre et d’utiliser l’architecture specifique du GPU qui a, par exemple, une certainehierarchie de coeurs et de memoire, decrite en section 8.

6.5 Quelles sont les options pour programmer sur GPU?

Il existe plusieurs options pour arriver a ses fins avec les GPU.

6.5.1 Le CUDA

Le CUDA, ou Compute Unified Device Architecture, a deja ete introduit en section 2.1. Il fonc-tionne sur les GPU de Nvidia qui a l’heure actuelle sont les plus communs, les plus performantset les plus efficaces du point de vue energetique.

6.5.2 L’OpenCL

L’OpenCL est un langage apparu environ un an apres le CUDA qui a le merite de ne pas etreproprietaire et qui fonctionne non seulement sur les GPU des deux fabricants Nvidia et AMDmais aussi sur les CPU multicoeurs et d’autres systemes plus exotiques tels que les Xeon Phi.

21

Page 22: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Ce langage est toutefois moins bien documente et semble moins pratique que le CUDA. Il estneanmoins en regle generale tout autant capable de tirer partie des performances du materielavec un style de programmation identique.

6.5.3 L’OpenACC

Ce dernier n’est pas reellement un langage mais plutot un standard tel que l’OpenMP qui visea transferer la difficulte du programmeur au compilateur. Avec ce langage on peut transformerson code CPU en code GPU avec quelques ”directives”, qui sont concretement des commen-taires a destination du compilateur. L’OpenACC a le merite de permettre un transfert de soncode CPU vers le GPU avec un minimum d’effort. Toutefois les performances ne sont pastoujours tres bonne car il y a des limites a l’intelligence du compilateur et a l’heure actuelle lescompilateurs qui supportent l’OpenACC sont assez chers et au nombre de 3 (Cray,CAPS,PGI)et il faut tout de meme reflechir et apprendre l’OpenACC pour donner les bonnes directives aucompilateur et obtenir des resultats justes.

6.6 Y-a-t il plus performant que le GPU?

6.6.1 ASIC

ASIC est un acronyme pour Application-Specific Integrated Circuit. Les ASIC ont gagnes ennotoriete dans le monde des crypto-monnaies ou des compagnies se sont misent a vendre desASIC pour leur ”minage”. L’exemple le plus celebre est bitcoin.

Les ASIC sont des processeurs ayant pour seul but de faire un calcul bien determine. Ainsiles ASIC se passent de tous les concepts de structure de controle et d’instructions que les CPUet les GPU ont. Ces puces ou chaque transistor est construit pour un calcul specifique gagnentun ordre de grandeur par rapport aux GPU en termes de performances par watt. Mais donnerdes chiffres exactes est dur car les ASIC sont peu utilises. Peu versatile, un ASIC est beaucoupplus cher...

En astrophysique plusieurs iterations de la machine ”GRAPE” [MS12] ont etes realisees aufil des annees. Cette machine n’etait autre qu’un ASIC.

6.6.2 FPGA

Les FPGA, ou Field-Programmable Gate Array, sont a mi-chemin entre les GPU et les ASICtant par leur nature que par leurs performances. Les FPGA sont en quelques sortes des ASICprogrammables. Avec des signaux electriques, on peut changer les connections entre transistorset autres composants electroniques dans le FPGA. Ainsi on peut programmer le FPGA pourse comporter ensuite comme un ASIC plutot performant.

Mais cette programmabilite coute au FPGA une part de performance et il se retrouve ainsia mi-chemin entre le GPU et l’ASIC en terme de performance par Watt. De plus les FPGAsont efficaces mais en general pas tres rapides. Il en faut donc plusieurs pour atteindre la vitessed’un GPU et le final cout est significativement plus eleve.

Avec la finesse de gravure toujours plus poussee les couts de developpement d’ASIC ontbeaucoup augmentes et les astrophysiciens ont arrete de faire de l’ASIC pour leur machineGRAPE. GRAPE-8 a utilise une technologie exotique a mi chemin entre le FPGA et l’ASICtandis que la derniere iteration GRAPE-9 utilise des FPGA commerciaux. Avec GRAPE-9 ilsaffichent un ratio de performance par watt 4 fois meilleur qu’une Titan mais la machine coute

22

Page 23: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

20 fois plus que cette derniere pour des performances similaires. Toutefois, la duree de vied’un systeme informatique est de l’ordre de quelques annees donc les economies d’electricite necompenseront jamais le cout initial compare au GPU.

On peut conclure que le GPU est une bonne option car performant a bas prix car le marcheet large et donc les fabricants font des economies d’echelle.

7 Introduction au C++

Comme nous l’avons mentionne le CUDA est base sur le C++. Comme ce rapport est adestination de physiciens nous supposons une connaissance du Fortran et introduisons quelquesfonctionnalites du C++ importantes pour la comprehension du CUDA. Il faut bien comprendreque le style de programmation relativement simple et direct du Fortran est tout a fait faisableen C++. Mais ce langage a aussi bien d’autres fonctionnalites meme s’il n’a pas certainesfonctionnalites du Fortran, notamment la syntaxe simplificatrice (:) pour manipuler touts leselements d’un tableau selon une dimension.

7.1 Pointeur

7.1.1 Pointeur, operateur reference et operateur dereference

Le pointeur est peut-etre la plus grande difference avec le Fortran qui merite d’etre expliqueecar il est present partout dans les codes en C et C++.

Si j’ai une variable a qui contient une valeur, je peux acceder a son adresse memoire avecl’operateur reference &. Je peux par exemple stoker l’adresse memoire de a dans un pointeurp. Ainsi si j’ai declare a comme un entier et que j’ai bien declare p comme un pointeur d’entier,je peux manipuler a a partir de p. En voici un exemple:

int a=2;int *p;p=&a;*p=3;

La derniere ligne donne la valeur 3 a a et l’operateur * est appele operateur dereference, il nousa permis d’acceder a la valeur stockee dans l’adresse memoire vers laquelle pointe le pointeurp.

7.1.2 Les tableaux

Le pointeur est utilise dans tous les langages pour gerer les tableaux, meme si dans beaucoupd’entre eux le pointeur est cache au programmeur qui peine alors a comprendre certains com-portements lorsqu’il fait l’egalite entre tableaux sans savoir qu’il fait reellement une egalite entrepointeurs (le python est un tel exemple). La necessite des pointeurs vient du fonctionnementdes ordinateurs et on les retrouve en assembleur.

En C++, si a la compilation il est connu qu’il y aura besoin d’un tableau t de N nombresa virgule flottante de simple precision, on peut declarer:

float t[N];

23

Page 24: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

L’objet t est en realite un pointeur qui contient l’adresse memoire du premier element dutableau. Si j’accede au premier element du tableau avec t[0], j’obtiens le meme resultat qu’avec*t. Si je veux ensuite acceder a l’element i avec t[i] le compilateur sais que c’est un pointeur detype float et va donc partir de l’adresse memoire du premier element et sauter i fois 4 octets(la taille d’un float) pour donner la valeur du i -ieme element du tableau. Attention a ne pasessayer d’acceder a de la memoire en dehors du tableau sous peine d’erreur de segmentation.

Allocation Dynamique de la Memoire Lorsque la taille d’un tableau n’est pas connue lorsde la compilation, car elle depend des parametres definis dans un fichier d’entree par exemple,il faut utiliser l’allocation dynamique de la memoire. En Fortran on le fait generalement avecle mot clef allocatable. En C on utilise la fonction malloc() et en C++ on peut utiliser le motclef new mais les malloc() marchent aussi.

7.1.3 La programmation orientee objet

La programmation orientee objet (OOP) est un terme tres courant lorsqu’on parle de program-mation. Il s’agit de pouvoir definir des objets outre ceux deja presents dans le langage telsque les float et les double, les double etant les nombres a virgule flottante de double precision.Dans le CUDA pour des raisons de performances un objet nomme double3 a ete predefini. Ilregroupe simplement 3 double ensemble. Si je defini un double3 d j’ai ensuite acces a ses troisdouble avec d.x, d.y et d.z. Ceci est probablement l’exemple le plus simple de programmationorientee objet. On peut definir a peu pres tout et n’importe quoi comme un objet au point dedeguiser tout son code comme un grand objet. Ceci n’est toutefois absolument pas necessairemais apparemment beaucoup pratique au niveau professionnel car il aide a repartir les tachesentre les programmeurs d’une equipe et a rajouter des gardes-fous sans rendre le programmeplus lent car toutes ces choses sont gerees a la compilation par le compilateur.

8 Le modele de programmation du CUDA

Nous avons decider de choisir le GPU, plus precisement des GPU NVidia, comme plateformede calcul pour ameliorer les performances des simulations. Dans cette section nous discutonsdu modele de programmation du CUDA, langage utilise pour le developpement de notre code.

8.1 Architecture physique et terminologie

8.1.1 Host et Device

Un GPU fonctionne en recevant des instructions du CPU. Ceci est vrai en CUDA, en OpenCLet dans le fonctionnement de tous les jeux videos. Le CPU est qualifie de Host (hote) et leGPU est qualifie de Device (dispositif,moyen...). Sur une carte mere le CPU a la place centraleet est le cerveau des operations tandis que le GPU est sur une carte optionnelle qu’on peutmettre dans un des ports PCI-E.

8.1.2 Coeurs, Warps et Streaming Multiprocessors

Un GPU est compose d’un nombre de coeur relativement eleve, 2880 pour la Titan Black. Cescoeurs physiques peuvent faire un certains nombre d’operations par cycle d’horloge. Ces coeurs

24

Page 25: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

sont repartis en ”SM” (Streaming Multiprocessor). Ces SM sont au nombre de 15 sur une TitanBlack. Ce qui laisse 192 coeurs par SM. Ces SM sont encore subdivises en 6 ”warp” de 32 coeurs.Pour maximiser les unites de calcul dans le GPU des sacrifices ont notamment ete fait au niveaudu nombre d’unites de controle. En l’occurrence il n’y a qu’une unite de controle pour les 32coeurs d’un warp. On parle d’architecture SIMT, Single Instruction Multiple Threads. Cecia pour inconvenient que les threads d’un warp doivent tous faire la meme chose. Si la moitiedes threads veulent faire une chose et l’autre moitie un autre operation, les operations sontsequentialisees. La moitie des threads fait son operation tandis que l’autre moitie ne fait rien etau prochain coup d’horloge l’autre moitie des threads fera son operation. Dans cette exempleles performances sont diminuees de moitie. On appelle ce probleme le thread divergence et ilest important de l’eviter dans son code pour avoir de bonnes performances. Dans le pire descas on peut perdre un facteur 32 sur les performances.

8.1.3 Memoire globale, partagee, cache L1, constante et texture

Memoire Globale Le GPU possede une quantite de memoire GDDR assez eleve, 6GB pourla Titan Black. Cette large quantite de memoire est localisee sur la carte portant la puce. Laquasi totalite de cette memoire est dite ”globale”. C’est la memoire la plus lente du GPU.Il faut un temps aux alentours de 300 cycles d’horloges pour effectuer un acces a la memoireglobale. Soit ∼0.3µs.

Memoire Cache L1 et Partagee Il y a aussi une tres faible quantite de memoire cachesur chaque SM a repartir entre memoire dite ”partagee” et memoire ”locale” ou ”cache L1”.La memoire partagee est accessible par les differents coeurs d’un SM et leur permet donc departager de l’information, d’ou son nom. Mais cette memoire a aussi des proprietes de vitessetres interessante puisqu’on peut y acceder en un temps equivalent a quelques cycles d’horloge,soit ∼100 fois plus rapide que la memoire globale. La memoire locale ou memoire cache estelle aussi rapide mais est privee a chaque coeur. On parle aussi de registres. Sur les GPUmodernes il y a 64KB de memoire par SM a repartir entre memoire partagee et memoire locale.Ce nombre est considerablement inferieure aux 6GB de memoire globale.

Memoire Constante Il existe aussi une memoire dite ”constante” de 64KB. Cette memoireest en fait situee dans la memoire globale et est aussi lente que cette derniere. Son interet residedans la facon dont, lorsque les coeurs d’un meme demi-warp accedent a la meme donnee enmemoire constante, le transfert de memoire est mis en commun. En d’autres terme la latence dela memoire constante est la meme mais son debit peut etre jusqu’a 16 (la taille d’un demi-warp)fois meilleur. Un warp peut acceder a une donnee en memoire constante en deux operations aulieu de 32.

Memoire de Texture Cette memoire est aussi localisee dans la memoire globale et possedecette meme propriete de reutilisation du transfert parmi les coeurs d’un warp. La difference estqu’il ne faut pas que tous les coeurs accedent a la meme donnee mais plutot a des donnees cotea cote en 2D. Dans ce rapport, nous ne cherchons pas a bien expliquer le fonctionnement decette memoire car nous ne l’utilisons pas. Elle est particulierement adaptee pour les graphismesou par exemple chaque coeur va s’interesser a un pixel et ses plus proches voisins. Il y a ainsiplusieurs coeurs qui s’interessent au meme pixel, de plus les pixels sont dans la logique untableau 2D puisque l’ecran est un plan.

25

Page 26: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

8.2 Structure Logique d’un Programme

8.2.1 Blocks et Threads

Threads La terminologie des threads n’est pas nouvelle puisque le meme terme est utilisedans la parallelisation sur CPU. Un thread est une sequence d’instructions, un processus,independant des autres threads. Si on lance 2 programmes simple coeur sur un CPU on auratypiquement 2 threads geres par le systeme d’exploitation et si le CPU est simple coeur cedernier va faire executer tantot des instructions du thread 1 et tantot des instructions duthread 2. Si le CPU est double coeur il pourra executer les deux threads en parallele. Sur CPUc’est la que reside la difficulte de programmation parallele, il faut diviser son code en threadsindependant les uns des autres et reflechir au minimum d’endroits ou les differents threads ontbesoin de partager leurs resultats etc... En l’occurence on peut arriver a de bons resultats avecl’OpenMP qui, suivant les codes, parallelisera plus ou moins bien le programme.

Blocks Les blocks sont un echelon supplementaire dans la hierarchie et existent en CUDA eten OpenCL (sous un nom different). Les blocks regroupent des threads. Un block existe dansun seul SM a la fois. Du point de vue du programmeur la pertinence des blocks est la suivante:

• Les threads d’un meme block ont acces a la meme memoire partagee

• Une fonction syncthreads() synchronise les threads d’un block. C’est a dire qu’aucunthreads n’avancera plus loin dans le code tant que les autres threads du block n’aurontpas atteint le syncthreads()

De facon plus technique il y a aussi des limitations au niveau du nombre de blocks, de laquantite de memoire partagee par block etc...

Plusieurs blocks peuvent resider en meme temps dans le meme SM et il peut y avoir plusde threads que de coeurs. A l’instar du fonctionnement d’un CPU, les coeurs feront tantotdes instructions d’un thread d’un certains block tantot des instructions d’un autre threadappartenant potentiellement a un autre block. Une partie tres importante des performancesd’un GPU vient de la facon dont le hardware choisit intelligemment quels threads executer aun moment donne. Par exemple une fois une requete memoire effectuee le controle est donne aun autre thread pendant qu’on attend le transfert dont nous avons deja discute la latence.

8.2.2 Kernel

Declaration Le kernel est assimilable a une fonction. D’ailleurs la declaration d’un Kernelse fait comme celle d’une fonction mais avec le prefixe global . Comme une fonction, lekernel contient des instructions en tout genre notablement des acces memoire et des operationsmathematiques. La difference est que le kernel est voue a etre lance sur le GPU par le CPU.

Lancement Le lancement d’un kernel se fait de facon similaire au lancement d’une fonctionmais avec l’ajout de <<<grid,threads,size,stream>>> entre le nom du kernel et ses parametres.Lancer une fonction ressemble a:

mafonction(parametre1,parametre2,...);

Tandis que lancer une kernel ressemble a:

monkernel<<<grid,threads,size,stream>>>(parametre1,paramete2,...);

Expliquons maintenant quels sont ces quatres parametres grid,threads,size,stream.

26

Page 27: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Grid Le grid peut etre soit un entier soit un objet de type predefini dans le CUDA: le dim3.Le dim3 n’est autre que 3 entiers mis ensemble. Le grid correspond au nombre de blocks quiseront lances. Si un entier n est choisit il y aura n blocks et le grid est dit unidimensionnel.La dimension du grid de blocks peut aller jusqu’a trois avec un dim3. En mettant le nombrede blocks selon une des trois dimensions a 1 on peut avoir un grid bidimensionnel. L’interetd’un grid multidimensionnelle est de simplifier les choses pour certains programmes. Suivantl’application un grid bi ou tri dimensionnel peut etre beaucoup plus intuitif.

Dans notre cas nous n’utilisons qu’une grille unidimensionnelle de blocks.

Threads Le deuxieme parametre peut lui aussi etre un entier ou un dim3. Il designe le nombrede threads dans chaque block. De la meme facon, des blocks de threads multidimensionnelssont possibles uniquement pour des raisons de flexibilite. Dans les GPU recents il existe unelimite de 1024 threads par blocks a repartir selon les 3 dimensions tel que cela nous arrange.

Size Le troisieme parametre est optionnel et est utilise pour l’allocation dynamique dela memoire partagee. Si a la compilation, la quantite de memoire partagee est connue ladeclaration se fait dans le kernel de la facon suivante:

shared type monpointeur[nb elements];

Ou type peut etre int,double,bool ou float par exemple.Si par contre la quantite de memoire partagee est une variable a l’execution il faut recourir a

l’allocation dynamique et celle-ci se fait via ce troisieme parametre optionnel. Nous ne discutonspas plus en detail l’allocation dynamique de la memoire partagee car nous ne l’utilisons pasdans le code. Lorsque nous avons du donner une valeur a ce parametre optionnel nous lui avonsdonne une valeur de 0 car nous n’allouons pas de memoire partagee dynamiquement.

Stream Le quatrieme parametre est lui aussi optionnel et prend un objet de type cudaS-tream t. Nous abordons les stream dans la partie suivante.

8.2.3 Stream

On declare d’abord un objet de type cudaStream t :

cudaStream t stream0;

Puis on cree le stream en l’associant a un GPU donne, par exemple le GPU numero 0:

cudaSetDevice(0);cudaStreamCreate(&stream0);

On peut ensuite lancer des kernels et des transferts de memoire dans ce stream et en lancerd’autres dans un autre stream. Les instructions dans un meme stream sont traitees en sequentieltandis que les instructions dans des streams differents sont traitees en parallele. On peutattendre la fin de l’execution des taches lancees precedemment dans un stream avec:

cudaStreamSynchronize(stream0);

27

Page 28: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

8.2.4 Synchronicite et Asynchronicite

Synchronicite Dans le jargon du CUDA une fonction est dite synchrone si lorsqu’elle estappelee le CPU lance les instructions au GPU puis attend la fin de l’execution avant de reprendrele code. Un exemple de fonction synchrone est:

cudaMemcpy(pointeur destination,pointeur source,size,cudaMemcpyHostToDevice,stream);

Cette fonction copie une quantite de donnee size de l’adresse memoire vers laquelle poin-teur source pointe vers l’adresse memoire vers laquelle pointeur destination pointe. Le dernierparametre peut prendre plusieurs valeurs, les deux qui sont pertinentes sont cudaMemcpyHost-ToDevice et cudaMemcpyDeviceToHost. La premiere permet de preciser un transfert du CPUvers le GPU et la deuxieme l’inverse. Ce dernier parametre est devenu obsolete avec les derniersGPU et les systemes 64 bits dans lesquels le systeme sait, a partir des pointeurs, si le transfertva du CPU au GPU ou l’inverse. Il faut juste faire attention de bien mettre les pointeursdans le bon ordre. Ainsi on voit un exemple de l’effort qui est fait depuis plusieurs anneespour simplifier au maximum la programmation GPU, meme si elle restera fondamentalementdifferente de la programmation CPU sequentielle. Le parametre de stream est optionnel.

Asynchronicite Une fonction est dite asynchrone si, lorsqu’elle est appelee, le CPU donnedes instructions au GPU et continue l’execution du code sans attendre la fin de l’execution deces dites instructions par le GPU. Un exemple d’une telle fonction asynchrone est:

cudaMemcpyAsync(pointeur destination,pointeur source,size,cudaMemcpyHostToDevice,stream);

Les parametres sont identiques a ceux de cudaMemcpy. La seul difference est que le parametrede stream n’est pas optionnel et qu’il faut que la memoire sur l’hote utilisee soit non-paginee.On peut allouer de la memoire non paginee avec cudaMallocHost(&pointeur,size). Avec &l’operateur reference du C++ qui renvoie l’adresse memoire de la variable qui lui succede.En l’occurrence on peut dire que le premier parametre de cudaMallocHost est un pointeur depointeur puisqu’il s’agit de l’adresse memoire d’un pointeur.

Pendant ce transfert de memoire, on peut par exemple faire faire au CPU quelquesoperations par exemple de stockage de donnees dans le disques ou quelques calculs. On peutensuite mettre une barriere de synchronisation pour attendre la fin du transfert de memoireavant de passer a la suite du code avec cudaStreamSynchronize(stream);.

Nous utilisons par exemple l’asynchronicite dans le code Multi-GPU pour lancer les trans-ferts sur tous les GPU puis attendre la fin de chacun. Si le transfert de memoire synchroneetait utilise le CPU lancerait un transfert et attendrait sa fin pour ensuite en lancer un autre.L’impact nefaste sur la performance est evident.

8.3 Allocations et Transferts de memoire

Pour allouer de la memoire sur le GPU, la fonction la plus basique est le cudaMalloc(**ptr,size).Cette fonction, comme le Malloc(**ptr,size) du C prend comme parametres l’adresse memoired’un pointeur (un pointeur de pointeur ptr) et la taille de la memoire a allouer size.

Comme nous l’avons mentionne on peut allouer de la memoire non paginee avec cudaMal-locHost(**ptr,size), la memoire paginee est allouee avec Malloc(**ptr,size) ou le mot clef new

28

Page 29: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

du C++, ou encore avec l’allocation statique de la memoire lorsque la taille est connue a lacompilation. En ce qui nous concerne, l’interet de la memoire non paginee est qu’elle permetdes transferts entre GPU et CPU trois fois plus rapides et elle est requise pour les transfertsasynchrones. Il n’est pas recommande d’allouer de trop grandes quantites de memoire nonpaginee mais dans notre cas la taille des donnees est assez faible. Pour 10 000 ions, le plusgrand tableau, celui des positions et des charges au format double4, fait 320 Ko.

On peut faire des transferts de memoire avec les fonctions mentionnees dans la sous sectionprecedente.

8.4 Exemple de programmation en parallele

8.4.1 Apercu du Code

Donnons un exemple concret de programmation en parallele. Si par exemple on veut initialiserles valeurs d’un tableau t a 1,2,3,4,5 etc... en C++ sur CPU on le fait via une boucle:

for(int i=0;i<taille du tableau;i++)t[i]=i;

Pour faire la meme chose sur GPU il faut deja y allouer de la memoire pour le tableau et allouerautant de memoire sur le CPU pour pouvoir ensuite recuperer le tableau.

int *h t,*d t;cudaMalloc(&d t,sizeof(int)*taille du tableau);

cudaMallocHost(&h t,sizeof(int)*taille du tableau);

On peut ensuite creer un kernel init tableau de la facon suivante:

global void init tableau(int *h t)t[blockIdx.x*blockDim.x+threadIdx.x]=blockIdx.x*blockDim.x+threadIdx.x;

Nous detaillons ce kernel en 8.4.2.

Ce kernel prend comme parametre un pointeur vers le tableau et en modifie le contenu. Ilfaut ensuite lancer ce kernel, on peut par exemple en lancer n blocks de taille du tableau/nthreads. Il faut bien sur que n soit choisit tel que taille du tableau/n soit entier et aussi queles blocks n’aient pas trop de threads chacun. Dans les GPU modernes la limite est de 1024threads par block. Il existe aussi une limite sur le nombre de blocks mais elle est astronomique.

init tableau<<<n,taille du tableau/n >>>(d t);

Ainsi nous avons lance le kernel sur le GPU numero 0 (le GPU selectionne par defaut) enpassant comme parametre un pointeur vers la memoire que nous avions allouee auparavant.Comme nous n’avons pas precise de stream le kernel est lance sur le stream par defaut et onpeut attendre la fin de l’execution du kernel avec cudaDeviceSynchronize();. On peut ensuiterecuperer les donnees avec un:

cudaMemcpy(h t,d t,sizeof(int)*taille du tableau,cudaMemcpyDeviceToHost);

29

Page 30: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

8.4.2 Detail du fonctionnement du kernel

Rappelons que le kernel etait le suivant:

global void init tableau(int *d t)t[blockIdx.x*blockDim.x+threadIdx.x]=blockIdx.x*blockDim.x+threadIdx.x;

et que nous en avons lance n blocks de taille du tableau/n threads avec un n bien choisi. Dansle modele de programmation du CUDA chaque thread execute le meme code. Ce qui permetaux differents threads d’effectuer du travail different, et ainsi d’organiser la parallelisation, c’estl’existence de threadIdx, blockDim et blockIdx. Ces trois objets sont des dim3 contenant troisentier x,y et z.

• threadIdx.x par exemple represente l’index du thread selon x dans son block. Dans notrecas l’index selon x va de 0 a taille du tableau/n-1 tandis que les index threadIdx.y etthreadIdx.z sont tous 0 car nous avons lance le kernel avec des blocks unidimensionnels

• blockIdx.x lui va de 0 a n-1 tandis que blockIdx.y et blockIdx.z sont tous egaux a 0 carnous avons lance le kernel avec un grid unidimensionnel

• blockDim.x lui vaut taille du tableau/n, c’est le nombre de possibilites pour l’indice desthreads suivant x dans un block

9 Notre implementation de l’integration sur GPU

Notre code simule le comportement d’ions soumis a la force du piege de Paul lineaire, a larepulsion coulombienne mutuelle et a l’interaction avec le laser. Nous detaillons ici ces prin-cipales fonctions de notre code. Ce code nous permet ensuite de simuler le refroidissementsympathique en mettant des ions sensibles a la force du laser, et d’autres pas, avec des masseset des charges de notre choix.

9.1 Representation des ions dans la memoire

Pour chaque ion nous stockons:

1. La position (3 double) et la charge(1 double) ensemble dans un objet de type double4,on maintient un tableau des double4 charge-position pour toutes les particules.

2. La vitesse sous la forme d’un double3, on maintient un tableau des vitesses pour toutesles particules.

3. L’acceleration au temps present d’integration et l’acceleration au temps precedent sousla forme de deux tableaux de double3, les raisons seront expliquees en 9.7.2.

4. L’etat interne de l’atome, a savoir s’il est dans l’etat excite ou l’etat fondamental, sous laforme d’un tableau de booleens(vrai/faux).

5. Le ratio charge sur masse car dans les calculs la masse n’intervient pas seule, mais toujourssous le forme du ratio charge sur masse. Nous representons ces valeurs dans un tableaude double.

30

Page 31: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

La majorite des ions sont des ions refroidis par laser, mais il y a aussi des ions a refroidirsympathiquement et on peut aussi ajouter des ions intermediaires, insensibles au laser, quisont dans les faits refroidis sympathiquement et dont l’interet est d’aider au refroidissementsympathique de l’autre espece lorsque le ratio des masses est defavorable. Il a ete montre parles simulations de mon maitre de stage que l’ajout d’ions intermediaires de masse 3u.a aide aurefroidissement sympathique d’ions de masse 2u.a par des ions refroidis par laser de masse 9u.a.Nous n’avons pas besoin de stocker le type de chaque ion (refroidi par laser/sympathique/intermediaire)car nous les rangeons dans l’ordre dans les tableaux, ainsi nous stockons juste le nombre dechaque type d’ion et nous basons sur la position dans le tableau pour connaitre le type de l’ion.

9.2 Calcul de la force de coulomb

9.2.1 Introduction

Dans notre code une fonction sur le GPU est responsable du calcul de l’interaction coulombi-enne sur une particule due aux autres particules. Dans le jargon du Fortran, cette sous routine,est en quelque sorte la plus importante du code puisque l’ecrasante majorite du temps de calculy est passe. 99% est un chiffre raisonnable. Il faut donc que cette fonction soit optimisee aumaximum.

Nous detaillons ici notre algorithme pour calculer la force de coulomb. La technique destuiles utilisee est standard en CUDA et nous suivons l’algorithme detaille dans [NHP07]. Nousavions initialement pense utiliser ce code, disponible dans les ”samples” du CUDA, mais n’ysommes pas parvenus car leur code est separe en 7 fichiers et ecrit dans un style assez pousse.Nous nous sommes dit qu’il etait plus rapide de tout reecrire nous meme en se basant sur ladescription de cet algorithme.

9.2.2 Presentation du code

Le but de ce morceau de code est de calculer la force de coulomb sur toutes les particules i :

Fi =∑j 6=i

Fij =∑j 6=i

qiqj4πε0

rij

r3ij

(65)

On peut se representer le probleme de la facon suivante: Les particules sont dans certainespositions et il y a une grande matrice carree de Fij a calculer.

Dans notre code chaque thread est responsable du calcul de l’interaction sur une particulei et va alors sommer sur j les contributions des Fij. Ainsi chaque thread somme sur une lignede la matrice.

9.2.3 Detail du Code

Tout d’abord chaque thread stocke dans un registre son index puis va chercher en memoireglobale la position de sa particule et la stocke dans un registre.

int index=blockIdx.x*blockDim.x+threadIdx.x;double4 position=d r[index];

31

Page 32: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Figure 6: Schema de l’algorithme de calcul. On a N /p block de p threads. Chaque threadcalcule la force sur une particule i en sommant Fij sur j. Pour accelerer les acces memoirele calcul est decoupe en tuiles carrees de longueur p: p positions de particules sont chargeesdans la memoire partagee du block pour que chaque thread puisse calculer les contributions ala force sur sa particule par ces particules. Figure prise de [NHP07].

Dans le calcul de la force de coulomb la distance entre les deux particules intervient donc pourun thread donne la position de sa particule intervient dans tous les termes. Il vaut donc mieuxstocker dans le cache local la position de la particule pour pouvoir y acceder rapidement lorsdu calcul de chaque terme.

La raison pour laquelle la position est un double4 est que nous avons structure les donneesde facon a stocker la charge de la particule avec sa position pour des raisons de performances.

Le tableau des positions en memoire globale est nomme d r car il est coutume en CUDA dedonner le prefixe d comme device aux variables existant sur le GPU. Ceci permet d’eviter laconfusion, surtout lorsqu’il faut garder une copie sur le CPU pour pouvoir envoyer et recupererles donnees suivant le programme. La convention est h pour hote pour les variables sur le CPU

Dans un registre du GPU, on cree egalement un double3 force initialise a 0.

double3 force=0.0,0.0,0.0;

Ainsi au long du calcul, on ajoute les contributions a la force localement dans le cache qui esttres rapide.

Methode des tuiles Le long du calcul, il faut aller chercher les positions de toutes les autresparticules. Le probleme est que ceci represente des acces a la memoire globale qui croissent N2.En effet N threads doivent acceder a la position de N particules. La memoire globale etantlente ceci est inefficace.Pour attenuer ce probleme on utilise la methode dite des tuiles: On charge de la memoire

32

Page 33: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

globale vers la memoire partagee une partie des positions des particules. On charge le nombrele plus large possible qui puisse rentrer dans la memoire partagee. Ensuite les threads vont liredans la memoire partagee de leur block les positions des autres particules. Avec N le nombrede particules, si on stock p particules a chaque tuile et que l’on a u threads par block on peutmontrer que les N2 acces a la memoire globale sont remplaces par N2/u acces a la memoireglobale et N2 acces a la memoire partagee. On voit ainsi qu’il faut maximiser le nombre dethreads par blocks pour augmenter le partage des positions au sein d’un block et ainsi diminuerles acces a la memoire globale necessaires.

Pour les tuiles on declare la memoire partagee de facon statique dans le kernel.

shared double4 sharedpos[1024];

Voici une phase de chargement d’une tuile dans la memoire partagee:

sharedpos[threadIdx.x]=d r[tile*tilesize+threadIdx.x];syncthreads();

Chaque thread dans le block lance le chargement d’une position dans le tableau en memoirepartagee. On impose ensuite un syncthreads() pour que les threads du block attendent bienque touts les transferts soient finis avant de se lancer dans les calculs.

Choix de la dimension de la grille et des blocks Le maximum autorise etant 1024threads par blocks c’est ce que nous avons choisi. Pour p nous avons egalement choisi 1024 carcela rentre dans la memoire partagee et cela permet d’avoir des tuiles carrees ce qui est un peuplus simple. Le choix de ce parametre n’est pas crucial, nous avons essaye de le modifier sansimpact sur la performance.

Methode du parametre de softening Dans le calcul de∑j 6=i

Fij il faut exclure la valeur j = i

pour laquelle la force de Coulomb diverge. La methode du parametre de softening consiste arajouter artificiellement une infime valeur au denominateur,

rij =√

(~ri − ~rj)2 + ε

, ce qui ne change aucun resultats, au niveau de la precision de l’ordinateur. En pratique la

somme est organisee eni−1∑j=0

Fij +N∑

j=i+1

Fij. Malgre le controle flow additionnel nous avons trouve

cette methode plus rapide que celle du parametre de softening car il y a une addition en moinspour chaque calcul de Fij.

Calcul des forces sur une tuile for(j=0;j<tilesize;j++)

temp r.x = position.x -sharedpos[j].x;temp r.y = position.y -sharedpos[j].y;temp r.z = position.z -sharedpos[j].z;

temp d = temp r.x * temp r.x+temp r.y * temp r.y+temp r.z * temp r.z;temp d = rsqrt(temp d);

temp d *= temp d*temp d;

33

Page 34: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

temp d *=sharedpos[j].w;force.x += temp r.x * temp d;force.y += temp r.y * temp d;force.z += temp r.z * temp d;

syncthreads();

temp r et temp d sont des variables servant uniquement de stockage pour des resultatsintermediaires.

Le synchtreads() a la fin du calcul sur la tuile evite que des threads n’aillent lancer lechargement d’une autre tuile avant que les autres threads n’aient finis de calculer.

9.2.4 Considerations sur le Nombre de Particules

Comme nous l’avons mentionne en 9.2.3 nous avons choisi 1024 threads par block pour des con-siderations de performance. De plus notre algorithme fonctionne avec un thread par particuleet il faut au minimum un block par SM pour utiliser correctement le GPU. Par consequent surune Titan Black (15 SM) il faut un multiple de 15360 particules pour bien utiliser la carte.Ceci n’est pas forcement genant mais fait qu’on ne peut pas prendre le GPU pour faire dessimulations tres rapides sur un faible nombre d’ions. En l’etat, si on met peu d’ions une partiede la carte ne fera rien car certains SM n’auront pas de block a accueillir. Et si par exemple onprend 16 blocks de 1024 threads au lieu de 15, un des SM aura deux fois plus de travail que lesautres et le code sera deux fois plus long alors que le nombre de particules n’a pas beaucoupaugmente.

Une optimisation a faible nombre de particule a ete faite par [NHP07] mais malgre leur op-timisation, les performances se degradent assez vite lorsqu’on diminue le nombre de particules.

9.2.5 Conclusion

Au final, ce bout de code ne fait que de calculer la force de coulomb. A la nuance pres qu’onne multiplie pas par la charge de la particule pour laquelle on est en train d’accumuler la forcecar sa charge est en facteur commun a tous les termes. On multiplie apres par la charge dela particule et on divise par sa masse de facon a avoir l’acceleration qui nous sert a resoudreles equations du mouvement. Beaucoup d’autres constantes physiques sont aussi rajoutees audernier moment.

9.3 Force du Piege de Paul Lineaire

Le champ electrique du piege est donne par (48).

force.x +=(-keff+d omega z2 sur deux)*position.x;force.y +=(keff+d omega z2 sur deux)*position.y;

force.z -=d omega z2*position.z;

keff =2qe

mau ∗ d2(U0 + V0 cos(Ωt))

Remarquez que nous prenons en compte le micro mouvement car nous incluons la RF directe-ment dans la simulation. Certaines simulations sont faites avec le modele du potentiel effectifqui remplace la RF par un potentiel confinant moyenne sur le micro mouvement. Le modele dumacro mouvement est plutot juste dans les conditions de piegeage typiques qui permettent la

34

Page 35: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

validite de l’approximation adiabatique aux equations du mouvement. Toutefois le modele dupotentiel effectif a le defaut de remplacer une force dependante du temps qui ne conserve pasl’energie en une force independante du temps qui conserve donc l’energie. On dit qu’on perdle ”chauffage RF”, en effet le micro mouvement rajoute de l’agitation et donc peut chauffer lesions et avoir un impact sur la dynamique du refroidissement et la temperature d’equilibre.

9.4 Interaction avec le Laser

Pour l’interaction avec le laser nous utilisons une probabilite par pas de temps pour decidersi l’atome va absorber un photon pour passer dans l’etat excite, emettre un photon dans lemode du laser par emission stimule ou emettre un photon dans une direction aleatoire paremission spontanee. L’impulsion du photon emis/absorbe est alors soustraite/ajoutee a cellede l’ion. Nous stockons l’etat de l’atome dans un tableau pour savoir s’il est dans l’etat exciteou fondamental (modele a deux niveaux). Nous mettons a jour ce tableau lorsqu’il y a emissionou absorption et un ion ne peut emettre/absorber que s’il est dans l’etat excite/fondamental.Nous avons decrit la physique de l’interaction avec le laser au paragraphe 3.

L’interaction avec le laser fait donc intervenir la generation de nombres aleatoires pourdecider si oui ou non un photon est absorbe a ce pas de temps. Il est simple de generer desnombres aleatoires sur CPU car tous les langages ont une librairie standard qui s’occupe de cettetache. Toutefois pour les GPU une telle librairie standard n’est apparue qu’assez recemmentet elle est plus complexe que ses pairs sur CPU. En effet l’architecture parallele du GPU com-plique les choses. Nous avons eu un peu de mal a apprendre a utiliser cette librairie mais nousy sommes parvenus.

Rappelons que sur CPU la generation de nombres aleatoires se fait en partant d’une ”graine”qu’on met dans des equations qui permettent de generer un nombre entre 0 et 1 et qu’a partir dece nombre on avance dans une suite completement deterministe de nombres ”pseudo aleatoires”.

Sur GPU le probleme est que chaque thread doit generer sa propre suite de nombresaleatoires independamment des autres. Concretement pour utiliser la libraire ”curand” nousavons du creer un pointeur de type curandState t et allouer de la memoire pour avoir un cu-randState t pour chaque thread. On se retrouve ainsi avec un tableau de curandState t de taillele nombre de particules dans la simulation puisqu’il y en a autant que de threads.

On initialise ensuite les valeurs de ce tableau avec un kernel faisant usage de la fonctioncurand init :

global void Initialisation RNG(curandState *d randstate)int index=blockIdx.x*blockDim.x+threadIdx.x;

curand init(d seed,index,0,&d randstate[index]);

curand init prend comme premier parametre une graine, comme deuxieme parametre unnumero de sequence, comme troisieme parametre un offset et comme quatrieme parametreun objet de type curandState t. D’apres la documentation, il faut avoir la meme graine etdes numeros de sequence differents pour avoir la garantie que les differentes suites de nombrealeatoires soient non correlees. L’offset permet de sauter une partie de la suite et nous le met-tons a 0. curand init prend ces parametres et stocke le resultat a l’adresse memoire specifiee

35

Page 36: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

pour le curandState t. Le curandState t est un objet qui permet ensuite d’obtenir pas par pasune suite de nombres aleatoires.

Nous stockons ainsi un tableau de curandState t en memoire globale, un pour chaque thread.Et nous generons ensuite des nombres aleatoires au besoin dans la fonction s’occupant del’interaction avec le laser avec la fonction curand uniform:

double aux=curand uniform(&d randstate[index]);

Cette ligne de code cree un double aux dans lequel est stocke une nombre aleatoire entre 0 et1 suivant une distribution uniforme. Le curandState t a l’adresse memoire specifiee est modifiepour qu’a sa prochaine utilisation, le prochain nombre de la suite pseudo-aleatoire soit obtenu.

9.5 Initialisation des Ions

La simulation du nuage d’ion se deroule en quatres temps. Nous initialisons d’abord les ionsdans une distribution cylindrique uniforme avec des vitesses initiales elles-aussi aleatoires cor-respondant a une distribution thermique de temperature T. Il faut ensuite relaxer le nuage verssa position d’equilibre dans le piege.

9.5.1 Relaxation non Physique

Nous appliquons ensuite une force de frottement non physique de la forme −kv ainsi que laforce du piege et la repulsion coulombienne, seul la force du laser est omise. Cette phase nonphysique permet de relaxer les ions vers leurs positions d’equilibre dans un nuage d’une formequi depend des parametres du piege et du nombre d’ions. La figure 7 illustre le resultat de cettephase. Cette phase relaxe les ions a une temperature bien plus froide que celle atteignable dansles faits avec un refroidissement laser.Lors ce cette phase les ions a refroidir sympathiquement sont immobiles et n’interagissent pas,afin que le nuage trouve sa position d’equilibre sans eux. Concretement on met la charge desions a refroidir sympathiquement a 0 et on leur enleve toute vitesse et/ou acceleration. Ilsseront ensuite reinitialises dans la phase decrite plus tard en 9.6.

9.5.2 Relaxation Physique avec le Laser

On entame ensuite une phase de relaxation du nuage en remplacant la force de frottement nonphysique par l’interaction avec le laser. Ceci permet de rechauffer les ions vers leur temperatured’equilibre. La figure 8 illustre a gauche la transition entre les deux et montre que le nuagefinit par atteindre sa temperature d’equilibre a droite.

9.6 Refroidissement Sympathique

Apres la phase de relaxation non physique et physique, on peut dire qu’on a prepare un nuagepour simuler le refroidissement sympathique. Notons que durant la preparation du nuaged’ions refroidis par laser, les ions a refroidir sympathiquement sont presents mais a l’arret et nesubissent aucune forces. On sauvegarde le nuage prepare et ensuite on peut a partir de celui-cilancer des simulations de refroidissement sympathique en choisissant entre autre la ditributionspatiale et la distribution de vitesse initiale des ions a refroidir sympathiquement.

36

Page 37: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Figure 7: A gauche: Distribution initiale cylindrique uniforme de rayon et longueur 7mm. Adroite: nuage d’ions cristallise de ∼ 2, 2mm de diametre selon z et de ∼ 0, 88mm de diametre enx,y. 15350 ions, U0 = 0.1V de tension continue, V0 = 200V RF a Ω = 2π 17MHz. Les echellesde distance ne sont pas les memes entre les deux images.

9.7 Resolution d’Equation Differentielle par Verlet Vitesse

9.7.1 L’algorithme Verlet Vitesse

Pour resoudre les equations du mouvement des ions, nous utilisons la methode Verlet vitesse.C’est une methode tres similaire a l’algorithme de Verlet [Ver67] mais il y a sauvegarde desvitesses, qui est une quantite qui nous interesse de toute facon. Cet algorithme n’est pas aussiprecis qu’un Runge-Kutta d’ordre eleve mais son faible cout en terme de calcul permet de faireplus de pas dans le meme temps et donc de choisir un pas de temps plus fin, ce qui compense laperte de precision. Pour choisir un algorithme d’integration il faut considerer le rapport entreprecision et largeur du pas de temps. Un runge-kutta d’ordre quatre fait quatre appels a laforce donc il est quatre fois plus long qu’un Verlet et n’a d’interet que si on peut utiliser unpas de temps au moins quatres fois plus long pour le meme niveau de precision. L’experiencede mon maitre de stage est que les differentes methodes sont a peu pres equivalentes donc nousavons choisi le Verlet vitesse pour sa simplicite.

L’algorithme permettant de passer de x(t),v(t),a(t) a x(t+h),v(t+h),a(t+h) avec h le pasde temps d’integration est le suivant:

x(t+ h) = x(t) + v(t)h+1

2a(t)h2

a(t+ h) =1

MF (x(t+ h)) (⇒ Appel a la force)

v(t+ h) = v(t) +a(t) + a(t+ h)

2h

9.7.2 Notre algorithme sur GPU

Premier pas Pour le tout premier pas d’integration nous avons un kernel qui lance un calculdes forces sur les particules et qui stocke les resultats dans un tableau en memoire globale d a1.

37

Page 38: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Figure 8: En ordonnee l’energie cinetique moyenne des ions refroidis par laser moyennee surle micro mouvement. A 2 10−5s la force de frottement non physique est enlevee au profit del’interaction avec le laser. A gauche un zoom sur la cristallisation non physique et a droite laconvergence du nuage vers son etat d’equilibre.

A partir des vitesses initiales choisies aleatoirement et des accelerations calculees a partir despositions initiales on incremente la position des particules.

En d’autres termes, avec ta le temps initial, on part de x(ta),v(ta) choisis aleatoirement eton fait:

a(ta) = 1MF (x(ta))

On stock les a(ta) dans d a1x(ta+ h) = x(ta) + v(ta)h+ 1

2a(ta)h2

Autres pas Ensuite l’algorithme pour tous les pas suivants est de lancer un kernel qui calculles accelerations a partir des nouvelles positions et les stocke dans un tableau en memoireglobale d a2, incremente les vitesses a partir de d a1 et d a2 puis incremente les positions.Ensuite nous faisons l’echange des pointeurs entre d a1 et d a2, ceci ne transfert quasiment pasde donnees, c’est juste un echange des adresses memoire associees aux pointeurs d a1 et d a2.Ainsi au prochain pas d’integration les nouvelles accelerations sont stockees dans d a2 , quietait d a1 et dont on a plus besoin, et les accelerations du pas precedent sont bien pointees pard a1.

a(t+ h) = 1MF (x(t+ h))

On stocke les a(t+h) dans d a2 et les a(t) sont dans d a1

v(t+ h) = v(t) + a(t)+a(t+h)2

x(t+ 2h) = x(t+ h) + v(t+ h)h+ 12a(t+ h)h2

d a1↔ d a2

9.7.3 Pourquoi un Algorithme Different?

En quelque sorte nous faisons un Verlet Vitesse decale puisqu’a chaque pas on incremente lesvitesses puis les positions. Notons que ca ne change rien mathematiquement.

38

Page 39: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Le Probleme Nous devons proceder ainsi car si a chaque pas on incremente les positions puison calcule les nouvelles accelerations a partir des nouvelles positions pour ensuite incrementerles vitesses on aura des resultats faux. En effet le probleme intervient entre le moment ou onincremente les positions et le moment ou on lance le calcul des nouvelles accelerations. Rienn’exclut que des threads arrivent dans le calcul des nouvelles accelerations alors que la positionde certaines particules n’a pas encore ete mise a jour. Ainsi certains termes pourraient etrecalcules avec x(t) au lieu de x(t+h).

La Solution Comme nous l’avons explique, on peut synchroniser les threads d’un memeblock pour qu’ils s’attendent avant de se lancer dans le calcul des nouvelles accelerations maisceci n’est possible que pour les threads d’un meme block. Le seul moyen de synchroniser tousles threads de tous les blocks est de laisser le kernel se terminer. C’est pourquoi nous avonsune sorte de verlet vitesse decale. Il faut que notre kernel de pas d’integration finisse sur unemise a jour des positions. Ainsi lorsqu’on relance le kernel toutes les positions sont bien misesa jour et on peut commencer par le calcul des nouvelles accelerations, et ainsi de suite en boucle.

Figure 9: Code pour un pas d’integration Verlet-Vitesse.

On voit dans le kernel en figure 9, l’application ou non de la force de frottement non physique,et l’appel a la fonction qui fait l’interaction avec le laser.

39

Page 40: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

9.8 Choix du pas de temps

Lorsqu’on fait de la simulation numerique il est important de bien choisir son pas de temps.Dans notre cas nous avons un pas de temps de 2 10−10 car notre frequence RF est de l’ordrede 2 107Hz et nous voulons a peu pres 1000 pas par periode du micro mouvement pour bien leresoudre.

9.9 Choix de la double precision

Nous avons fait le choix de calculer en double precision. Les temps de calculs en doubleprecisions sont connus comme etant 3 fois plus long que ceux en simple precision, il faut doncavoir de bonne raisons de faire ce choix.

Dans notre cas nous avons choisi la double precision car nous simulons beaucoup de pasd’integrations. En effet avec un pas de temps de 2 × 10−10 et des simulations d’une longueurminimale de l’ordre de la milliseconde, il faut simuler ∼ 107 pas de temps. Si nous simulions ensimple precision on aurait des erreurs d’arrondis de l’ordre de ∼ 10−7, en relatif par operationet par les resultats bien connus de la marche aleatoire on pourrait estimer l’erreur commisecomme ∼ 3× 10−4. Ainsi, suivant les temps d’integration, on aurait des incertitudes relativesde ∼ 10−3 − 10−4. Nous preferons donc recourir a la double precision ou les erreurs d’arrondissont de l’ordre de 10−16 − 10−17en relatif par operation.

9.10 Analyse et sauvegarde des resultats

Si l’on sauvegardait toutes les positions et toutes les vitesses a tous les pas de temps on auraitau moins 6 doubles par particules (positions et vitesses) donc en simulant 15360 ions sur 5∗106

pas de temps (correspond a 1ms avec notre pas de temps) on aurait ∼3,6 To en ∼12 heures decalcul. Ce chiffre est d’ailleurs sous estime car nous stockons toutes sortes de quantites deriveesde la position et la vitesse. Il faut donc reflechir egalement a la facon dont on stocke les resultats.

Nous avons decide de subdiviser notre integration en periodes dites de sauvegarde et enperiodes dites de non sauvegarde. Pendant les periodes de sauvegarde on ne sauvegarde qu’unefraction des points, fraction typiquement inferieure a un sur mille. Ce sont des parametres quel’on peut choisir a chaque run dans un fichier texte. On va par exemple ne rien sauvegarderpendant 500 000 pas puis sauvegarder un pas sur 10 000 pour un total de 100 sauvegardes, puisde nouveau 500 000 pas non sauvegardes etc...

La figure 10 illustre notre methode de sauvegarde. Le fait de pouvoir choisir ces parametresa chaque run nous permet de bien choisir la quantite de donnees que l’on veut garder et nouspermet par exemple de decider si oui ou non on veut avoir une resolution suffisante pour voirle micro mouvement et/ou le macro mouvement.

Cette methode de sauvegarde nous permet en general de nous limiter a des fichiers dequelques Go.

40

Page 41: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Figure 10: Illustration de notre methode de sauvegarde. On distingue de longues periodessans sauvegardes, et dans les periodes de sauvegardes on distingue des sous-periodes de nonsauvegarde. Nous choisissons dans un fichier de parametres tous ces intervalles de sauvegardeet de non sauvegarde.

10 Adaptation Multi GPU

Le travail ayant avance relativement rapidement nous avons eu l’opportunite d’aller plus loinen adaptant notre code pour qu’il fonctionne non seulement sur un GPU mais sur plusieurs.

10.1 Difficulte de la tache

Pour adapter le code au multi GPU il a fallu revoir tout le code car nombreux sont les endroitsou il faut par exemple remplacer des tableaux par des tableaux de tableaux (un tableau parGPU). Ceci est assez long et difficile a faire sans erreur car il faut repenser ∼2500 lignes decode sans faire ne serait-ce qu’une erreur.

Nous avons fait un code qui marche pour N GPU et l’avons teste au LLR sur la machinellrtitan qui fait partie du projet GridCL.

Notre algorithme multi GPU est le meme que celui simple GPU mais la ou en simple GPUon integre le mouvement de,par exemple, 15360 particules, en multi GPU chaque GPU integrele mouvement de 15360 particules. Chaque GPU possede les vitesses, les accelerations, les etats(excite ou fondamental) etc... de ses particules. Les seuls donnees misent en commun sont lespositions des particules, necessaires au calcul des forces de coulomb. Donc un probleme de

41

Page 42: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

l’adaptation multi GPU a ete de faire en sorte que les GPU s’echangent les nouvelles positionsdes particules apres chaque pas d’integration.

10.2 Partage des positions entre les GPU

Pour faire les echanges entre GPU il y a deux categories de methodes:

• Rapatriement des donnees vers le CPU puis telechargement vers les GPU. On peut parlerde transfert via CPU.

• Transferts directs entre les GPU. On parle de transferts peer to peer (P2P).

10.2.1 Transferts via CPU

En verifiant comme a notre habitude les resultats par un calcul sur CPU nous avons developpeune premiere version qui faisait les transferts via CPU de la facon la plus primitive possible.Cette version avait ∼15% de pertes de performances dues aux transferts.

En optimisant les transferts via CPU nous avons atteint ∼4% de pertes dues aux transferts,pour 86016 ions.

10.2.2 Transferts Peer to Peer

Les transferts P2P sont un sujet qui a vite fait de devenir assez complique lorsqu’il faut con-siderer l’architecture de la carte mere pour optimiser les echanges. Considerons ce schema prisdans un diapositif de Nvidia du GTC (GPU Technology Conference) 2012:

Il y a des liens duplex un peu partout dans la carte mere. C’est a dire que dans chaque cableil peut y avoir au maximum un transfert ascendant et un transfert descendant a la fois. Si onessaie de faire passer plus de transferts a la fois les performances sont degradees. On comprendalors qu’il faut connaitre l’architecture specifique sur laquelle on travaille pour optimiser lestransferts.

Apres de nombreux essais nous avons culmine par un algorithme ou chaque GPU passe a sonvoisin de droite les nouvelles positions de ses particules (le dernier GPU les passe au premierGPU), puis chaque GPU passe a son voisin de droite les nouvelles positions des particules qu’ila recu de son voisin de gauche au pas precedent et ainsi de suite N-1 fois pour que tous les

42

Page 43: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

GPU aient les nouvelles positions de toutes les particules. Avec le schema ci dessus on peutimaginer que cet algorithme ne fait jamais passe plus d’un transfert ascendant et/ou descendantpar connection. Toutefois nous ne sommes pas sur de l’architecture specifique de llrtitan et lesperformances obtenues sont similaires a celles de notre meilleure implementation du transfertvia CPU.

10.2.3 Implementation finale

Notre decision finale a ete de garder les deux methodes de transfert dans le code. En debut deprogramme la vitesse des deux methodes est testee et le programme choisit la plus rapide pourl’integration. Ceci permet a notre code d’etre performant dans plus de systemes differents.

10.2.4 Considerations sur le nombre de particules

Il est important de mentionner que notre implementation multi-GPU implique l’utilisation d’ungrand nombre de particules dans l’integration. Par exemple sur la machine llrtitan qui comporte6 Titan il faut un multiple de 86016 particules pour bien utiliser la machine. De la meme faconque ce qu’on a discute en 9.2.4, ceci est genant dans la mesure ou on ne peut pas prendre unnombre plus modeste de particules pour integrer rapidement. Dans les faits on a un algorithmedont la complexite de calcul croit comme N2

GPU ∝ N2particules, et ou la puissance de calcul que

nous avons croit pleinement comme NGPU . Ainsi les temps de calcul croissent comme NGPU enmulti GPU.

Part IV

ResultatsPeut-etre le plus grand resultat de ce stage a ete la production de ce code en CUDA pouraccelerer considerablement les besoins de simulation du groupe.

11 Resultats numeriques

11.1 Validite du Programme

La chose la plus importante est la validite de ce qui est calcule. Nous devons mentionne quenous avons passe a peu pres la moitie du temps de developpement a developper en parallele ducode purement CPU pour verifier les resultats produits par le GPU. Autant que possible nousavons verifie les resultats du GPU par le CPU a 10−17 pres. Les resultats finaux different trespeu de ceux du CPU avec un ecart type de l’ordre de 10−16-10−17 suivant le hasard des chiffres.Il faut bien comprendre qu’obtenir des resultats identiques est tres difficile car les ordinateursont notamment des proprietes de non associativite. Ceci est d’ailleurs un tres grand defit pourles simulations de la meteo ou les equations sont chaotiques et la moindre difference s’amplifietoujours plus.

43

Page 44: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Nous pensons que la precision de notre programme est bonne car lorsque les resultats duCPU et du GPU different en gros sur les deux dernier bits et qu’on sait que les deux systemesont les memes limitations de precision, qui peut dire lequel des deux systemes a la bonnereponse?

Le fait de produire en parallele du code CPU pour verifier les resultats du GPU nous apermis de corriger de nombreux bug qui auraient pu passer inapercus. En effet nombreux sontles bugs qui ne produisent aucune erreur mais qui faussent les resultats.

Nous avons verifier sur CPU au maximum mais avons cesse de le faire dans les derniersetapes du developpement car apres l’ajout de l’interaction avec le laser la comparaison avecCPU est devenu vaine. En effet la generation des nombres aleatoires dans cette routine estdifferente sur CPU et sur GPU, donc la comparaison a 10−17 est futile.

Mentionnons aussi que notre code calcule en double precision, ce qui offre une precisionrelative de l’ordre de 16-17 chiffres alors que beaucoup de codes se contentent de simuler ensimple precisions a 6-7 chiffres de precision relative.

11.2 Resultats en termes de performances

Le groupe possedant deja un code de simulation sur CPU, il est important de montrer que leprogramme sur GPU gagne en performance, sinon l’exercice etait vain.

En termes de performance absolue nous calculons sur une Titan Black a peu pres 26 mil-liards d’interactions coulombiennes par seconde, pour comparaison c’est a peu pres 13 fois plusrapide que la meilleure machine bi-processeur 20 coeurs du LKB, nommee Babur. Pour unesimulation typique de 3 jours sur notre Titan Black il faudrait mobiliser Babur pendant 39jours. Les Flops sont une unite mal definie, mais si on dit qu’un calcul d’une force de Coulombvaut 37 Flops (20 pour l’inverse de la racine et 17 additions/multiplications), alors nous avons962 GFlops contre 74 pour Babur. Justifions notre choix de 20 Flops pour l’inverse d’uneracine. Nous avons mesure les Flops de l’operation x→ 1√

x. Notre methode pour cette mesure

a ete d’ajouter des additions/multiplications inutiles dans le calcul de la force de coulomb ennotant l’augmentation du temps de calcul, et de la meme maniere en ajoutant des inverses deracine. Ceci nous a donne deux droites representees en figure 11.

Une chose sur laquelle tout le monde est d’accord est que l’addition et la multiplicationvalent 1 Flops. De plus on peut dire que Temps ∝ Flops = A + Bn. Il y a une constantemultiplicative entre le Temps et les Flops mais le ratio A

Bn’est pas affecte par cette constante.

Nous trouvons pour la courbe d’ajout d’additions et de multiplications un bon fit lineaire deparametres A = 22 et B = 0, 5. Comme B correspond a 1 Flops et qu’on connait le ratioAB

= 144

on peut conclure que le calcul d’une force de Coulomb vaut 44 Flops. Pour la courbeconcernant l’inverse de racine, on trouve de nouveau un bon fit lineaire de parametres A = 22et B = 10. On peut en conclure que l’inverse d’une racine vaut 20 Flops et que le reste ducalcul d’une force de Coulomb en vaut 24.

Lorsqu’on compte les additions et les multiplications dans le kernel qui calcule l’interactioncoulombienne on trouve 17. Et de ces 17 Flops de calculs utiles le GPU passera entre l’equivalent

44

Page 45: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Figure 11: Augmentation du temps de calcul avec l’ajout d’addition/multiplications (croix) oud’inverses de racine (carres).

de 9 a 17 Flops a calculer, car le GPU peut faire faire des additions et des multiplications enmeme temps avec un jeu d’instruction vectorise. Ce qui veut dire qu’on a entre 29 et 37 Flopsutiles sur les 44. Soit entre 59,1% et 84,1% d’efficacite. Le profiling avec nvvp, un outil d’Nvidia,indique ∼ 70% d’efficacite. Les pertes sont dues aux inevitables transferts de memoire, controlflow, synchronisation des threads etc...

Nous avons devoues pas mal de temps a essayer d’ameliorer les performances de notre code,principalement la partie qui calcul l’interaction coulombienne.Nous avons, par exemple, tente de restructurer tous nos tableaux de donnee de facon a n’avoirque des acces contigus a la memoire globale. En effet c’est une propriete de la facon dont lamemoire globale est lue que d’avoir des performances optimales lorsque les acces sont contiguset nous ne voulons pas trop rentrer dans ces details. Cette restructuration des donnees a per-mis de gagner des facteurs 2 et 3 en vitesse de lecture et d’ecriture a la memoire globale, maisl’impact sur la performance du code etait dans le bruit. La raison est que l’utilisation des tuilesdecrites en 9.2.3 a reduit les acces a la memoire globale considerablement, donc optimiser lesacces a la memoire d’un facteur 2-3 n’a pas permis de gagner significativement en performance.Nous avons aussi tente d’utiliser une des toutes dernieres fonctionnalites du CUDA, le ”par-allelisme dynamique”, qui permet de faire que le GPU se lance des kernel lui-meme. Ainsien debut de programme le CPU lance un kernel sur le GPU et ce dernier lance les kernels depas d’integration et d’incrementation du temps decrits en 9.7 jusqu’a la fin de l’integration.Nous avons pense que ceci nous permettrait de gagner un peu de performance en reduisantd’eventuels delais de dialogue entre CPU et GPU, au contraire nous avons constate une legereperte de performance car certains coeurs de la carte sont alors mobilises pour lancer les kernels.Apres plusieurs telles tentatives nous sommes arrives a la conclusion que les performances ducode devaient etre maximales.

45

Page 46: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

11.3 Resultats de l’implementation multi GPU

Nous avons developpe le code non seulement pour le simple GPU mais aussi pour le multi GPU,et ce de facon plutot optimisee puisque le scaling multi GPU obtenu est de 96% puisque nousne perdons que 4% de temps de calcul dans les transferts inter GPU a chaque pas d’integration.Ceci est un tres bon resultat car il rend plus ou moins accessible a notre groupe la simulationdes plus gros nuages d’ions utilises dans le domaine, de l’ordre de 100 000 ions.

Nous sommes tres satisfait de notre adaptation multi GPU. Surtout lorsqu’on sait que lecode de Nvidia decrit en [NHP07] souffre d’un bug en multi GPU jusque dans la derniere ver-sion du CUDA, la version 5.5. Le bug serait corrige dans la version beta du CUDA 6.0. Nousn’avons pas pu le tester car sur llrtitan la derniere version stable du CUDA est utilisee, laversion 5.5.

Toujours en disant qu’un calcul d’interaction coulombienne vaut 37 Flops nous arrivons surllrtitan a une performance de ∼ 5, 55 TFlops en double precision.

12 Resultats physiques

Durant ce stage nous avons termine le developpement du code relativement tot malgre l’absencede plateforme de developpement fonctionnel pendant 1 mois. Ainsi nous avons eu le temps defaire des simulations et d’obtenir quelques resultats.

12.1 Taille du nuage d’ions

Pour les parametres de piegeage que nous utilisons, les formules theoriques donnees en section 4nous predisent un rapport d’aspect α = 0, 43. Pour le nuage de 15350 ions Be+ avec lequel noussimulons sur notre Titan Black nous trouvons un rapport d’aspect de 0, 4 et pour le nuage de86006 ions Be+ avec lequel nous simulons en multi-GPU au LLR nous trouvons egalement unrapport d’aspect de 0, 4, ce qui est en tres bon accord avec la theorie. Pour l’extension en z dunuage nous trouvons 1, 1mm pour le nuage de 15350 ions contre 1, 12 predit par nos formules,et pour le nuage de 86006 ions nous trouvons 2mm en accord avec nos formules. En figure 12nous montrons les dimensions des nuages que nous avons simules.Pour le refroidissement sympathique il est interessant de pouvoir predire les dimensions dunuage en fonction du nombre d’ions et des parametres de piegeage et ces resultats donnent ducredit supplementaire a la validite de nos simulations.

12.2 Refroidissement sympathique

Nous avons observe du refroidissement sympathique. En effet, apres avoir prepare un nuage de15350 ions Be+ via les deux etapes decrites en 9.5.1 et 9.5.2, nous initialisons 10 ions H+

2 dansune distribution cylindrique avec un certaine distribution de vitesse refletant une temperatureinitiale, a savoir ∼ 0, 11K dans nos simulations. La figure 13 illustre la situation.

Entraines par le potentiel de piegeage, les 10 ions H+2 vont gagner de la vitesse et traverser le

nuage jusqu’a atteindre 2mm de l’autre cote du nuage. Les ions vont ainsi traverser le nuage ungrand nombre de fois. Le refroidissement sympathique est principalement le fruit de collisions

46

Page 47: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Figure 12: Dimension du nuage avec U0 = 0, 1V,V0 = 200V,Ω = 2π × 17MHz,ωz = 300kHz etR=3, 5mm. A gauche 15350 ions Be+, a droite 86006 ions Be+.

Figure 13: illustration de la situation initiale de la simulation: 10 ions H+2 sont distribues a

2mm de distance du centre selon l’axe z, soit a peu pres le double du rayon du nuage selon cetaxe.

frontales rares donnant lieu a un grand echange d’energie entre un H+2 et un Be+. La figure 14

illustre la facon dont les ions H+2 subissent de fortes collisions modifiant fortement leur vitesse

et finissent par etre captures.

L’interpretation des fortes pertes de vitesses soudaines par des chocs est confortee parl’observation de quelques ions Be+ ejectes du nuage (donnee pas montree). Dans cette simula-tion on a observe la capture de quatres des dix ions au bout de ∼ 17ms, ce qui a dure ∼ 9 joursde calcul.

Nous avons essaye d’observer la capture d’ions H+2 avec une distance de depart de 3mm,

mais ceci donne aux ions une energie initiale ∼ 1, 52 = 2, 25 fois plus importante. Nous n’avonspas observe de capture apres ∼ 23, 5ms, soit ∼ 12 jours de calcul. Nous avons observe dansdes temps plus courts la capture de tous les ions H+

2 avec des distances de depart selon l’axe zde: 0,5mm, 1mm et 1,5mm. Le tableau 1 resume nos resultats.

47

Page 48: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Figure 14: En ordonnee la vitesse selon l’axe z. Les figures represente la vitesse de deux desdix ions. On constate des pertes de vitesses brutales interpretees comme des chocs frontaux.Le temps ne commence pas a zero car on ne montre pas la phase de preparation du nuage deBe+.

Distance [mm] Energie Potentielle [meV] Capture Temps d’integration0,5 4,6 10/10 <17ms1 18,4 10/10 <9ms1,5 41,5 10/10 <11ms2 73,7 4/10 ∼ 17ms3 166 0/10 ∼ 23,5ms

Table 1: Resultats de capture et refroidissement sympathique dans un nuage de 15350 Be+

avec 10 ions H+2 partant de differentes distances selon l’axe z.

Lorsqu’un ion a perdu suffisamment d’energie, il passe tout son temps dans le nuage aulieu de faire des allers-retours a l’exterieur. Ainsi il echange le restant de son energie assezrapidement et prend sa place dans le nuage. Comme le laser exerce une pression de radiationsur les ions Be+, ces ions sont pousses dans la direction du laser et les ions H+

2 prennent placeselon une ligne a l’oppose du nuage. La figure 16 illustre la situation. Lorsqu’un ion H+

2 rejointla chaine de ses pairs a un des deux bouts du nuage on observe une fusion locale du cristal deBe+. Cette energie finit par etre dissipee par l’interaction avec le laser, le cristal se reforme etl’ion nouvellement capture atteindra une temperature limite comparable a celle du cristal. Lafigure 15 montre que les ions H+

2 trouvent leur place en z a un des bouts du nuage.

12.3 Parametres du laser

Nous avons simule la phase de relaxation du nuage avec le laser decrite en 9.5.2 avec differentsparametres pour etudier leur influence.

48

Page 49: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Figure 15: Composante z de la position des 10 ions H+2 initialement a une distance de 1mm.

On voit qu’au bout de ∼8ms les ions ont tous trouves leur place a un des bords du nuage deBe+ (le nuage fait 2,2mm de longueur d’un bout a l’autre en z)

12.3.1 Angle du laser

Lors de la preparation d’un nuage de 15350 ions Be+ nous avons constate que le refroidissementdes ions n’etait pas uniforme selon les trois directions du mouvement. La figure 17 (gauche)illustre ce resultat. Dans cette simulation le laser etait oriente selon l’axe z et on constateque l’energie cinetique moyenne selon l’axe z atteint une valeur d’equilibre bien plus basse de∼ 4, 42 10−27J contre ∼ 1, 45 10−26J selon les axes x et y. De plus l’energie cinetique moyenneselon z atteint sa valeur d’equilibre bien plus rapidement (∼ 0.1ms) que l’energie cinetiquemoyenne selon x et y (∼ 3ms).

Il est comprehensible que le refroidissement ait ete bien plus efficace selon z car le laseretait oriente dans cette direction lors de la simulation, par consequent le laser tend a refroidirl’energie cinetique des ions selon l’axe z et le refroidissement selon x et y ne se fait que parcouplage entre le mouvement dans les trois directions spatiales via les interactions de coulombentre ions. Il faut aussi garder en tete la presence du chauffage RF du au micro mouvementselon les axes x et y.

Face a ces constatations il vient a l’esprit: peut-on ameliorer le refroidissement laser con-siderablement en donnant un angle a l’orientation du laser? Le laser pourrait ainsi refroidirle mouvement selon les trois directions spatiales. Nous avons donc simule une meme phase derelaxation avec 15350 ions Be+ mais cette fois ci avec les angles d’orientation du laser θ = 0.33rad et φ = 0.785 rad. Les resultats sont illustres dans la figure 17 (droite). On y remarqueque la temperature d’equilibre et le temps requis pour atteindre l’equilibre sont sensiblementles memes dans les trois directions mais l’energie cinetique moyenne atteinte est de ∼ 5 10−24J

49

Page 50: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Figure 16: Schema de la position que prennent les ions refroidis sympathiquement dans lenuage. La pression de radiation du laser pousse les ions Be+ dans une direction et donc les ionssympathiques vont s’aligner a l’autre bout du nuage. Les ions H+

2 vont se mettre dans une lignele long de l’axe z car ils sont plus legers que les Be+, si s’etait l’inverse les H+

2 occuperaient lesbords du nuages, ils ne s’aligneraient pas sur l’axe z.

soit deux a trois ordres de grandeurs de plus que lorsque le laser etait aligne avec l’axe z. Uneinspection du film de la simulation revele que le fait d’avoir mis le laser en biais a cree unesorte de mouvement de convection dans le nuage, les ions tournent dans le nuage, qui lui gardesa forme originelle. Ce mouvement ne montre aucun signe d’attenuation, le nuage semble ytrouver son etat d’equilibre. Nous abandonnons donc la piste de la modification de l’angled’incidence du laser.

12.3.2 Detuning du laser

Nous utilisons normalement un desaccord de −Γ2, avec Γ la largeur naturelle de la transi-

tion, car ceci est considere comme etant en regle generale l’optimum pour le refroidissementlaser [WAMS12]. Nous avons voulu simuler la relaxation du nuage pour differentes valeurs dunuage, les resultats sont presentes en figure 18.

On remarque dans la figure 18 que la courbe pour le detuning de −0, 25 Γ est inversee,a l’instar de la courbe de la figure 17(droite). En effet, le detuning est trop faible et parconsequent la qualite du refroidissement est fortement degradee comme dans le cas du laserincline qui genere une convection dans le nuage. On remarque aussi que les detunings pluseleves produisent non seulement des temperatures d’equilibre plus hautes mais aussi des tempsde relaxation plus eleves qualitativement. Quantitativement la figure 19 represente l’energiecinetique, sommee sur les trois dimensions, a l’equilibre, des ions refroidis par laser.

Ces calculs ont pris plus de 20 jours sur un GPU. Aux vues de la figure 19 nous confirmonsun minimum d’energie cinetique moyenne autour d’un detuning de −Γ

2. De plus au vu de la

figure 18 on peut conclure que les constantes de temps de relaxation ne sont pas meilleurespour les valeures autres que −Γ

2. On peut donc dire que ces resultats sont en bon accord avec

la theorie [WAMS12]. Il serait interessant de prendre plus de points autour de la valeur −Γ2

pour voir si une valeur proche peut etre plus optimale.

50

Page 51: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Figure 17: Energie cinetique moyenne des ions refroidis par laser decomposee selon les troisaxes spatiaux. En haut les courbes selon les axes x et y sont quasi confondues. En bas lacourbe de l’energie cinetique moyenne selon l’axe z. Les courbes sont celles obtenues dans laphase de relaxation avec le laser decrite en 9.5.2, phase precedee de la phase de relaxation avecune force de frottement non physique decrite en 9.5.1. A gauche le laser a des angles θ = 0rad et φ = 0 rad, ce qui correspond a un laser aligne avec l’axe z. A droite le laser a des anglesθ = 0.33 rad et φ = 0.785 rad.

Figure 18: Energie cinetique moyenne, en Joules, des ions refroidis par laser en fonction dutemps. Sont representes les energies cinetiques selon les trois directions de l’espace. Valeursdes detunings du laser en unites de Γ, de haut en bas a gauche puis de haut en bas a droite:-0,25, -0,4, -0,5, -2, -5, -7,5, -10, -20, -50

51

Page 52: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Figure 19: Energie cinetique a l’equilibre, sommee sur les trois dimensions, des ions refroidispar laser pour divers detuning.

52

Page 53: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

Part V

ConclusionApres avoir introduit la theorie de la physique etudiee nous avons motive les besoins de simula-tion numerique performante, puis explique le choix du GPU en prenant soin de mentionner lesalternatives. Nous avons ensuite developpe dans un certain detail le modele de programmationdu GPU pour finir par montrer les resultats concrets du stage: un programme performant, ca-pable de fonctionner sur touts les GPU d’une machine, dont les resultats physiques sont valides,avec quelques resultats de simulation physique calculees dans le temps disponible. Pour un coutaux alentours de 3 ke notre groupe a achete une machine avec un GPU dont nous tirons ∼ 13fois plus de puissance de calcul que la meilleure machine bi-processeur du LKB. Et pour l’avoirteste sur la machine LLRTitan du LLR nous savons que notre code fonctionne dans les centresde calculs.

Cette nouvelle capacite numerique permettra au groupe de faire des avancees dans lacomprehension et l’optimisation du refroidissement sympathique.

References

[CPP82] B. Cagnac and J.C. Pebay-Peroula. Physique atomique: introduction a la physiquequantique et structure de l’edifice atomique. Applications de la mecanique quantique.Collection Dunod Universite. Dunod, 1982.

[Den71] D. R. Denison. Operating parameters of a quadrupole in a grounded cylindricalhousing. Journal of Vacuum Science and Technology, 8(1), 1971.

[Gho95] P.K. Ghosh. Ion Traps. Oxford science publications. Oxford University Press,Incorporated, 1995.

[KL66] H. Kogelnik and T. Li. Laser beams and resonators. Appl. Opt., 5(10):1550–1567,Oct 1966.

[MGW06] F.G. Major, V.N. Gheorghe, and G. Werth. Charged Particle Traps: Physics andTechniques of Charged Particle Field Confinement. Springer Series on Atomic,Optical, and Plasma Physics. Springer, 2006.

[MS12] Junichiro Makino and Takayuki Saitoh. Astrophysics with grape. Progress of The-oretical and Experimental Physics, 2012(1), 2012.

[NHP07] Lars Nyland, Mark Harris, and Jan Prins. Fast N-Body Simulation with CUDA.In Hubert Nguyen, editor, GPU Gems 3, chapter 31. Addison Wesley Professional,August 2007.

[RSM+96] A.J. Reuben, G.B. Smith, P. Moses, A.V. Vagov, M.D. Woods, D.B. Gordon, andR.W. Munn. Ion trajectories in exactly determined quadrupole fields. InternationalJournal of Mass Spectrometry and Ion Processes, 154(1-2):43 – 59, 1996.

53

Page 54: Simulation Num erique de Nuages d’ions pi eg es sur GPU...Outre mon maitre de stage, qui m’a consacr e beaucoup de temps, et l’ equipe d’accueil, je souhaite remercier Pierre

[Tur87] Leaf Turner. Collective effects on equilibria of trapped charged plasmas. Physicsof Fluids (1958-1988), 30(10), 1987.

[Ver67] Loup Verlet. Computer ”experiments” on classical fluids. i. thermodynamical prop-erties of lennard-jones molecules. Phys. Rev., 159:98–103, Jul 1967.

[WAMS12] Jannes B. Wubbena, Sana Amairi, Olaf Mandel, and Piet O. Schmidt. SympatheticCooling of Mixed Species Two-Ion Crystals for Precision Spectroscopy. February2012.

54