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

Post on 12-Jan-2016

77 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

Использование 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 порядка дает шанс проведения моделирования ресурсоемких физических моделей;

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

top related