Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property.

Презентация:



Advertisements
Похожие презентации
Разработка параллельных приложений для многоядерных систем С.В. Ковальчук НИИ Наукоемких компьютерных технологий, СПбГУ ИТМО.
Advertisements

Многопоточное программирование в OpenMP Киреев Сергей ИВМиМГ.
Параллельное программирование с использованием технологии OpenMP Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Томский политехнический университет.
Программирование многоядерных архитектур (слайды для лекции 2013/04/20) Киреев С.Е., Маркова В.П., Остапкевич М.Б., Перепелкин В.А. МО ВВС ИВМиМГ СО РАН.
OpenMP. Различие между тредами и процессами ПроцессыТреды.
*Other names and brands may be claimed as the property of others.. Copyright © 2003 Intel Corporation Технология Hyper-Threading в играх на реальных примерах.
OpenMPOpenMPРазличие между тредами и процессами ПроцессыТреды.
ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ УМНОЖЕНИЯ МАТРИЦ И ВЕКТОРОВ.
Лекция 10 СОЗДАНИЕ ПАРАЛЛЕЛЬНЫХ ПРОГРАММ. Возможности Автопараллелизация. Использование директив. Языковые средства. CoArray для систем с распределенной.
МГУ им. М.В. Ломоносова, Москва, 21 октября 2011г. КОНСОРЦИУМ УНИВЕРСИТЕТОВ РОССИИ Курс: «Технология параллельного программирования OpenMP» Лабораторная.
Методика распараллеливания программ в модели DVM Институт прикладной математики им. М.В.Келдыша РАН
Параллельное программирование с использованием технологии OpenMP Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 3 Томский политехнический.
ЕГЭ 2012 Информатика и ИКТ Консультация 3. Пример.
Intel® Cilk TM Plus Введение Лекция 2. Многопоточный параллелизм – от OpenMP к Intel® Cilk TM Plus Немнюгин Сергей Андреевич.
Некоторые вопросы оптимизации.
Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property.
Интернет Университет Суперкомпьютерных технологий Отладка эффективности OpenMP- программ. Учебный курс Параллельное программирование с OpenMP Бахтин В.А.,
Основы OpenMP Nikita Panov
Оптимизации циклических конструкций. 10/17/10 FE (C++/C или Fortran) Внутреннее представление Профилировщик Скалярные оптимизации HPO Генератор кода Исходные.
Инструкции C++ Условная инструкция Формат: if (условие) оператор; else оператор; Пример: if (i!=0) { if (j) j++; if(k) k++; else if(p) k--; } else i--;
Транксрипт:

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. Оптимизирующий компилятор. Автопараллелизация.

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. Многоядерные/многопроцессорные Intel архитектуры Intel® Pentium® Processor Extreme Edition ( ) Представил технологию двойного ядра (dual core) Intel® Xeon® Processor 5100, 5300 Series Intel® Core2 Processor Family (2006-) Появились двухпроцессорные архитектуры. Процессоры поддерхивают технологию четверного ядра (quad-core) Intel® Xeon® Processor 5200, 5400, 7400 Series Intel® Core2 Processor Family (2007-) Есть семейства в которых количество ядер на процессоре доведено до процессора. Intel® Atom Processor Family (2008-) Процессор с высокой энергоэффективностью. Intel® Corei7 Processor Family (2008-) Hyperthreading технология. Cистема с неоднородным доступом в память. 10/17/10

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. Одной из главных особенностей многоядерной архитектуры является то, что ядра совместно используют часть подсистемы памяти и шину данных. 10/17/10

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. Классификация многопроцессорных систем по использованию памяти: 1.) Массивно-параллельные компьютеры или системы с распределенной памятью. (MPP системы). Каждый процессор полностью автономен. Существует некоторая коммуникационная среда. Достоинства: хорошая масштабируемость Недостатки: медленное межпроцедурное взаимодействие 2.) Системы с общей памятью (SMP системы) Все процессоры равноудалены от памяти. Связь с памятью осуществляется через общую шину данных. Достоинства: хорошее межпроцессорное взаимодействие Недостатки: плохая масштабируемость большие затраты на синхронизацию подсистем кэшей 3.) Системы с неоднородным доступом к памяти (NUMA) Память физически распределена между процессорами. Единое адресное пространство поддерживается на аппаратном уровне. Достоинства: хорошее межпроцессорное взаимодействие и масштабируемость Недостатки: разное время доступа к разным сигментам памяти. 10/17/10

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. Intel QuickPath Architecture 10/17/10

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. 10/17/10 Нестабильность работы приложений на многопроцессорных машинах с неоднородным доступом к памяти.

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. Плюсы и минусы использования многопоточных приложений ++: Вычислительные ресурсы увеличиваются пропорционально кол- ву используемых реальных ядер. --: Усложнение разработки Необходимость синхронизировать потоки Потоки конкурируют за ресурсы Создание потоков имеет свою цену Вывод: В случае разработки бизнес-приложений четко осознавайте цели и цену распараллеливания вашей программы. 10/17/10

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. Автоматическая параллелизация – это процесс автоматического преобразования последовательного программного кода в многопоточный (multi-threaded) код для того чтобы использовать несколько ядер одновременно. Цель автоматической параллелизации – освободить программистов от тяжелой и нудной ручной параллелизации. /Qparallel enable the auto-parallelizer to generate multi-threaded code for loops that can be safely executed in parallel

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. Выгодность автоматической параллелизации на простом примере REAL :: a(1000,1000),b(1000,1000),c(1000,1000) integer i,j,rep_factor DO I=1,1000 DO J=1,1000 A(J,I) = I B(J,I) = I+J C(J,I) = 0 END DO DO rep_factor=1,1000 C=B/A+rep_factor END DO END 10/17/10

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners.

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. Хорошо и плохо масштабируемые алгоритмы. 10/17/10 void matrix_mul_matrix(int n, float C[n][n], float A[n][n], float B[n][n]) { int i,j,k; for (i=0; i

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. Плохо масштабируемые алгоритмы: 10/17/10 void matrix_add(int n, float Res[n][n],float A1[n][n], float A2[n][n], float A3[n][n],float A4[n][n], float A5[n][n], float A6[n][n], float A7[n][n], float A8[n][n]) { int i,j; for (i=0; i

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. Допустимость автопараллелизации. Автопараллелизация – цикловая перестановочная оптимизация. Упорядоченное выполнение итераций => неопределенный порядок выполнения итераций. Необходимое условие – отсутствие любых зависимостей внутри цикла. /Qpar-report{0|1|2|3} control the auto-parallelizer diagnostic level /Qpar-report3 сообщает причины по которым компилятор не параллелизует тот или иной цикл, в том числе сообщает какие зависимости препятствуют автопараллелизации. 10/17/10

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. Выгодность параллелизации /Qpar_report3 информирует, если параллелизация невыгодна C:\test_par.c(27) (col. 1): remark: loop was not parallelized: insufficient computational work. Точное определение выгодности автопараллелизации во время компиляции достаточно тяжелая задача. Существуют эффекты производительности, которые сложно оценить, например «эффект первого прикосновения». В большинстве случаев компилятор может не иметь представления о количестве итераций в цикле. Используйте директивы параллелизации при экспериментах с производительностью. 10/17/10

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. #pragma concurrent – игнорировать предполагаемые зависимости в следующем цикле #pragma concurrent call – вызов функции в следующем цикле безопасен для параллельного выполнения. #pragma concurrentize – параллелизовать следующий цикл #pragma no concurrentize - не параллелизовать следующий цикл #pragma prefer concurrent параллелизовать следующий цикл, если это безопасно #pragma prefer serial – предложить компилятору не параллелизовать следующий цикл #pragma serial – заставить компилятор параллелизовать следующий цикл

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. Автоматическая параллелизация осуществляется с использованием интерфейса OpenMP. OpenMP (Open Multi-Processing) – это программный интерфейс, который поддерживает многоплатформенное многопроцессорное программирование с общей памятью на C/C++ и Фортране на многих архитектурах. Количество потоков, используемых вашим приложением, может изменяться с помощью установки переменной окружения OMP_NUM_THREADS (по умолчанию будут использоваться все доступные ядра) 8 Threads 16 Threads

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. 10/17/10

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. Параллелизация цикла выглядит как создание функции в которую в качестве аргументов передаются границы цикла и все используемые объекты. Внутри функции находится исходный цикл, но его границы определяются сс помощью параметров функции. Запускаются несколько экземпляров данной функции в разных потоках с различными значениями границ цикла. Т.е. итерационное пространство цикла разбивается на несколько частей и каждый поток обрабатывает свою часть итерационного пространства.

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. /Qpar-runtime-control[n] Control parallelizer to generate runtime check code for effective automatic parallelization. n=0 no runtime check based auto-parallelization n=1 generate runtime check code under conservative mode (DEFAULT when enabled) n=2 generate runtime check code under heuristic mode n=3 generate runtime check code under aggressive mode 10/17/10

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. Взаимодействие с другими цикловыми оптимизациями. Объединение циклов и создание больших циклов. Автопараллелизация. Оптимизация цикла в поточной функции в соответствии с обычными соображениями. (развертка, векторизация, разбиение на несколько циклов и т.п.) Эти соображения можно использовать при написании программы. Стремитесь создавать большие циклы без зависимостей, т.е. такие чтобы итерации могли выполняться в произвольном порядке. 10/17/10

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. Предвыборка загрузка данных из относительно медленной памяти в кэш до того, как эта память непосредственно потребовалась процессору. Существуют несколько методов использования этой техники для оптимизации приложения: Использование интринсиков Использование компиляторной опции Интринсик предвыборки определен в xmmintrin.h и имеет форму #include enum _mm_hint { _MM_HINT_T0 = 3, (L1) _MM_HINT_T1 = 2, (L2) _MM_HINT_T2 = 1, (L3) _MM_HINT_NTA = 0 }; void _mm_prefetch(void *p, enum _mm_hint h); Он подгружает в кэш кэш-линию начиная с указанного адреса (размер кэш линии 64 байта) В случае с Фортраном используется вызов CALL mm_prefetch(P,HINT) 10/17/10

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. DO I=1,N,SEC JJ=16 DO J=1,K A(J,I) = A(J,I)+B(J,I)+C(J,I) #ifdef PERF IF(JJ==16) THEN CALL mm_prefetch(A(J,I+SEC),1) CALL mm_prefetch(B(J,I+SEC),1) CALL mm_prefetch(C(J,I+SEC),1) JJ = 0 ENDIF #endif JJ=JJ+1 END DO 10/17/10 Пример использования

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. Софтварный префетч может быть полезен для решения проблем типичного C++ кода. Одной из проблем С/C++ является проблема доступа к памяти возникающая при обработке различных массивных списков. В случае если вы последовательно обрабатываете список каких-то объектов, имеет смысл параллельно подгружать в кэш следующий объект и те объекты, к которым обрабатывающая функция доступается через указатели-члены данного объекта. 10/17/10

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. Использование ключей компилятора /Qopt-prefetch[:n] enable levels of prefetch insertion, where 0 disables. n may be 0 through 4 inclusive. Default is 2. /Qopt-prefetch- disable(DEFAULT) prefetch insertion. Equivalent to /Qopt-prefetch:0 10/17/10

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. CEAN (C/C++ Extensions for Array Notations Programming Model) Декларация массивов: 10/17/10 LengthStorage ClassDeclaration FixedStaticstatic int a[16][128] Autovoid foo(void) { int a[16][128]; } Parametervoid bar(int a[16][128]); Heapint (*p2d)[128]; Variable (C99)Autovoid foo(int m, int n) { int a[m][n]; } Parametervoid bar(int m, int n, int a[m][n]); Heapvoid bar(int m, int n) { int (*p2d)[n]; }

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. Декларация секций: section_operator :: = [ : : a[0:3][0:4] b[0:2:3] Вы должны использовать расширение –std=c99 (Linux и MAC OS) или /Qstd=c99 Пример декларации массива и использования секции: typedef int (*p2d)[128]; p2d p = (p2d) malloc (sizeof(int)*rows*128); p[0:rows][:] Большинство C/C++ операторов доступны для работы с секциями. a[:]*b[:] // поэлементное умножение a[3:2][2:2] + b[5:2][5:2] // сложение матриц a[0:4]+c // добавление скаляра к вектору a[:][:] = b[:][1][:] + c // матричное присвоение 10/17/10

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. Прототипы некоторых матричных функций: 10/17/10 Function PrototypesDescriptions __sec_reduce(fun, identity, a[:])Generic reduction function. Reduces fun across the array a[:] using identity as the initial value. __sec_reduce_add(a[:])Built-in reduction function. Adds values passed as arrays __sec_reduce_mul(a[:])Built-in reduction function. Multiplies values passed as arrays __sec_reduce_all_zero(a[:])Built-in reduction function. Tests that array elements are all zero __sec_reduce_all_nonzero(a[:])Built-in reduction function. Tests that array elements are all non-zero __sec_reduce_any_nonzero(a[:])Built-in reduction function. Tests for any array element that is non-zero __sec_reduce_min(a[:])Built-in reduction function. Determines the minimum value of array elements __sec_reduce_max(a[:])Built-in reduction function. Determines the maximum value of array elements __sec_reduce_min_ind(a[:])Built-in reduction function. Determines the index of minimum value of array elements __sec_reduce_max_ind(a[:])Built-in reduction function. Determines the index of maximum value of array elements

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. #include #define N 2000 typedef double (*p2d)[]; void matrix_mul(int n, double a[n][n], double b[n][n],double c[n][n]) { int i,j; a[:][:] =1; b[:][:] =-1; for(i=0;i

Software & Services Group, Developer Products Division Copyright© 2010, Intel Corporation. All rights reserved. *Other brands and names are the property of their respective owners. 10/17/10 Спасибо за внимание!