2012 02 15_parallel_programming_lecture01

2,803 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,803
On SlideShare
0
From Embeds
0
Number of Embeds
1,937
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

2012 02 15_parallel_programming_lecture01

  1. 1. Высокопроизводительные вычисления Калишенко Е.Л. Академический Университет
  2. 2. Мотивация● Генетика и протеомика ● Климатология ● Физика высоких энергий ● Астрономия, банковские транзакции...
  3. 3. История (кратко)Год Событие1958 IBM 709 – независимые процессоры ввода/вывода ...2002 Intel Hyper-Trading2005 Intel Pentium 4D / AMD Athlon X22006 Intel Core 2 Duo2008 Intel Core Quad, Nehalem (8/16) + SSE 4.2 ...
  4. 4. Содержание Средства Многопоточное Распределёное Другие программирование программирование оптимизации Потоки ОС Вычисления MPI на GPU Java-потоки Оптимизации Globus Toolkit в компиляторах Boost-потоки Lock-free алгоритмы OpenMP Intel TBBJava.util.concurrent Синхронизация
  5. 5. Схема средств // todo нарисовать нормальную схему● Пока смотрим на доску :)
  6. 6. Обращаем внимание...1. Ускорение и Масштабируемость2. Закон Амдала: S= 1 ; a – доля последовательного кода, (1−a ) • a+ • p – число процессоров p Процессор Процессор Процессор Процессор Ядро Ядро Ядро Ядро Ядро Ядро Ядро Ядро Оперативная память
  7. 7. SSE (Streaming SIMD Extensions)Версия Возможности 1 Восемь 128-битных регистров для 4 чисел по 32 бит (с плавающей точкой) 2 Теперь два 64-битных числа в регистре 3 Уже 13 инструкций (+горизонтальная работа с регистрами) 4.1 47 инструкций (ускорение видео) 4.2 54 инструкции (операции со строками)float a[4] = { 300.0, 4.0, 4.0, 12.0 };float b[4] = { 1.5, 2.5, 3.5, 4.5 };__asm { movups xmm0, a ; // поместить из a в регистр xmm0 movups xmm1, b ; // поместить из b в регистр xmm1 mulps xmm1, xmm0 ; // перемножить пакеты плавающих точек movups a, xmm1; // выгрузить результаты из xmm1 по адресам a};
  8. 8. Процессы и потоки Стэк Процесс – исполнение последовательности потока действий main() • В начале выполнения процесс Стэк Стэк представляет собой один потокпотока… потока • Потоки могут создавать новые потоки в пределах одного процесса Сегмент кода Сегмент данных• Все потоки данного • каждый поток имеет свой стэкпроцесса имеют общие выполнениясегмент кода и сегментданных
  9. 9. Вилочный параллелизм
  10. 10. Потоки ОС Операция Posix ThreadsСоздание pthread_create()Ожидание завершения pthread_join()Захват мьютекса pthread_mutex_lock()Освобождение мьютекса pthread_mutex_unlock()int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);
  11. 11. Пример Posix Threads (1)
  12. 12. Пример Posix Threads (2)
  13. 13. Java-потоки1. Наследование от Thread2. Реализация Runnable3. Остальное привычно: start(), join()
  14. 14. Boost-потоки Обёртка над потоками ОС (Posix или Win threads)● Конструктор из указателя на функцию● joinable()● join()● timed_join()● detach()● get_id()● interrupt()● sleep()
  15. 15. Пример boost::threadboost::thread_group th_group;for(...i){ boost::thread* th = newboost::thread(boost::bind(&Класс::<функция>, this, i)); th_group.add_thread(th);//th_group.create_new(boost::bind(&Класс::<функция>,this, i));}th_group.join_all();
  16. 16. OpenMP1.Стандарт интерфейса для многопоточного программирования над общей памятью2.Набор средств для языков C/C++ и Fortran: – Директивы компилятора (#pragma omp …) – Библиотечные подпрограммы (get_num_threads()) – Переменные окружения (OMP_NUM_THREADS)
  17. 17. Общий вид OpenMP#include <omp.h>int main(){ // последовательный код #pragma omp parallel { // параллельный код } // последовательный код return 0;}
  18. 18. Пример OpenMP#include <stdio.h>#include <omp.h>int main(){ int i; #pragma omp parallel { #pragma omp for for (i=0;i<1000;i++) printf(“%d ”,i); } return 0;}
  19. 19. Директивы OpenMP1. Управление задачами: For Master Section...2. Синхронизация: Private Shared Reduction...
  20. 20. Intel TBB (Threading Building Blocks)
  21. 21. Пример Intel TBB
  22. 22. Intel TBB с функтором
  23. 23. Java.util.concurrent1. Пулы потоков: – FixedThreadPool – CahcedThreadPool – SingleThreadPool...2. Атомики (AtomicBoolean, AtomicLong...)3. Потокобезопасные контейнеры (ConcurrentHashMap, ConcurrentLinkedQueue...)4. Свои примитивы (ReentrantLock...)5. Будущее (Future<>)
  24. 24. Сравнение средств

×