Использование cuda в расчете динамики пучка
DESCRIPTION
6 апреля 2 010. Использование CUDA в расчете динамики пучка. С.Б. Ворожцов , В.Л. Смирнов , Е.Е. Перепелкин Дубна, ОИЯИ. http://parallel-compute.ru. Циклотрон. Постановка задачи Численные методы Программная реализация на CUDA Результаты. http://cbda.jinr.ru - PowerPoint PPT PresentationTRANSCRIPT
Использование CUDA в расчете динамики
пучка
С.Б. Ворожцов, В.Л. Смирнов, Е.Е. ПерепелкинДубна, ОИЯИ
6 апреля 2010
http://parallel-compute.ru
Циклотрон
• Постановка задачи
• Численные методы
• Программная реализация на CUDA
• Результатыhttp://cbda.jinr.ru
CBDA: Cyclotron Beam Dynamic Analysis code
Постановка задачи
Линия инжекции
ЭСД
Дуант
Магнитный сектор
Инфлектор
Компьютерная модель циклотрона
Области задания карт полей
Инфлектор Электрическое
поле
Аксиальный канал
Магнитное поле
Линза Магнитное
поле
Ресурсоемкое моделирование
• Необходимость рассмотреть не менее 5 различных конфигураций центральной зоны;
• Необходимость ускорять различные ионы;
• Сложная геометрическая структура;• Учет пространственного заряда;
Одна итерация требует ~
несколько дней расчетов
Уравнения движения
, , , 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
Пространственный заряд
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 метод
Численные методы
Уравнение движения
, , , , 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
Пример решения ОДУ
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 номер итерации по времени
шаг по времени
Метод Рунге - Кутта
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
Метод Рунге - Кутта
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
Метод Рунге - Кутта
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
Решение краевой задачи
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
При поиске коэффициентов Фурье используется
алгоритм БПФ
(Быстрого Преобразования Фурье)
Задание области для краевой задачи
, ,
Сетка Nx Ny Nz
Lx Ly LzШаг hx hy hz
Nx Ny Nz
Lx
Lz
Ly
Lx Lz
Ly
Lz
LyLx
Раздача плотности заряда
Ячейка 7
Ячейка 1
Ячейка 8
Ячейка 3
Ячейка 2
Ячейка 5
Ячейка 6Узел
Потери частиц
ADC ADB CDB ABCS S S S
tn
tn+1
A
B
C
D
Если точка D принадлежит треугольнику ABC, тогда
ADC ADB CDB ABCS S S S Условие пересечениягде εΔ – допустимое отклонение от
поверхности
Программная реализация на
CUDA
Функции ядра• Track ( карты полей, координаты и скорости частиц )
• метод Рунге-Кутта
• Losses ( геометрия установки, координаты частиц )• проверка пересечений с геометрией
• Rho ( координаты частиц )• раздача заряда в узлы сетки
• FFT ( функция плотности заряда или потенциал)• БПФ по базисным функциям sin(πn/N)
• PoissonSolver ( Фурье коэффициенты )• решение краевой задачи
• E_SC ( потенциал электрического поля ) • поиск электрического поля
__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” необходимо максимально сократить
Проблема количества “if, goto, for”
Инфлектор Электрическое
поле
Аксиальный канал
Магнитное поле
Линза Магнитное
поле
__global__ void Losses ( )• Нити одного блока копируют вершины
треугольников из global в shared память.
• Синхронизация нитей после копирования треугольников __syncthreads()
• Каждой частице соответствует номер нити: • int n = threadIdx.x+blockIdx.x*blockDim.x;
• Проверка условия пересечения частицей c номером n, загруженных в shared память, треугольников
• Для каждого блока геометрии есть своя функция Losses
__global__ void Rho
• Каждая частица с номером n = threadIdx.x + blockIdx.x*blockDim.x дает свой вклад, в окружающие ее узлы. Для этого по координатам частицы определяется какой ячейки она принадлежит
• Одна частица может дать вклад в 8 ближайших узлов. Таким образом, каждая нить заполняет свои 16 ячеек в общем массиве вклада: 8 – номеров узлов и 8 – значений вклада.
• Далее производится сложение этих вкладов для каждого узла.
__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 трех
переменных
__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.
__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
Результаты
Аксиальная инжекция пучка
Процесс банчировки пучка
Ускорение в циклотроне
Анимация
Анимация
Анимация
Потери частиц
Ускорение банчей
Оптимизация центральной области
φRF = 13°
φRF = 15°
φRF = 28°
φRF = 10°
С постами
Дуант
Без постов
«Земля»
F = ZURF - WGAP
Выбор оптимальной конфигурации
S0 S1 S2
S3 S4
Распределение ускоряющего поля
Производительность на 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 ГГц
Сравнение 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 ГГц
Сравнение 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 БЕЗ пространственного
заряда
Сравнение 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
С пространственным зарядом
Эффект пространственного заряда
I ~ 0Потери
24%
I = 4 мАПотери
94%
Заключение
• Очень дешевая технология в сравнении с CPU;
• Увеличение производительности на 1.5 – 2 порядка дает шанс проведения моделирования ресурсоемких физических моделей;
• Требует аккуратного программирования.