Вычисления на gpu с...

Post on 03-Jul-2020

13 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

1

Вычисления на GPU с помощью

MATLAB

Денис Жегалин

Технический маркетинг

Департамент MathWorks, SoftLine

2

Data Analysis Tasks

Reporting and

Documentation

Outputs for Design

Deployment

Share

Explore & Discover

Data Analysis

& Modeling

Algorithm

Development

Application

Development

Files

Software

Hardware

Access

Code & Applications

Automate

3

NEWS

MathWorks предоставляет поддержку

GPU в MATLAB

Портирование алгоритмов на графический

процессор NVIDIA

Ускорение вычислений на GPU кластерах

(локальных и распределенных) с помощью

специальных инструментов для

распараллеливания.

4

Спектрограмма показывает 50ти кратное

увеличение скорости вычислений на GPU

кластере

50x

5

Desktop Computer

Parallel Computing Toolbox™

Computer Cluster

MATLAB Distributed Computing Server™

Планировщик

Параллельные вычисления в MATLAB Инструменты и терминология

6

Worker Worker

Worker

Worker

Worker Worker

Worker

Worker TOOLBOXES

BLOCKSETS

MATLAB: Дополнительные работники

7

Parallel Computing позволяет

инженерам …

Larger Compute Pool Larger Memory Pool

11 26 41

12 27 42

13 28 43

14 29 44

15 30 45

16 31 46

17 32 47

17 33 48

19 34 49

20 35 50

21 36 51

22 37 52

Увеличить скорость вычислений Работать с большими объемами данных

8

Возможности

Встроенная поддержка для

расширений MATLAB

Поддержка высокоуровневых

программных конструкций:

parfor, distributed arrays, batch

Низкоуровневый контроль

вычислений:

Jobs/Tasks, spmd, MPI-interface

Пр

осто

та

ис

по

ль

зо

ва

ни

я

Ко

нтр

ол

ь н

ад

пр

оц

ес

со

м

9

Single

processor

Multicore Multiprocessor Cluster

Grid,

Cloud

GPU

Эволюция вычислительных

комплексов

10

Развитие параллельных вычислений в

MATLAB 2005 2006 2007 2008 2009 2010

v1.0 Distributed jobs

Dynamic licensing

На уровне задач

v3.0 Distributed arrays

Parallel math

Упрощение алгоритмов

v2.0 MPI functions

3rd party schedulers

На уровне данных

R2007a Local Workers

Упрощение настройки

оборудования R2008a

Parallel for-loop

Optimization Toolbox

Параллельные вычисления для ВСЕХ

R2008b Compilation

spmd support Возможность создания приложений с

распараллеливанием

R2009b Distributed arrays

Parallelism in toolboxes

Минимальные усилия по

распараллеливанию

GPU Beta

R2010b GPU arrays

GPU math

Использование

GPU

11

Что такое GPU ?

Массив вычислителей

– Сотни ядер на одном графическом

процессоре

– Ядра GPU дополняют ядра CPU

Выделенная высокоскоростная

память

* Parallel Computing Toolbox требует NVIDIA GPU с вычислительной способностью 1.3 ивыше,

включая NVIDIA Tesla 10-серий и 20-серий.

12

История развития GPU

3D Gaming & CAD Scientific Computing

13

Динамика

жидкостей

Вычислительные

финансы

Моделирование

погодных

условий

Решение задачи

N тел

Молекулярное

моделирование

Цифровая

обработка

сигналов

Области применения GPU

Список задач из CUDA Community Showcase:

http://www.nvidia.com/object/cuda_showcase_html.html

14

Почему GPU и почему сейчас?

Вычисления

– С двойной и одинарной точностью (single/double)

Операции соответствуют стандартам IEEE

Кроссплатформенность

15

Расчеты на GPU с помощью MATLAB

1) Использование GPU массивов

и встроенных функций

MATLAB

2) Разработка собственных

алгоритмов на GPU

3) Создание CUDA ядер на базе

написанного С кода

На одном или нескольких GPU:

Пр

осто

та

ис

по

ль

зо

ва

ни

я

Бо

ль

ши

й к

он

тр

ол

ь н

ад

пр

оц

ес

со

м

17

Пример использования:

GPU массив:

>> A = someArray(1000, 1000);

>> G = gpuArray(A); % Push to GPU memory

>> F = fft(G);

>> x = G\b;

>> z = gather(x); % Bring back into MATLAB

18

+100 функций, поддерживающих GPU

массивы

fft, fft2, ifft, ifft2

Умножение матриц (A*B)

Левое деление матриц (A\b)

LU разложение

‘ .’

abs, acos, …, minus, …, plus, …,

sin, …

19

Демонстрация

22

D = data;

iterations = 2000; % # of parallel iterations

stride = iterations*step; %stride of outer loop

M = ceil((numel(x)-W)/stride);%iterations needed

o = cell(M, 1); % preallocate output

for i = 1:M

% What are the start points

thisSP = (i-1)*stride:step: …

(min(numel(x)-W, i*stride)-1);

% Move the data efficiently into a matrix

X = copyAndWindowInput(D, window, thisSP);

% Take lots of fft's down the colmuns

X = abs(fft(X));

% Return only the first part to MATLAB

o{i} = X(1:E, 1:ratio:end);

end

Пример:

CPU:

23

D = data;

iterations = 2000; % # of parallel iterations

stride = iterations*step; %stride of outer loop

M = ceil((numel(x)-W)/stride);%iterations needed

o = cell(M, 1); % preallocate output

for i = 1:M

% What are the start points

thisSP = (i-1)*stride:step: …

(min(numel(x)-W, i*stride)-1);

% Move the data efficiently into a matrix

X = copyAndWindowInput(D, window, thisSP);

% Take lots of fft's down the colmuns

X = abs(fft(X));

% Return only the first part to MATLAB

o{i} = X(1:E, 1:ratio:end);

end

D = gpuArray(data);

iterations = 2000; % # of parallel iterations

stride = iterations*step; %stride of outer loop

M = ceil((numel(x)-W)/stride);%iterations needed

o = cell(M, 1); % preallocate output

for i = 1:M

% What are the start points

thisSP = (i-1)*stride:step: ...

(min(numel(D)-W, i*stride)-1);

% Move the data efficiently into a matrix

X = copyAndWindowInput(D, window, thisSP);

% Take lots of fft's down the colmuns

X = gather(abs(fft(X)));

% Return only the first part to MATLAB

o{i} = X(1:E, 1:ratio:end);

end

Пример:

CPU GPU

24

Worker Worker

Worker

Worker

Worker Worker

Worker

Worker TOOLBOXES

BLOCKSETS

MATLAB: Дополнительные работники

25

D = gpuArray(data);

iterations = 2000; % # of parallel iterations

stride = iterations*step; %stride of outer loop

M = ceil((numel(x)-W)/stride);%iterations needed

o = cell(M, 1); % preallocate output

for i = 1:M

% What are the start points

thisSP = (i-1)*stride:step: ...

(min(numel(D)-W, i*stride)-1);

% Move the data efficiently into a matrix

X = copyAndWindowInput(D, window, thisSP);

% Take lots of fft's down the colmuns

X = gather(abs(fft(X)));

% Return only the first part to MATLAB

o{i} = X(1:E, 1:ratio:end);

end

D = gpuArray(data);

iterations = 2000; % # of parallel iterations

stride = iterations*step; %stride of outer loop

M = ceil((numel(x)-W)/stride);%iterations needed

o = cell(M, 1); % preallocate output

parfor i = 1:M

% What are the start points

thisSP = (i-1)*stride:step: ...

(min(numel(D)-W, i*stride)-1);

% Move the data efficiently into a matrix

X = copyAndWindowInput(D, window, thisSP);

% Take lots of fft's down the colmuns

X = gather(abs(fft(X)));

% Return only the first part to MATLAB

o{i} = X(1:E, 1:ratio:end);

end

Пример:

CPU GPU несколько GPU

26

Тест-Драйв

27

Спектрограмма показывает 50и кратное

увеличение скорости вычислений на GPU

кластере

50x

37

Какое оборудование поддерживается?

GPU NVIDIA соответствующие

спецификации CUDA 1.3

Список оборудования:

http://www.nvidia.com/object/cuda_gpus.html

38

® ®

Контактная информация департамента

Mathworks

Softline: www.sl-matlab.ru

matlab.exponenta.ru

Mathworks: www.mathworks.com

E-mail: matlab@softline.ru

Phone: +7 (495) 232 00 23 доб. 0609

top related