Download - Использование CUDA в расчете динамики пучка
![Page 1: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/1.jpg)
Использование CUDA в расчете динамики
пучка
С.Б. Ворожцов, В.Л. Смирнов, Е.Е. ПерепелкинДубна, ОИЯИ
6 апреля 2010
http://parallel-compute.ru
![Page 2: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/2.jpg)
Циклотрон
• Постановка задачи
• Численные методы
• Программная реализация на CUDA
• Результатыhttp://cbda.jinr.ru
CBDA: Cyclotron Beam Dynamic Analysis code
![Page 3: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/3.jpg)
Постановка задачи
![Page 4: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/4.jpg)
Линия инжекции
ЭСД
Дуант
Магнитный сектор
Инфлектор
Компьютерная модель циклотрона
![Page 5: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/5.jpg)
Области задания карт полей
Инфлектор Электрическое
поле
Аксиальный канал
Магнитное поле
Линза Магнитное
поле
![Page 6: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/6.jpg)
Ресурсоемкое моделирование
• Необходимость рассмотреть не менее 5 различных конфигураций центральной зоны;
• Необходимость ускорять различные ионы;
• Сложная геометрическая структура;• Учет пространственного заряда;
Одна итерация требует ~
несколько дней расчетов
![Page 7: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/7.jpg)
Уравнения движения
, , , 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 в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/8.jpg)
Пространственный заряд
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 в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/9.jpg)
Численные методы
![Page 10: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/10.jpg)
Уравнение движения
, , , , 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 в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/11.jpg)
Пример решения ОДУ
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 в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/12.jpg)
Метод Рунге - Кутта
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 в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/13.jpg)
Метод Рунге - Кутта
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 в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/14.jpg)
Метод Рунге - Кутта
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 в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/15.jpg)
Решение краевой задачи
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 в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/16.jpg)
Задание области для краевой задачи
, ,
Сетка Nx Ny Nz
Lx Ly LzШаг hx hy hz
Nx Ny Nz
Lx
Lz
Ly
Lx Lz
Ly
Lz
LyLx
![Page 17: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/17.jpg)
Раздача плотности заряда
Ячейка 7
Ячейка 1
Ячейка 8
Ячейка 3
Ячейка 2
Ячейка 5
Ячейка 6Узел
![Page 18: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/18.jpg)
Потери частиц
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 в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/19.jpg)
Программная реализация на
CUDA
![Page 20: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/20.jpg)
Функции ядра• Track ( карты полей, координаты и скорости частиц )
• метод Рунге-Кутта
• Losses ( геометрия установки, координаты частиц )• проверка пересечений с геометрией
• Rho ( координаты частиц )• раздача заряда в узлы сетки
• FFT ( функция плотности заряда или потенциал)• БПФ по базисным функциям sin(πn/N)
• PoissonSolver ( Фурье коэффициенты )• решение краевой задачи
• E_SC ( потенциал электрического поля ) • поиск электрического поля
![Page 21: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/21.jpg)
__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 в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/22.jpg)
Проблема количества “if, goto, for”
Инфлектор Электрическое
поле
Аксиальный канал
Магнитное поле
Линза Магнитное
поле
![Page 23: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/23.jpg)
__global__ void Losses ( )• Нити одного блока копируют вершины
треугольников из global в shared память.
• Синхронизация нитей после копирования треугольников __syncthreads()
• Каждой частице соответствует номер нити: • int n = threadIdx.x+blockIdx.x*blockDim.x;
• Проверка условия пересечения частицей c номером n, загруженных в shared память, треугольников
• Для каждого блока геометрии есть своя функция Losses
![Page 24: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/24.jpg)
__global__ void Rho
• Каждая частица с номером n = threadIdx.x + blockIdx.x*blockDim.x дает свой вклад, в окружающие ее узлы. Для этого по координатам частицы определяется какой ячейки она принадлежит
• Одна частица может дать вклад в 8 ближайших узлов. Таким образом, каждая нить заполняет свои 16 ячеек в общем массиве вклада: 8 – номеров узлов и 8 – значений вклада.
• Далее производится сложение этих вкладов для каждого узла.
![Page 25: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/25.jpg)
__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 в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/26.jpg)
__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 в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/27.jpg)
__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 в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/28.jpg)
Результаты
![Page 29: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/29.jpg)
Аксиальная инжекция пучка
![Page 30: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/30.jpg)
Процесс банчировки пучка
![Page 31: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/31.jpg)
Ускорение в циклотроне
![Page 32: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/32.jpg)
Анимация
![Page 33: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/33.jpg)
Анимация
![Page 34: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/34.jpg)
Анимация
![Page 35: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/35.jpg)
Потери частиц
![Page 36: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/36.jpg)
Ускорение банчей
![Page 37: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/37.jpg)
Оптимизация центральной области
φRF = 13°
φRF = 15°
φRF = 28°
φRF = 10°
С постами
Дуант
Без постов
«Земля»
F = ZURF - WGAP
![Page 38: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/38.jpg)
Выбор оптимальной конфигурации
S0 S1 S2
S3 S4
![Page 39: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/39.jpg)
Распределение ускоряющего поля
![Page 40: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/40.jpg)
Производительность на 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 в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/41.jpg)
Сравнение 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 в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/42.jpg)
Сравнение 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 в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/43.jpg)
Сравнение 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 в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/44.jpg)
Эффект пространственного заряда
I ~ 0Потери
24%
I = 4 мАПотери
94%
![Page 45: Использование CUDA в расчете динамики пучка](https://reader036.vdocuments.pub/reader036/viewer/2022081419/568143f4550346895db07e42/html5/thumbnails/45.jpg)
Заключение
• Очень дешевая технология в сравнении с CPU;
• Увеличение производительности на 1.5 – 2 порядка дает шанс проведения моделирования ресурсоемких физических моделей;
• Требует аккуратного программирования.