Использование cuda в расчете динамики пучка

45
Использование CUDA в расчете динамики пучка С.Б. Ворожцов, В.Л. Смирнов, Е.Е. Перепелкин Дубна, ОИЯИ 6 апреля 2010 http://parallel- compute.ru

Upload: nariko

Post on 12-Jan-2016

77 views

Category:

Documents


0 download

DESCRIPTION

6 апреля 2 010. Использование CUDA в расчете динамики пучка. С.Б. Ворожцов , В.Л. Смирнов , Е.Е. Перепелкин Дубна, ОИЯИ. http://parallel-compute.ru. Циклотрон. Постановка задачи Численные методы Программная реализация на CUDA Результаты. http://cbda.jinr.ru - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Использование  CUDA   в расчете динамики пучка

Использование CUDA в расчете динамики

пучка

С.Б. Ворожцов, В.Л. Смирнов, Е.Е. ПерепелкинДубна, ОИЯИ

6 апреля 2010

http://parallel-compute.ru

Page 2: Использование  CUDA   в расчете динамики пучка

Циклотрон

• Постановка задачи

• Численные методы

• Программная реализация на CUDA

• Результатыhttp://cbda.jinr.ru

CBDA: Cyclotron Beam Dynamic Analysis code

Page 3: Использование  CUDA   в расчете динамики пучка

Постановка задачи

Page 4: Использование  CUDA   в расчете динамики пучка

Линия инжекции

ЭСД

Дуант

Магнитный сектор

Инфлектор

Компьютерная модель циклотрона

Page 5: Использование  CUDA   в расчете динамики пучка

Области задания карт полей

Инфлектор Электрическое

поле

Аксиальный канал

Магнитное поле

Линза Магнитное

поле

Page 6: Использование  CUDA   в расчете динамики пучка

Ресурсоемкое моделирование

• Необходимость рассмотреть не менее 5 различных конфигураций центральной зоны;

• Необходимость ускорять различные ионы;

• Сложная геометрическая структура;• Учет пространственного заряда;

Одна итерация требует ~

несколько дней расчетов

Page 7: Использование  CUDA   в расчете динамики пучка

Уравнения движения

, , , 1i ir p t i N

, 1i i

dp F i N

dt

2

0 0 0 0

0 0

, , ,

1 1 ,

, , ,

1 ,i i

i i i i ext i s i i ext i

ii i i

i i i i i i i it t t t t t

i

dm v q E r t E r t v B r

dtv

c

r r v v или r r v v

i N r V

Page 8: Использование  CUDA   в расчете динамики пучка

Пространственный заряд

0 20

2

0 0

1,

1, 0,

s s s s

s s s

divE rotB J Ec t

rotE B divB ct

0

,

, ,D

N

D N D N

pp p

n

30

1, 1

4

Nj

s i i jj i

i j

qE r r r i N

r r

30

1,

4j

s i j i j

qE j i r r r r R

R

sE

PIC метод PP метод

Page 9: Использование  CUDA   в расчете динамики пучка

Численные методы

Page 10: Использование  CUDA   в расчете динамики пучка

Уравнение движения

, , , , 1, ,i i i i ext i s i i ext i

dm v q E r t E r t v B r i N

dt

0

0

0

0

i it t

i it t

v v

r r

Уравнение движения из постановки задачи

можно представить в упрощенном виде, дополнив его вторым уравнением

для определения координат частиц

, ,ii i

ii

dvf t r v

dtdr

vdt

Page 11: Использование  CUDA   в расчете динамики пучка

Пример решения ОДУ

1 1 2 3 4

1

12

23

4 3

2 26

,

,2 2

,2 2

,

k k

k k

k k

k k

k k

x x kx kx kx kx

kx f t x

kxkx f t x

kxkx f t x

kx f t x kx

00

,

t t

dxf t x

dtx x

Рассмотрим решение обыкновенного дифференциального уравнения (ОДУ)

методом Рунге -КуттаЗадача Коши

,k номер итерации по времени

шаг по времени

Page 12: Использование  CUDA   в расчете динамики пучка

Метод Рунге - Кутта

1 1 2 3 4

1 1 2 3 4

1 1 2 3 4

1 1 2 3 4

1 1 2 3 4

1 1 2 3 4

2 26

2 26

2 26

2 26

2 26

2 26

k k

k k

k k

k k

k k

k k

vx vx kvx kvx kvx kvx

vy vy kvy kvy kvy kvy

vz vz kvz kvz kvz kvz

x x kx kx kx kx

y y ky ky ky ky

z z kz kz kz kz

Page 13: Использование  CUDA   в расчете динамики пучка

Метод Рунге - Кутта

1

1 1

1

1 1

1 1 1 1 1 12

2 2

1 1 12

, , , , , ,

,

, , , , , ,

,

, , , , , ,2 2 2 2 2 2 2

,

, , , ,2 2 2 2

x k k k k k k k

x k k k k k k k

x k k k k k k k

x k k k k k

kx v t x y z vx vy vz

ky kz

kvx f t x y z vx vy vz

kvy kvz

kx ky kz kvx kvy kvzkx v t x y z vx vy vz

ky kz

kx ky kzkvx f t x y z vx

1 1 1

2 2

, ,2 2 2

,

k k

kvx kvy kvzvy vz

kvy kvz

Page 14: Использование  CUDA   в расчете динамики пучка

Метод Рунге - Кутта

2 2 2 2 2 23

3 3

2 2 2 2 2 23

3 3

4 3 3

, , , , , ,2 2 2 2 2 2 2

,

, , , , , ,2 2 2 2 2 2 2

,

, , ,

x k k k k k k k

x k k k k k k k

x k k k k

kx ky kz kvx kvy kvzkx v t x y z vx vy vz

ky kz

kx ky kz kvx kvy kvzkvx f t x y z vx vy vz

kvy kvz

kx v t x kx y ky z kz

3 3 3 3

4 4

4 3 3 3 3 3 3

4 4

, , ,

,

, , , , , ,

,

k k k

x k k k k k k k

vx kvx vy kvy vz kvz

ky kz

kvx f t x kx y ky z kz vx kvx vy kvy vz kvz

kvy kvz

Page 15: Использование  CUDA   в расчете динамики пучка

Решение краевой задачи

0

,

0

pp p

122 2

, , , ,x y z

n m kn m k n m k

L L L

1 11

1 1 1

8, , , , sin sin sin

y xzN NN

i j ss j ix y z x y z

ni mj ksn m k x y z

N N N N N N

, ,i j sx y z необходимонайти из распределения частиц

1 11

1 1 1

( , , ) , , sin sin siny xz

N NN

i j sk m n x y z

ni mj ksx y z n m k

N N N

При поиске коэффициентов Фурье используется

алгоритм БПФ

(Быстрого Преобразования Фурье)

Page 16: Использование  CUDA   в расчете динамики пучка

Задание области для краевой задачи

, ,

Сетка Nx Ny Nz

Lx Ly LzШаг hx hy hz

Nx Ny Nz

Lx

Lz

Ly

Lx Lz

Ly

Lz

LyLx

Page 17: Использование  CUDA   в расчете динамики пучка

Раздача плотности заряда

Ячейка 7

Ячейка 1

Ячейка 8

Ячейка 3

Ячейка 2

Ячейка 5

Ячейка 6Узел

Page 18: Использование  CUDA   в расчете динамики пучка

Потери частиц

ADC ADB CDB ABCS S S S

tn

tn+1

A

B

C

D

Если точка D принадлежит треугольнику ABC, тогда

ADC ADB CDB ABCS S S S Условие пересечениягде εΔ – допустимое отклонение от

поверхности

Page 19: Использование  CUDA   в расчете динамики пучка

Программная реализация на

CUDA

Page 20: Использование  CUDA   в расчете динамики пучка

Функции ядра• Track ( карты полей, координаты и скорости частиц )

• метод Рунге-Кутта

• Losses ( геометрия установки, координаты частиц )• проверка пересечений с геометрией

• Rho ( координаты частиц )• раздача заряда в узлы сетки

• FFT ( функция плотности заряда или потенциал)• БПФ по базисным функциям sin(πn/N)

• PoissonSolver ( Фурье коэффициенты )• решение краевой задачи

• E_SC ( потенциал электрического поля ) • поиск электрического поля

Page 21: Использование  CUDA   в расчете динамики пучка

__global__ void Track ( )

• Много входных параметров. Использование типа переменной __constant__ для неизменных параметров:• __device__ __constant__ float d_float[200];• __device__ __constant__ int d_int[80];

• Каждой частице соответствует нить: • int n = threadIdx.x+blockIdx.x*blockDim.x;

• Количество “if, goto, for” необходимо максимально сократить

Page 22: Использование  CUDA   в расчете динамики пучка

Проблема количества “if, goto, for”

Инфлектор Электрическое

поле

Аксиальный канал

Магнитное поле

Линза Магнитное

поле

Page 23: Использование  CUDA   в расчете динамики пучка

__global__ void Losses ( )• Нити одного блока копируют вершины

треугольников из global в shared память.

• Синхронизация нитей после копирования треугольников __syncthreads()

• Каждой частице соответствует номер нити: • int n = threadIdx.x+blockIdx.x*blockDim.x;

• Проверка условия пересечения частицей c номером n, загруженных в shared память, треугольников

• Для каждого блока геометрии есть своя функция Losses

Page 24: Использование  CUDA   в расчете динамики пучка

__global__ void Rho

• Каждая частица с номером n = threadIdx.x + blockIdx.x*blockDim.x дает свой вклад, в окружающие ее узлы. Для этого по координатам частицы определяется какой ячейки она принадлежит

• Одна частица может дать вклад в 8 ближайших узлов. Таким образом, каждая нить заполняет свои 16 ячеек в общем массиве вклада: 8 – номеров узлов и 8 – значений вклада.

• Далее производится сложение этих вкладов для каждого узла.

Page 25: Использование  CUDA   в расчете динамики пучка

__global__ FFT ( )• Действительное БПФ по базисным

функциям sin(πn/N);• 3D преобразование состоит из трех

последовательных 1D БПФ по осям: X, Y, Z соответственно

• int n = threadIdx.x+blockIdx.x*blockDim.x; k=(int)(n/(NY+1)); j=n-k*(NY+1);

m=j*(NX+1)+k*(NX+1)*(NY+1);

FFT_X[i+1]=Rho[i+m];

n = j + k*(NY+1)

NZ

NYМассив данных

для функции Rho трех

переменных

Page 26: Использование  CUDA   в расчете динамики пучка

__global__ PoissonSolver ( )

• Номер нити int n = threadIdx.x+blockIdx.x*blockDim.x;

• Каждая нить находит значение коэффициентов Фурье PhiF потенциала PhiPhiFind(i,j,k) = -RhoFind(i,j,k) / ( kxi

2 + kyj2 + kzk

2 )В узле с номером:ind(i,j,k)=i+j*(NX+1)+k*(NX+1)*(NY+1),гдеk=(int)(n/(NX+1)*(NY+1));j=(int)(n-k*(NX+1)*(NY+1))/(NX+1);i=n-j*(NX+1)-k*(NX+1)*(NY+1);

• RhoF – коэффициенты Фурье для функции плотности заряда Rho.

Page 27: Использование  CUDA   в расчете динамики пучка

__global__ E_SC ( )• Вычисление электрического поля в узле с номером int n = threadIdx.x+blockIdx.x*blockDim.x+st_ind

φn

φn +

1

φn -

1

φn - ( NX +

1 )

φn + ( NX +

1 )

φn - ( NX + 1 )( NY +

1 )

φn + ( NX + 1 )( NY

+ 1 )

1 1

1 1

1 1 1 1

2

2

2

n nx

x

n Nx n Nx

yy

n Nx Ny n Nx Ny

zz

Eh

Eh

Eh

Page 28: Использование  CUDA   в расчете динамики пучка

Результаты

Page 29: Использование  CUDA   в расчете динамики пучка

Аксиальная инжекция пучка

Page 30: Использование  CUDA   в расчете динамики пучка

Процесс банчировки пучка

Page 31: Использование  CUDA   в расчете динамики пучка

Ускорение в циклотроне

Page 32: Использование  CUDA   в расчете динамики пучка

Анимация

Page 33: Использование  CUDA   в расчете динамики пучка

Анимация

Page 34: Использование  CUDA   в расчете динамики пучка

Анимация

Page 35: Использование  CUDA   в расчете динамики пучка

Потери частиц

Page 36: Использование  CUDA   в расчете динамики пучка

Ускорение банчей

Page 37: Использование  CUDA   в расчете динамики пучка

Оптимизация центральной области

φRF = 13°

φRF = 15°

φRF = 28°

φRF = 10°

С постами

Дуант

Без постов

«Земля»

F = ZURF - WGAP

Page 38: Использование  CUDA   в расчете динамики пучка

Выбор оптимальной конфигурации

S0 S1 S2

S3 S4

Page 39: Использование  CUDA   в расчете динамики пучка

Распределение ускоряющего поля

Page 40: Использование  CUDA   в расчете динамики пучка

Производительность на 8800GTX

Функции*

Время, [мс] Ускорение,

[раз]CPU** GPU

Track 486 30 16

Losses 6997 75 93

Rho 79 6 14

Poisson/FFT 35 3 13

E_SC 1.2 0.8 1.4

Total 7598 114 67*Размер сетки: 25 x 25 x 25. Число частиц: 100,000 треугольников: 2054

**CPU с частотой 2.4 ГГц

Page 41: Использование  CUDA   в расчете динамики пучка

Сравнение CPU и GeForce 8800GTX

Число частиц

Время вычисленийУскорение

,[раз]CPU* GPU

1,000 3 мин. 19 c. 12 c. 17

10,000 34 мин. 14 с. 42 с. 49

100,000 5 ч. 41 мин. 6 мин. 56

1,000,000

2 дня 8 ч. 53 мин.

1 ч. 60

*CPU с частотой 2.4 ГГц

Page 42: Использование  CUDA   в расчете динамики пучка

Сравнение CPU с Tesla C1060

Число частиц

Время вычисленийУскорение

,[раз]

CPU2.5ГГц

GPUC 1060

1,000 3 мин. 12 с. 11 с. 18

10,000 32 мин. 24 с. 27 с. 72

100,0005 ч. 14 мин.

31 с.3 мин. 34

с. 88

1,000,000

2 дня 4 ч. 25 мин.

34 мин. 29 с.

91 БЕЗ пространственного

заряда

Page 43: Использование  CUDA   в расчете динамики пучка

Сравнение CPU с Tesla C1060

Число частиц

Время вычисленийУскорение

,[раз]

CPU2.5 ГГц

GPUC 1060

10,000 33 мин. 36 с. 44 с. 45

100,0005 ч. 28 мин.

12 с.5 мин. 4

с.65

1,000,000

2 дня 8 ч. 27 мин.

50 мин. 17 с.

67

С пространственным зарядом

Page 44: Использование  CUDA   в расчете динамики пучка

Эффект пространственного заряда

I ~ 0Потери

24%

I = 4 мАПотери

94%

Page 45: Использование  CUDA   в расчете динамики пучка

Заключение

• Очень дешевая технология в сравнении с CPU;

• Увеличение производительности на 1.5 – 2 порядка дает шанс проведения моделирования ресурсоемких физических моделей;

• Требует аккуратного программирования.