Преимущества распараллеливания на CPU и GPU в MATLAB Михаил Шпак Инженер MathWorks 1 Доступные высокопроизводительные устройства Один Много процессор ядер Много процессоров Кластер Грид, Облако Графический процессор 2 Parallel Computing Toolbox Parallel Computing Toolbox Легко попробовать параллелизм на многоядерных компьютерах Быстро разрабатывать параллельный приложения на локальном компьютере Воспользоваться всеми преимуществами настольного ПК Отдельный расчетный кластер не требуется 3 Масштабирование на кластер без изменения кода Computer Cluster Parallel Computing Toolbox MATLAB Distributed Computing Server CPU Worker CPU Worker rd Party 3 Scheduler Scheduler CPU Worker CPU Worker 4 Создание параллельных приложений Уровень контроля Требуемые усилия Минимальный Никаких усилий Средний Обширный Средние Значительные Поддержка встроена в тулбоксы Высокоуровневые конструкции: (напр. parfor, batch, distributed) Низкоуровневые конструкции: (напр. Jobs/Tasks, MPI-based) 5 Расширения MATLAB и Simulink со встроенной поддержкой для параллельных вычислений Optimization Toolbox Global Optimization Toolbox Statistics Toolbox Bioinformatics Toolbox Neural Network Toolbox Communications System Toolbox Model-Based Calibration Toolbox Simulink Simulink Design Optimization Simulink Code \ Embedded Coder И многие другие… Worker Worker TOOLBOXES Worker Worker Worker BLOCKSETS Worker Worker 6 Механизм цикла parfor 1 2 1 23 34 4 55 66 7 88 9 910 10 Worker a(i) = i; a = zeros(10, 1) parfor i = 1:10 a(i) = i; end a Worker a(i) = i; Worker a(i) = i; Worker a(i) = i; Объединение MATLAB Workers 7 Использование планировщика Задача Worker Результат Задача Worker Результат Задание TOOLBOXES Задача Результаты Планировщик BLOCKSETS Результат Worker Задача Результат Worker 8 Распараллеливание позволяет 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 9 Возможности увеличения производительности Использование больше ядер (CPUs) Core 1 Core 2 Core 3 Core 4 Использование GPUs Device Memory Cache 10 Поддержка GPU в Parallel Computing Toolbox NVIDIA GPUs с вычислительной способностью 1.3 или выше – включая Tesla 10-серий и 20-серий (напр., NVIDIA Tesla C2075 GPU: 448 процессоров, 6 Гб памяти) – http://www.nvidia.com/object/cuda_gpus.html Почему требуется вычислительная способность 1.3 – Поддерживает doubles (базовый тип данных в MATLAB) – Операции соответствуют стандарту IEEE – Поддержка кроссплатформенности 11 Использование интерфейса GPU array со встроенными функциями MATLAB Запуск пользовательских функций над элементами GPU array Больше контроля Проще в использовании Возможности при использовании GPUs Создание ядер из существующего кода CUDA и PTX файлов 12 Пример использования: 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 13 Тест: решение 2D волнового уравнения CPU против GPU Grid Size CPU (s) GPU (s) Ускорение 64 x 64 0.1004 0.3553 0.28 128 x 128 0.1931 0.3368 0.57 256 x 256 0.5888 0.4217 1.4 512 x 512 2.8163 0.8243 3.4 1024 x 1024 13.4797 2.4979 5.4 2048 x 2048 74.9904 9.9567 7.5 Intel Xeon Processor X5650, NVIDIA Tesla C2050 GPU 14 Масштабирование на несколько GPU Worker Worker Worker TOOLBOXES BLOCKSETS Worker Worker Worker Worker Worker 15 Работа с несколькими GPU Single GPU N = 1000; % Number of iterations A = gpuArray(A); % transfer data to GPU for ix = 1:M % Do the GPU-based calculation X = myGPUFunction(ix,A); % Gather data Xtotal(ix,:)= gather(X); end Multiple GPUs N = 1000; % Number of iterations spmd % Assign each worker a different GPU gpuDevice(labindex); A = gpuArray(A); % transfer data end parfor ix = 1:M % Do the GPU-based calculation X = myGPUFunction(ix,A); % Gather data Xtotal(ix,:)= gather(X); end http://blogs.mathworks.com/loren/2013/06/24/running-monte-carlo-simulations-on-multiple-gpus/ 16 Контактная информация Web: www.matlab.ru E-mail: matlab@sl-matlab.ru W: www.matlab.ru Тел.: +7 (495) 232 00 23 доб. 0609 E : matlab@sl-matlab.ru Т : +7 (495) 232 00 23 доб. 0609 Дополнительная информация: www.mathworks.com 17