NVIDIA CUDA
для параллельных
вычислений на GPU

 Александр Харламов
       NVIDIA
Будущие прорывы в науке опираются на
                    компьютерное моделирование




                           Вычисли...
Вычисления на GPU
       Открывают новые возможности для исследователя
             Значительно сокращая время “до открыти...
Рост производительности GPU
     Пиковая производительность

                                  1 TF
                      ...
Масштабируемая программно-аппаратная архитектура
                           для параллельных вычислений



NVIDIA Confiden...
CUDA для параллельных вычислений

         Программно-аппаратный стек
         для процессоров NVIDIA

         Раскрывает...
Программная модель CUDA

         Масштабируемость на десятки ядер, сотни параллельных
         потоков

         Позволяе...
Ключевые абстракции CUDA

   Потоки CUDA выражают мелкозернистый параллелизм данных
               Упрощают параллельную д...
Потоки CUDA

        Ядро CUDA исполняется массивом потоков
                      Все потоки исполняют одну программу
    ...
Взаимодействие потоков

         Потоки могут быть не полностью независимы
                      Обмениваются результатами...
Блоки потоков: масштабируемость

        Монолитный массив потоков разделяется на блоки
                      Потоки внутр...
Прозрачная масштабируемость

         Блоки могут быть распределены на любой процессор
               Код на CUDA масштаби...
Гетерогенная модель вычислений
     Последовательная программа, с параллельными секциями
            Последовательный код ...
Расширения C для CUDA

             Стандартный C код                        Код на CUDA C
                               ...
Уровни параллелизма в CUDA

         Параллелизм на уровне потоков
                      Каждый поток – независимая нить и...
Пространства памяти CUDA
         Локальная память
                     Доступна в пределах потока
                       ...
Ресурсы для разработчиков

         Инструментарий разработчика CUDA
         (CUDA toolkit)
                      Компиля...
GPU как параллельный процессор
        GPU обладает массивно-параллельной вычислительной
        архитектурой
            ...
Архитектура NVIDIA Tesla 10
         240 процессоров работают на частоте 1.5 GHz: 1 TFLOPS в пике
         128 потоков на ...
Мультипроцессор NVIDIA Tesla 10
                                                                                          ...
Мифы о вычислениях на GPU

         Миф 1: GPU исполняет программы как графические
         шейдеры




NVIDIA Confidential
Мифы о вычислениях на GPU

         Миф 1: GPU исполняет программы как графические
         шейдеры

         Это не так –...
Мифы о вычислениях на GPU

         Миф 2: Архитектурно, GPU представляют из себя
                      Очень широкие SIMD...
Мифы о вычислениях на GPU

         Миф 2: Архитектурно, GPU представляют из себя
                      Очень широкие SIMD...
Мифы о вычислениях на GPU

         Миф 3: GPU неэффективны с точки зрения
         энергопотребления




NVIDIA Confident...
Мифы о вычислениях на GPU

         Миф 3: GPU неэффективны с точки зрения
         энергопотребления

         Показатель...
Мифы о вычислениях на GPU

         Миф 4: GPU не используют “настоящую” арифметику с
         плавающей точкой




NVIDIA...
Мифы о вычислениях на GPU

         Миф 4: GPU не используют “настоящую” арифметику с
         плавающей точкой

         ...
Поддержка операций с двойной точностью
                                                 NVIDIA GPU                        ...
Вопросы ?


                                                                               GPU
                           ...
Backup slides




NVIDIA Confidential
Производительность DGEMM




NVIDIA Confidential
FFT Performance: CPU vs GPU (8-Series)
                                              NVIDIA Tesla C870 GPU (8-series GPU)
...
Single Precision BLAS: CPU vs GPU (10-series)
                                                CUBLAS: CUDA 2.0b2, Tesla C1...
Double Precision BLAS: CPU vs GPU (10-series)
                                                       CUBLAS CUDA 2.0b2 on ...
Folding@Home

         Distributed computing to study protein folding
                     Alzheimer’s Disease
           ...
Molecular Dynamics : GROMACS

                                          Folding@Home



                                  ...
National Center for Atmospheric Research
         Weather Research and Forecast (WRF) model
          4000+ registered use...
Astrophysics N-Body Simulation




        12+ billion body-body interactions per second
        300 GFLOP/s+ on GeForce 8...
Linear Scaling with Multiple GPUs
                                  Oil and Gas Computing: Reverse Time Migration
        ...
Cambridge University Turbomachinery CFD
         Partial differential equations on structured grids

         NVIDIA GPUs ...
Upcoming SlideShare
Loading in …5
×

Kiev Tesla Day

1,437 views
1,370 views

Published on

Презентация: nVidia CUDA для параллельных вычислений на GPU

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,437
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
33
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Kiev Tesla Day

  1. 1. NVIDIA CUDA для параллельных вычислений на GPU Александр Харламов NVIDIA
  2. 2. Будущие прорывы в науке опираются на компьютерное моделирование Вычислительная Вычислительное Вычислительная Вычислительная моделирование физика геология медицина Вычислительная Вычислительная Вычислительная Обработка химия биология экономика сигналов NVIDIA Confidential 2008 © NVIDIA Corporation
  3. 3. Вычисления на GPU Открывают новые возможности для исследователя Значительно сокращая время “до открытия” Цикл обработки данных уменьшается от дней до минут, от недель до дней Новый взгляд на вычислительные архитектуры Активизируя исследования в области параллельных алгоритмов, новых программных моделей и вычислительных архитектур NVIDIA Confidential
  4. 4. Рост производительности GPU Пиковая производительность 1 TF GPU 10-й 900 серии 800 700 600 500 GPU 8-й 400 серии 300 200 100 0 2002 2003 2004 2005 2006 2007 2008 NVIDIA Confidential
  5. 5. Масштабируемая программно-аппаратная архитектура для параллельных вычислений NVIDIA Confidential
  6. 6. CUDA для параллельных вычислений Программно-аппаратный стек для процессоров NVIDIA Раскрывает потенциал GPU для вычислений общего назначения Спроектирован для поддержки любого вычислительного интерфейса ATI’s Compute “Solution” OpenCL, C, и т.д. NVIDIA Confidential
  7. 7. Программная модель CUDA Масштабируемость на десятки ядер, сотни параллельных потоков Позволяет сфокусироваться на разработке параллельных алгоритмов А не внутренней механике языка программирования Поддерживает гетерогенные вычисления CPU для последовательного кода, GPU – для параллельного NVIDIA Confidential
  8. 8. Ключевые абстракции CUDA Потоки CUDA выражают мелкозернистый параллелизм данных Упрощают параллельную декомпозицию задач Виртуализируют физические процессоры Блоки потоков CUDA выражают крупнозернистый параллелизм Простая модель исполнения Обеспечивают прозрачную масштабируемость Легковесные примитивы синхронизации Простая модель синхронизации Разделяемая память для обмена данными между потоками Кооперативное исполнение потоков NVIDIA Confidential
  9. 9. Потоки CUDA Ядро CUDA исполняется массивом потоков Все потоки исполняют одну программу Каждый поток использует свой индекс для вычислений и управления исполнением threadID 01234567 … float x = input[threadID]; float y = func(x); output[threadID] = y; … NVIDIA Confidential
  10. 10. Взаимодействие потоков Потоки могут быть не полностью независимы Обмениваются результатами вычислений Разделяют доступ к внешней памяти Возможность взаимодействия потоков – ключевая особенность программной модели CUDA Потоки кооперируют, используя разделяемую память и примитивы синхронизации NVIDIA Confidential
  11. 11. Блоки потоков: масштабируемость Монолитный массив потоков разделяется на блоки Потоки внутри блока взаимодействуют через разделяемую память Потоки в разных блоках не могут синхронизироваться Позволяет программам прозрачно масштабироваться Блок 0 Блок 1 Блок N-1 threadID 0 1 2 3 4 5 6 01234567 01234567 7 … … … float x = input[threadID]; float x = input[threadID]; float x = input[threadID]; … float y = func(x); float y = func(x); float y = func(x); output[threadID] = y; output[threadID] = y; output[threadID] = y; … … … NVIDIA Confidential
  12. 12. Прозрачная масштабируемость Блоки могут быть распределены на любой процессор Код на CUDA масштабируется на любое количество ядер Устройство B Устройство A SM SM SM SM SM SM Сетка блоков Блок 0 Блок 1 Блок 2 Блок 3 Блок 0 Блок 1 Блок 0 Блок 1 Блок 2 Блок 3 Блок 4 Блок 5 Блок 2 Блок 3 Блок 4 Блок 5 Блок 6 Блок 7 Блок 6 Блок 7 Блок 4 Блок 5 Блок 6 Блок 7 NVIDIA Confidential
  13. 13. Гетерогенная модель вычислений Последовательная программа, с параллельными секциями Последовательный код исполняется на CPU Параллельный код исполняется блоками потоков на множестве вычислительных модулей GPU Последовательный код Параллельное ядро A … KernelA<<< nBlk, nTid >>>(args); Последовательный код Параллельное ядро B … KernelB<<< nBlk, nTid >>>(args); NVIDIA Confidential
  14. 14. Расширения C для CUDA Стандартный C код Код на CUDA C __global__ void void saxpy_parallel(int n, float a, float *x, float *y) saxpy_serial(int n, float a, float *x, float *y) { int i = blockIdx.x*blockDim.x + { threadIdx.x; for (int i = 0; i < n; ++i) if (i < n) y[i] = a*x[i] + y[i]; y[i] = a*x[i] + y[i]; } } // Вызов параллельного ядра SAXPY с размером // блока в 256 потоков // Вызов последовательного int nblocks = (n + 255) / 256; // ядра SAXPY saxpy_parallel<<<nblocks, 256>>>(n, 2.0, x, y); saxpy_serial(n, 2.0, x, y); NVIDIA Confidential 1
  15. 15. Уровни параллелизма в CUDA Параллелизм на уровне потоков Каждый поток – независимая нить исполнения Параллелизм на уровне данных По потокам внутри блока По блокам внутри ядра Параллелизм на уровне задач Блоки исполняются независимо друг от друга NVIDIA Confidential
  16. 16. Пространства памяти CUDA Локальная память Доступна в пределах потока Сетка блоков Глобальная память Хранит исходные данные и Блок (0, 0) Блок(1, 0) результаты вычислений Разделяемая память Разделяемая память Внешняя к GPU, большой объем Регистры Регистры Регистры Регистры Разделяемая память Доступна всем потокам в блоке Поток(0, 0) Поток (1, 0) Поток(0, 0) Поток (1, 0) Небольшой объем, находится на кристалле процессора Высокая скорость доступа Локальная Локальная Локальная Локальная память память память память Память CPU (host) Host Глобальная память Недоступна потокам CUDA напрямую DRAM NVIDIA Confidential 2008 © NVIDIA Corporation
  17. 17. Ресурсы для разработчиков Инструментарий разработчика CUDA (CUDA toolkit) Компилятор и библиотеки Версии для Win32/64, MacOS, Linux доступны для загрузки Набор примеров и средств разработки (CUDA SDK) Готовые решения на CUDA Примеры использования Библиотеки и инструменты для отладки и оптимизации CUFFT, CUBLAS, CUDPP NVIDIA Confidential
  18. 18. GPU как параллельный процессор GPU обладает массивно-параллельной вычислительной архитектурой Выступает в роли сопроцессора для CPU Имеет доступ к выделенной памяти с широкой полосой пропускания 80+ GB/s Исполняет множество потоков одновременно Параллельные секции приложения исполняются как вычислительные ядра Каждое ядро исполняет множество потоков Потоки GPU легковесны Очень низкие накладные расходны на создание Мгновенное переключение контекстов GPU использует тысячи потоков для эффективности NVIDIA Confidential 2008 © NVIDIA Corporation
  19. 19. Архитектура NVIDIA Tesla 10 240 процессоров работают на частоте 1.5 GHz: 1 TFLOPS в пике 128 потоков на процессор: 30,720 потоков на чипе SM I-Cache MT Issue C-Cache SP SP Host CPU Bridge System Memory SP SP Tesla T10 Work Distribution SP SP `` `` `` `` `` `` `` `` `` `` SMC SMC SMC SMC SMC SMC SMC SMC SMC SMC I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache I-Cache MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue MT Issue C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache C-Cache SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP ` SP SP SP SP SP SP ` SP SP SP SP SP SP ` SP SP SP SP SP SP ` SP SP SP SP SP SP ` SP SP SP SP SP SP ` SP SP SP SP SP SP ` SP SP SP SP SP SP ` SP SP SP SP SP SP ` SP SP SP SP SP SP ` SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SP SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU SFU DP DP DP DP DP DP DP DP DP DP DP DP DP DP DP DP DP DP DP DP DP DP DP DP DP DP DP DP DP DP Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Shared Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Memory Texture Unit Texture Unit Texture Unit Texture Unit Texture Unit Texture Unit Texture Unit Texture Unit Texture Unit Texture Unit Tex L1 Tex L1 Tex L1 Tex L1 Tex L1 Tex L1 Tex L1 Tex L1 Tex L1 Tex L1 DP Interconnection Network ROP L2 ROP L2 ROP L2 ROP L2 ROP L2 ROP L2 ROP L2 ROP L2 Shared Memory DRAM DRAM DRAM DRAM DRAM DRAM DRAM DRAM NVIDIA Confidential
  20. 20. Мультипроцессор NVIDIA Tesla 10 SM I-Cache RISC-подобная скалярная система команд MT Issue Многопоточное исполнение инструкций C-Cache Поддержка до 1024 потоков SP SP TPC Аппаратный менеджер потоков Geometry Controller SMC 8 скалярных АЛУ I-Cache I-Cache I-Cache MT Issue MT Issue MT Issue SP SP C-Cache C-Cache C-Cache SP SP SP SP SP SP Операции с одинарной точностью IEEE-754 SP SP SP SP SP SP SP SP SP SP SP SP Целочисленные операции SP SP SP SP SP SP SP SP SFU SFU SFU SFU SFU SFU DP DP DP 16K 32-х битных регистров Shared Shared Shared Memory Memory Memory Texture Unit SP SP Tex L1 2 АЛУ для специальных операций sin/cos/rcp/rsq SFU SFU 1 АЛУ для операций с двойной точностью Поддерживает FMA DP 16KB разделяемой памяти Shared Memory NVIDIA Confidential
  21. 21. Мифы о вычислениях на GPU Миф 1: GPU исполняет программы как графические шейдеры NVIDIA Confidential
  22. 22. Мифы о вычислениях на GPU Миф 1: GPU исполняет программы как графические шейдеры Это не так – CUDA использует вычислительные ресурсы GPU напрямую NVIDIA Confidential
  23. 23. Мифы о вычислениях на GPU Миф 2: Архитектурно, GPU представляют из себя Очень широкие SIMD-машины (1000) ... … с крайне неэффективной поддержкой ветвления ... … которые ориентированые на обработку 4-х мерных векторов NVIDIA Confidential
  24. 24. Мифы о вычислениях на GPU Миф 2: Архитектурно, GPU представляют из себя Очень широкие SIMD-машины (1000) ... … с крайне неэффективной поддержкой ветвления ... … которые ориентированые на обработку 4-х мерных векторов Современные GPU используют SIMT исполнение, с размером блока (warp) в 32 элемента и скалярными потоками NVIDIA Confidential
  25. 25. Мифы о вычислениях на GPU Миф 3: GPU неэффективны с точки зрения энергопотребления NVIDIA Confidential
  26. 26. Мифы о вычислениях на GPU Миф 3: GPU неэффективны с точки зрения энергопотребления Показатель производительность/ватт для GPU от 4 до 20 раз выше чем у CPU NVIDIA Confidential
  27. 27. Мифы о вычислениях на GPU Миф 4: GPU не используют “настоящую” арифметику с плавающей точкой NVIDIA Confidential
  28. 28. Мифы о вычислениях на GPU Миф 4: GPU не используют “настоящую” арифметику с плавающей точкой GPU поддерживают стандарт IEEE-754 Сравнимы с другими вычислительными устройствами Поддерживаются вычисления с двойной точностью NVIDIA Confidential
  29. 29. Поддержка операций с двойной точностью NVIDIA GPU SSE2 Cell SPE Поддержка стандарта IEEE 754 IEEE 754 IEEE 754 Режимы округления для FADD и FMUL Все 4 режима IEEE: rtne, zero, inf, -inf Все 4 режима IEEE: rtne, zero, inf, -inf Только zero/truncate Обработка денормализованных чисел С полной скоростью Поддерживается, 1000+ циклов Не поддерживается Поддержка NaN Да Да Нет Поддержка переполнений и Да Да Бесконечности отсутствуют бесконечностей Флаги Нет Да Некоторые Да Нет Да FMA Извлечение квадратного корня Эмуляция на основе FMA Аппаратная поддержка Программная эмуляция Деление Эмуляция на основе FMA Аппаратная поддержка Программная эмуляция Точность операции 1/x 12 бит 12 бит 24 bit Точность операции 1/sqrt(x) 12 бит 12 бит 23 bit Точность операций log2(x) и 2^x Нет Нет 23 bit NVIDIA Confidential 2
  30. 30. Вопросы ? GPU CPU Oil & Gas Finance Medical Biophysics Numerics Audio Video Imaging NVIDIA Confidential 2008 © NVIDIA Corporation
  31. 31. Backup slides NVIDIA Confidential
  32. 32. Производительность DGEMM NVIDIA Confidential
  33. 33. FFT Performance: CPU vs GPU (8-Series) NVIDIA Tesla C870 GPU (8-series GPU) 1D Fast Fourier Transform Quad-Core Intel Xeon CPU 5400 Series 3.0GHz, On CUDA In-place, complex, single precision 90 80 70 GFLOPS 60 CUFFT 50 2.x CUFFT 40 1.1 • Intel FFT numbers 30 calculated by repeating 20 same FFT plan • Real FFT performance is 10 ~10 GFlops 0 Transform Size (Power of 2) Source for Intel data : http://www.intel.com/cd/software/products/asmo-na/eng/266852.htm NVIDIA Confidential
  34. 34. Single Precision BLAS: CPU vs GPU (10-series) CUBLAS: CUDA 2.0b2, Tesla C1060 (10-series GPU) BLAS (SGEMM) on CUDA ATLAS 3.81 on Dual 2.8GHz Opteron Dual-Core 350 CUDA 300 ATLAS 1 250 Thread GFLOPS 200 150 100 50 0 Matrix Size NVIDIA Confidential
  35. 35. Double Precision BLAS: CPU vs GPU (10-series) CUBLAS CUDA 2.0b2 on Tesla C1060 (10-series) BLAS (DGEMM) on CUDA ATLAS 3.81 on Intel Xeon E5440 Quad-core, 2.83 GHz 70 CUBLAS 60 50 GFLOPS 40 30 20 10 0 Matrix Size NVIDIA Confidential
  36. 36. Folding@Home Distributed computing to study protein folding Alzheimer’s Disease Huntington’s Disease Cancer Osteogenesis imperfecta Parkinson’s Disease Antibiotics CUDA client available now! 36 NVIDIA Confidential 2008 © NVIDIA Corporation
  37. 37. Molecular Dynamics : GROMACS Folding@Home 600 450 511 ns/day 369 300 4 150 170 4 100 0 CPU PS3 ATI GPU Tesla 8 Tesla 10 NVIDIA GPUS NVIDIA Confidential 2008 © NVIDIA Corporation
  38. 38. National Center for Atmospheric Research Weather Research and Forecast (WRF) model 4000+ registered users worldwide First-ever release with GPU acceleration 12km CONUS WRF benchmark Running on NCSA CUDA cluster Adapted 1% of WRF code to CUDA Resulted in 20% overall speedup Ongoing work to adapt more of WRF to CUDA NVIDIA Confidential 2008 © NVIDIA Corporation
  39. 39. Astrophysics N-Body Simulation 12+ billion body-body interactions per second 300 GFLOP/s+ on GeForce 8800 Ultra http://progrape.jp/cs/ 1-5 GFLOP/s on single-core CPU Faster than custom GRAPE-6Af n-body computer http://www.astrogpu.org/ NVIDIA Confidential 2008 © NVIDIA Corporation
  40. 40. Linear Scaling with Multiple GPUs Oil and Gas Computing: Reverse Time Migration Hand Optimized SSE Versus CUDA C 200 160 GFLOPS 120 80 40 0 1 4 8 128 256 384 Number of Cores X86 CPU NVIDIA GPU NVIDIA Confidential
  41. 41. Cambridge University Turbomachinery CFD Partial differential equations on structured grids NVIDIA GPUs enable faster design cycles and new science Up to 10 million points on a single GPU Scales to many GPUs using MPI 10x – 20x speedup Intel Core2 Quad 2.33 GHz CFD analysis of a jet engine fan, courtesy of Vicente Jerez Fidalgo, Whittle Lab Slide courtesy of Tobias Brandvik and Graham Pullan, Whittle Lab NVIDIA Confidential 2008 © NVIDIA Corporation

×