38991_lecture3

advertisement
Параллельные вычисления
Сергей Васильевич Федоров,
Лекция № 3
Распараллеливание в рамках Win32 API
Открытый стандарт OpenMP
2. Компиляция, сборка и отладка в Intel Visual Fortran.
Кодовый Сегмент, Сегмент данных, Стэк, Куча
Процессы и Потоки, различие между ними. SIMD.
2.1 MS Visual Studio и Распараллеливание в рамках Win32 API:
Критические секции, События, Семафоры, Mutex
2.2 Открытый стандарт OpenMP.
Отладка параллельного исполнения потоков с помощью Intel VTune.
Обнаружение ошибок с помощью Intel Thread Checker.
Оптимизация исполнения с помощью Intel Thread Profiler.
Сегментация виртуального адресного пространства
Очереди, таблицы
прерываний
Cегменты Модуля,
Вызов и выход из функции,
…
Кодовый сегмент,
Read only
Cегмент lданных,
Процесс
-Собственное адресное
пространство,
-Общие таблицы системных
вызовов
…
СТЭК:
Локальные переменные,
Аргументы функций
Отдельные для каждого
потока
SIMD
Single Instructions
Multiple Data
КУЧА:
общие данные для всех потоков
Поток
-Общее адресное пространство
внутри процесса,
-Собственный Стэк вызовов
исполняемых процедур
типы массивов,
область видимости,
размещение,
очистка
после выхода из
программы
явно заданные,
Arr(-3:10)
явно заданные,
Arr(-3:10)
неявно заданные,
,allocatable:: Arr(:)
глобальные (модуль),
сегмент данных,
локальная (функция),
СТЭК ,
функции
локальная (функция),
КУЧА,
функции
неявно заданные,
, pointer:: Arr(:)
локальная (функция),
глобальные (модуль),
КУЧА,
программы
Распараллеливание в рамках Win32 API
Базовое Распараллеливание с помощью Потоков в рамках одного процесса
Инструменты синхронизации потоков (See MSDN Help)
Критические секции, (Защита от одновременного доступа к коду)
1. EnterCriticalSection, ….. КОД
2. LeaveCriticalSection
События,
(Асинхронная Защита от обобщенных событий)
1. WaitForSingleObject(event)
2. PulseEvent – всем ждущим потокам
Семафоры,
(Ограничение одновременного использования ресурса)
1. CreateSemaphore(num) – по числу разреш.потоков
2. WaitForSingleObject(semaphor) - открыт или закрыт
3. ReleaseSemaphore – освобождение занятого ресурса
Mutex
(Защита от одновременного использования ресурса)
1. CreateMutex – ассоциация с ресурсом по имени
2. WaitForSingleObject(mutex) - завладеет ресурсом или нет
3. ReleaseMutex – освобождение занятого ресурса
Mutex синхронизирует процессы, и защищает от взаимоблокировок (deadlock)
Параллельные вычисления
Шаблонный пример решения линейного уравнения диффузии.
 2
T
2 
2
 T   2  2  T ,
t
 x y 
Ti ,nj1  Ti ,nj
dt

n
n
n
n
n
n
n
n
1  Ti 1, j  Ti , j Ti , j  Ti 1, j  1  Ti , j 1  Ti , j Ti , j  Ti , j 1 




 

dx 
dx
dx
dy
dy
 dy 

Ti n1, j  Ti n1, j  2Ti ,nj
dx*dx
n 1
i, j
T
 T

Ti ,nj 1  Ti ,nj 1  2Ti ,nj
n
i 1, j
dy*dy
T
n
i 1, j
,
T
dt = dx*dy/4, dx = dy, 
n
i , j 1
T
n
i , j 1
 / 4,
Перенормировка координат, чтобы получить отображение с единичной нормой.
Параллельные вычисления
DO iter = 1,iterMax;
logo =.true.
forall (i=1:n,j=1:n,abs(0.25*(T(i-1,j)+T(i+1,j)+T(i,j-1)+T(i,j+1))-T(i,j))>eps)
T(i,j)=0.25*(T(i-1,j)+T(i+1,j)+T(i,j-1)+T(i,j+1)); logo(i,j) =.false.
end forall;
if( all(logo) ) exit
ENDDO
double precision::Ti1,Tj1(n),Tnew,Tj1new(n) ! Tj1(:)=T(:,j-1), Ti1=T(i-1,j)
DO iter = 1,iterMax ; Tj1(:)=T(:,0);
logo =.true.
DO j=1,n ; Ti1=T(0,j)
DO i=1,n
Tnew= 0.25*(Ti1+T(i+1,j)+Tj1(i)+T(i,j+1))
Ti1 = T(i,j); Tj1new(i) = Tnew; logo(i,j) = abs(Tnew-T(i,j))..le.eps
ENDDO; Tj1(:) = T(:,j); T(:,j) = Tj1new(:)
ENDDO;
if( all(logo) ) exit
ENDDO
n 1
i, j
T
 T
n
i 1, j
T
n
i 1, j
T
n
i , j 1
T
n
i , j 1
 / 4,
Параллельные вычисления
Задача: решить нелинейное уравнение диффракции
в условиях бистабильности однородных решений.

E
g0
a0
2
  i  d   E   1 


t
1  I / I g 1  I / Ia

E t  0 

 E ,

  x 4  y 4 
I 0 Exp   
,
 

  wx   wy  
Параметры Задачи:
d=0.06 - малый коэффициент диффузии поля,
Ig=10 - интенсивноть насыщения активной среды,
Ia=1 - интенсивноть насыщения пассивной среды,
g0=2.11 - коэффициент усиления слабого сигнала,
a0=2.00 - коэффициент поглощения слабого сигнала,
Nx=Ny=128 - число точек по поространственным коорд-м,
AX =AY= 50 - величина области счета, dx=AX/(NX-1),
dt = 0.1 - шаг по времени, wx=wy=12, I0 = 7.0
Download