Научная статья на тему 'Повышение эффективности применения метода спекулятивной многопоточности для динамического распараллеливания программ'

Повышение эффективности применения метода спекулятивной многопоточности для динамического распараллеливания программ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
214
36
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
МНОГОЯДЕРНЫЕ ПРОЦЕССОРЫ / MULTI-CORE / ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ / PARALLEL ALGORITHMS / СПЕКУЛЯТИВНАЯ МНОГОПОТОЧНОСТЬ / SPECULATIVE MULTITHREADING / АВТОМАТИЧЕСКОЕ РАСПАРАЛЛЕЛИВАНИЕ / AUTOMATIC PARALLELIZATION

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Бакулева Марина Алексеевна, Бакулев Александр Валериевич

Рассмотрены возможности метода спекулятивной многопоточности для динамического распараллеливания последовательных программ. Осуществлена его формализации и определены характеристики метода, учёт которых позволит повысить эффективность его применения при автоматическом распараллеливании. Приведены результаты экспериментального исследования разработанного алгоритма динамического выделения спекулятивных регионов.

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Бакулева Марина Алексеевна, Бакулев Александр Валериевич

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

IMPROVING THE EFFICIENCY OF THE METHOD OF SPECULATIVE MULTI-THREADING FOR DYNAMIC PARALLELIZING

The possibilities of the method of speculative multithreading dynamic parallelization of sequential programs. It implemented its formalization and identified characteristics of the method, the account which will increase the efficiency of its use in automatic parallelizing. The results of experimental studies of the algorithm dynamically allocate speculative regions.

Текст научной работы на тему «Повышение эффективности применения метода спекулятивной многопоточности для динамического распараллеливания программ»

ПОВЫШЕНИЕ ЭФФЕКТИВНОСТИ ПРИМЕНЕНИЯ МЕТОДА СПЕКУЛЯТИВНОЙ МНОГОПОТОЧНОСТИ ДЛЯ ДИНАМИЧЕСКОГО РАСПАРАЛЛЕЛИВАНИЯ ПРОГРАММ

УДК 004.272.2

Марина Алексеевна Бакулева,

к.т.н., зав. каф. Информационных технологий Рязанского филиала Московского государственного университета экономики, статистики и информатики (МЭСИ) Тел.: 8 (4912) 24-03-09 Эл. почта: marina.bakuleva@gmail.com

Александр Валериевич Бакулев,

к.т.н., доцент каф. Информационных технологий Рязанского филиала Московского государственного университета экономики, статистики и информатики (МЭСИ) Тел.: 8 (4912) 24-03-09 Эл. почта: alex.bakulev@gmail.com

Рассмотрены возможности метода спекулятивной многопоточности для динамического распараллеливания последовательных программ. Осуществлена его формализации и определены характеристики метода, учёт которых позволит повысить эффективность его применения при автоматическом распараллеливании. Приведены результаты экспериментального исследования разработанного алгоритма динамического выделения спекулятивных регионов.

Ключевые слова: многоядерные процессоры, параллельные алгоритмы, спекулятивная многопоточность, автоматическое распараллеливание.

Marina A. Bakuleva,

PhD in technical, the head of the chair of Information Technology, Ryazan Department Moscow State University of Economics, Statistics and Informatics (MESI) Tel.: 8 (4912) 24-03-09 E-mail: marina.bakuleva@gmail.com

Alexander V. Bakulev,

PhD in technical, Assistant Professor Department of Information Technology, Ryazan Department Moscow State University of Economics, Statistics and Informatics (MESI) Tel.: 8 (4912) 24-03-09 E-mail: alex.bakulev@gmail.com

IMPROVING THE EFFICIENCY OF THE METHOD OF SPECULATIVE MULTI-THREADING FOR DYNAMIC PARALLELIZING

The possibilities of the method of speculative multithreading dynamic parallelization of sequential programs. It implemented its formalization and identified characteristics of the method, the account which will increase the efficiency of its use in automatic parallelizing. The results of experimental studies of the algorithm dynamically allocate speculative regions.

Keywords: multi-core, parallel algorithms, speculative multithreading, automatic paral-lelization.

1. Введение

Развитие технологий программирования для персональных компьютеров с точки зрения повышения производительности программ традиционно происходило в основном экстенсивными методами. По большей части разработчики программного обеспечения надеялись на постоянное совершенствование аппаратных ресурсов компьютера. Очередная замена процессора с увеличенной тактовой частотой позволяла получить ускорение работы программ без малейшего их изменения.

В настоящее время достигнут фактический предел роста тактовой частоты процессора, и дальнейшее увеличение его производительности становится возможным только за счет перехода к многоядерной архитектуре, по существу к параллельной архитектуре. На сегодняшний день уже широко распространены процессоры с четырьмя и более ядрами, а в перспективе количество ядер может измеряться сотнями, однако, чтобы обеспечить потенциал их производительности необходимо разрабатывать новые параллельные программы, обладающие необычными динамическими свойствами (масштабируемость на все доступные ресурсы, балансировка загрузки ядер, анализ зависимостей по данным и управлению и др.). Все это требует разработки новых подходов к параллельному программированию, которые направлены на упрощение и повышение эффективности работы программиста. Один из таких подходов предполагает добавление в арсенал современных компиляторов элементов автоматического распараллеливания существующих последовательных программ [1].

Цель работы - в работе представляются результаты исследования метода автоматического динамического распараллеливания последовательных программ - метода спекулятивной многопоточности [2]. Задачей такого исследования является необходимость строгой формализации данного метода, с целью определения основных параметров вычислительного процесса, расчёт характеристик которых позволит осуществлять автоматическое распараллеливание последовательных программ более эффективно, с меньшими накладными расходами.

Формализация метода. Суть метода спекулятивной многопоточности состоит в следующем. Среди множества всех регионов G последовательной программы выявляются регионы, имеющие зависимости по данным типа

ода ода -г-да

Oout-in, bin-out, Oout-out, характер которых не может быть установлен на этапе трансляции программы из-за неоднозначности [3]. Статические методы при планировании параллельного исполнения подобных регионов, чтобы исключить нарушение информационных зависимостей в случае их возникновения, вынуждены использовать более сильные виды отношений, прибегая к позиции крайнего пессимизма [4]. Такой подход негативно отражается на результатах распараллеливания.

Метод спекулятивной многопоточности предписывает параллельное многопоточное выполнение подобных регионов, в расчёте на то, что информационные зависимости на стадии исполнения не проявятся, прибегая к позиции крайнего оптимизма (спекулируя на удаче). В случае если подобные надежды оправдают себя, будет получен выигрыш в производительности, в противном случае, результаты вычислений региона должны быть аннулированы, и он будет выполнен повторно, что приведет к накладным расходам.

Для того, чтобы организовать многопоточное выполнение спекулятивных регионов, формируется динамическая последовательность стадий их

исполнения, называемых эпохами е ЕР 11 = 1, Ы, N = \ЕР\. Например, для циклического региона эпохами являются отдельные итерации цикла. Каждая эпоха снабжается локальным буфером памяти для сохранения критических к возможным нарушениям зависимости данных. Результаты выполнения эпохи приводятся в соответствие со следующими правилами.

1. После окончания спекулятивного исполнения каждой эпохи региона проверяется, не произошло ли при этом нарушения информационных зависимостей.

2. Если нарушения не было зафиксировано, результаты вычисления эпохи переносятся из защи-щённого буфера в общую память программы и эпоха освобождает свой процессорный элемент.

3. Если было зафиксировано нарушение информационной зависимости, результаты аннулируются и эпоха запускается на исполнение повторно.

4. Всем эпохам присваиваются уникальные номера. Нумерация эпох осуществляется строго в порядке их исполнения в последовательной программе. Таким образом, исполнение эпох в порядке следования их номеров гарантирует точное соответствие получаемых результатов результатам последовательного выполнения программы.

5. Проверка результатов выполнения эпохи на корректность осуществляется только после того, как эпоха с предыдущим номером успешно завершила своё выполнение.

6. Новые, ожидающие запуска на исполнение, эпохи распределяются по освободившимся от выполнения предыдущих эпох процессорным элементам строго в порядке следования их номеров.

Подобный подход позволяет фактически производить обработку отдельных итераций цикла в параллельном конвейерном режиме, заполняя ступени конвейера (процессорные элементы) новыми эпохами по мере их освобождения. Такой подход минимизирует возможные потери, даже в случае повторного выполнения неудачных эпох.

Учитывая правила 1-6, были сформулированы и доказаны [3] следующее утверждения.

Лемма 1. При одновременном параллельном спекулятивном исполнении р эпох в/, в/н, ..., в]+р-\, на вычислительной системе состоящей из р процессорных элементов, гарантируется корректность выполнения Ув/ и отсутствие её повторного перезапуска, где/,/ + 1, ...,/ + р - 1 -номера эпох, в/, в/+1,..., в/+р-1 е е ЕР | у = 1,(ЛГ-р + 1).

Лемма 2. При одновременном параллельном спекулятивном исполнении р эпох в/, в/+1,..., в/+р-1 е е ЕР | _/' = 1,(Ж-/> + 1) на вычислительной системе состоящей из р процессорных элементов, корректность выполнения Уе]+к | к = 1,(р -1) гарантируется, если подтверждена корректность Ув;+уц эпохи и проверки корректности результатов между каждой парой эпох

+к > +т ) I т = - !) дали положительный результат.

Лемма 3. Если при одновременном параллельном спекулятивном исполнениир эпох в/, в/+1,..., в;+р-1 е е ЕР | у = 1, (И - р +1) на вычислительной системе состоящей изр процессорных элементов Зв]+к | к = 1, (р -1), для которой было зафиксировано нарушение корректности выполнения, то после перезапуска и повторного исполнения в/+к её корректность будет гарантирована.

Сформулированные и доказанные леммы 1-3 позволили проанализировать работу метода спекулятивной многопоточности, ввести ряд параметров, выявить зависимости между ними, обосновать расчет важных характеристик, определяющих область его эффективной применимости.

2. Расчет характеристик метода

Поскольку наибольший объём вычислений в программах приходится на долю циклов, рассмотрим применение метода спекулятивной многопоточности для распараллеливания циклических регионов последовательной программы.

Пусть среди множества регионов программы выделено подмножество спекулятивных регионов 0*р с О | 0'р = }| г = 1, К,

представляющих циклические управляющие операторы. Тогда для реализации их спекулятивного исполнения необходимо произвести развёртку итераций циклов в набор эпох, для чего зададим отношение рЕР : ^ ЕР между множеством спекулятивных регионов &Р и множеством эпох ЕР. При этом требуется оценить перспективность такого разбиения, учитывая возможные издержки последующего спекулятивного исполнения регионов. Слишком короткие регионы (с малым числом операторов в теле цикла) необходимо разворачивать в набор последовательно выполняемых итераций, т.е. каждая эпоха такого региона будет состоять из нескольких смежных итераций цикла, что позволит увеличить время выполнения каждой эпохи, снизив долю постоянной составляющей накладных расходов.

Определим некоторые параметры спекулятивного региона g¡ е 0БР 11 = 1, К и выделенных на основе его циклических итераций эпох Ув]- е Ер с ЕР|] = 1Ы, N = \ЕР\ .

Пусть по есть число установлен-

»_» с-да ода

ных зависимостей типа дои-п, оп-ош, Зои-ои, между итерациями внутри региона gi, Рго- - вероятность нарушения зависимости для одной итерации региона gi; пц - общее количество итераций тела циклического региона gi; пш - число смежных итераций циклического региона gi последовательно размещённых внутри каждой эпохи У в/ е ЕРг-, является постоянным для каждого спекулятивного

региона. Тогда общее количество

щ

эпох составит величину -, а об-

Пп / Е

щее число зависимостей между эпохами региона gi будет составлять

Пд/Е = По • ПЫЕ.

Пусть р - число процессорных элементов вычислительно системы, осуществляющих параллельное спекулятивное выполнение эпох региона gi, а п - число операторов в теле цикла региона gi.

Пусть nv(фcreate) - количество операторов служебной подпрограммы, выполняющей функцию фсгеаге по созданию новых процессов на основе спекулятивных регионов. Пусть nv(фwriteback) - число операторов служебной подпрограммы, выпол-

няющей функцию фwriteback ЗаПИСИ данных, защищенных от нарушения

ч_/ ода ода ода

зависимостей Oout-in, Oin-out, Oout-ou с помощью локального буфера временной памяти эпохи, из этого буфера в общую память процессов (после того как исполнение данной эпохи будет признано корректным). Пусть nv(çcheck) - число операторов служебной подпрограммы, выполняющей функцию tycheck проверки факта нарушения каждой из nsiE - зависимостей эпохи после её завершения.

Значения nv(^create), n^writeback) и nv(çcheck) отражают системные издержки на реализацию механизма спекулятивного исполнения регионов.

Для того чтобы оценить возможные издержки на повторное исполнение неудачных эпох, определим среднее число нарушений зависимостей между эпохами на каждой фазе исполнения параллельного спекулятивного конвейера.

Рассмотрим процесс выполнения некоторой последовательности эпох ej, ej+i,..., ej+p-i е е EP | j = l,(N-p + l), N |EP| с момента запуска на исполнение до момента успешного завершения. В соответствии с леммой 2. число проверок корректности выполнения

+k | k = 1, (p -1) будет совпадать

с ,+m)| m = 0,(k -1) коли-

чеством пар, т.е. составит величину k. Причем согласно лемме 3, если в ходе проверок будут обнаружены нарушения корректности ej+k и эпоха будет перезапущена заново, проведения повторной проверки корректности не потребуется. Таким образом, У (ej+k, ej+m) проверку можно рассматривать как некоторое испытание со случайным исходом равным вероятности Prs/e-(ej+k, ej+m) события «при выполнении эпохи ej+k нарушается корректность информационных зависимостей относительно эпохи ej+m». Причём все проверки являются независимыми друг от друга, и каждая способна завершится положительным или отрицательным результатом. Вероятность исхода такого события тогда можно выразить через вероятность PrO- (вероятность нарушения зависимости для одной итерации региона)

и nit/E (число смежных итераций внутри эпохи) по теореме сложения вероятностей: Prs/e- = nit/E • Prs-. Так как для У ej+k потребуется совершить k таких проверок, каждая из которых является несовместным событием, а окончательный факт нарушения корректности исполнения эпохи ej+k будет установлен, если хотя бы одно событие состоится, то вероятность события «корректность выполнения эпохи ej+k нарушается» можно определить по теореме сложения вероятностей: Prm-(ej+k) = k • Prs/e- = = k • nit/E • Prs-. Эту вероятность можно также трактовать, как математическое ожидание числа появлений события «нарушение корректности выполнения эпохи ej+k» для единственного испытания, проводимого после окончания выполнения Ve;+k эпохи. Вероятностная оценка общего числа нарушений корректности, которые могут возникнуть за время исполнения p эпох ej, ej+1, ..., ej+p-1 можно определить тогда как сумму математических ожиданий по каждой из эпох Vej+k | k = 1, (p -1):

p-i

■ Z PlS/E - (ej+k ) =

P-1

P-1

= Z k • nit/E • PrS- = nit/E • PrS-■ Z k =

_ nit /E • Plä • "

1 + p - 1 2 ^

P -1) = ni,

• Pr

p^( p -1) 2.

2. Непосредственное исполнение каждой эпохи потребует проведения некоторого объёма полезных вычислений (собственно ради чего и планируются параллельное выполнение):

Vconst = Пд/Е • ПV.

3. Повторный перезапуск и выполнение эпохи, с учётом вероятности неудачного завершения спекуляции, составит следующий объём переменных издержек:

• п ■

V =V ■—=п п

' var ' comp "it /E "v

P

= 12 ■

■ Prs-^ P ■(P-1) = 2 p

■ nv ■ Pr«-^ (P - 1).

Таким образом, общий объём вычислений, производимый при спекулятивном выполнении всех эпох региона gi, измеренный в количестве операторов составит:

у (g ) = Пд -(у + V + V ) =

all \c>i ' у comp const var J

nB / £ ' nv + nv (^create ) +

+ nv (<Pwriteback ) + + nS ' nit /E ■ nv W check ) +

+ 1/2 ■

■ nv ■ (P - 1)

Оценим общий объём вычислений и накладных издержек на организацию спекулятивного выполнения итераций циклического региона gi, представленных в виде параллельных эпох. Будем измерять величину объёма вычислений в количестве операций, в расчете на одну эпоху. В оценку войдут следующие составляющие.

1. Создание и организация спекулятивного исполнения каждой эпохи региона gi потребует выполнения дополнительных операций независимо от успешного или неудачного завершения спекуляции. Таким образом, объём постоянных издержек составит величину:

Vconst = nv(^create) + nv(^writeback) + + ns • nit/E • check).

Учтём параллельный характер вычислений, определив удельный объём вычислений, выполняемый одним процессором при спекулятивном выполнении региона gi на вычислительной системе с р процессорными элементами:

Vpar ( Si )

Уа11 ( Si )

Удельный объём будет характеризовать ускорение, получаемое за счёт параллельной спекуляции. Так, при последовательном выполнении региона gi потребовалось бы произвести следующий объём вычислений:

Vseq(gi) = nit • nv.

Тогда выигрыш от использования параллельной спекуляции можно измерить, соотнеся Vpar(gi) и Vseq(gi):

п

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

п

п

k=1

n

n

k=1

k=1

n

spd

V

( ft )= e

( Я, )

Vpflr ( g,- )

=p /

1 +1/2 •

ч • Pr

lIt / E 1 lS-

•( P - 1)-

.(Ъ

+nv (Ъ

+nx

\ s

'It / E

/ n„ • n

create ) +

) +

(ъfcheck )

writeback

n.

It/E

Выведенная зависимость позволяет учитывать как особенности распараллеливаемой программы, так и возможности целевой вычислительной системы на которой планируется динамическое спекулятивное параллельное исполнение циклов программы. Важно отметить то, что nspd(gi) не зависит от числа итераций цикла, что позволяет производить оценку перспективности распараллеливания циклических участков с заранее неизвестным числом повторений.

Заданную зависимость можно использовать в качестве основного критерия оптимальности при формировании спекулятивных регионов и эпох из последовательной программы в процессе автоматического динамического спекулятивного многопоточного распараллеливания.

3. Алгоритм выделения спекулятивных регионов и эпох

Для использования метода спекулятивной многопоточности при организации динамического исполнения параллельного промежуточного кода на вычислительной системе с однородными параллельными процессорными элементами и общей памятью, необходимо разработать способ определения спекулятивных регионов, выделения на их основе эпох и оценки выигрыша от последующей спекуляции.

В качестве основного критерия при выборе спекулятивных регионов и эпох будем использовать зависимость nspd(gi). Как следует из анализа выражения nspd(gi), данные действия можно осуществлять только на стадии исполнения программы, когда известны параметры целевой вычислительной системы: количество доступных процессорных элементов р и оценки трудоёмкости выполне-

ния служебных процедур Пу(фс^е),

Пу(фыгиеЬаск), П^(фсЬеск).

Вместе с тем, параметры циклических регионов могут быть рассчитаны ещё на стадии трансляции последовательной программы в промежуточный код: количество зависимостей типа д™ между операторами внутри региона пд, число операторов в теле цикла региона пу, вероятность нарушения хотя бы одной из пд-зависимостей для всего региона Ргд-. Это позволит сократить накладные расходы при динамическом планировании параллельных регионов во время исполнения программы.

Таким образом, оказываются известны все параметры выражения nspd(gi), кроме числа смежных итераций цикла приходящихся на каждую спекулятивную эпоху пые. Именно этот параметр необходимо варьировать с целью максимизации значения выражения nspd(gi). При этом общим ограничением является условие целесообразности организации спекулятивного распараллеливания: nSpd(gi) >1.

С учётом данных положений предлагается следующий алгоритм выделения спекулятивных регионов и эпох на основе промежуточного кода.

Вход. Множество регионов

0 = }| г = 1, N промежуточного кода программы. Параметры целевой вычислительной системы:

Р, Пу(фс^е), Пу(ф„гПеЬаск), Пу(фсЬеск).

Параметры Уgi: п^), ядРгд-(?0,

1 = 0.

Шаг 1. i = i + 1.

Еслиi> N

то переход на шаг 8.

Шаг 2. Определяем тип стража с управляющего оператора, с которым связан регион gi.

Шаг 3. Если с Ф стс,

то переход на шаг 1.

Шаг 4. Определяем значение nIt/E^gг), для которого показатель:

spd

( g H miMsPd ( g )} .

Задаём для gi значение показателя nn/Eigi) = nnm'igi).

Шаг 7. Переходим на шаг 1.

Шаг 8. Конец алгоритма.

Множество спекулятивных регионов GSP сформировано.

Предложенный алгоритм позволяет сформировать множество спекулятивных регионов GSP за один просмотр списка регионов параллельного промежуточного кода и имеет трудоёмкость порядка O(N), где N = |G|.

На основе множества регионов GSP можно обеспечить динамическое планирование выполнения последовательной программы по методу спекулятивной многопоточности.

4. Экспериментальные исследования

Для оценки эффективности работы метода спекулятивной много-поточности были проведены эксперименты. В рамках экспериментов было организовано многопоточное исполнение кода двух программ: архивации файлов по методу LZW (LZW) и реализации алгоритмов оперативного анализа, основанных на кратномасштабном представлении данных (OLAP). Все программы

Рис. 1. Результаты ускорения многопоточного выполнения программ (Win)

Шаг 5. Если п^^) < 1, то переход на шаг 1. Шаг 6. Добавляем новый регион gi к множеству спекулятивных регионов 0&р, так что теперь gi е 0^р.

Рис. 2. Результаты ускорения многопоточного выполнения программ (Linux)

n

/

+

_

неоднократно прогонялись на различных наборах данных.

Для того, чтобы оценить влияние предложенного алгоритма выделения спекулятивных регионов и эпох на эффективность использования метода спекулятивной многопоточ-ности, было выполнено сравнение результатов спекулятивного многопоточного выполнения разных версий кода программ LZW и OLAP с фиксированным количеством смежных итераций в каждой спекулятивной эпохе (10, 30 и 100) и выделенным динамически с помощью алгоритма. Результаты ускорения от использования метода спекулятивной многопоточности для двухъядер-ной системы на базе Intel/Windows представлены на рисунке 1, для 4-х ядерной системы на базе AMD/Linux представлены на рисунке 2.

5. Заключение

В статье рассмотрены возможности использования метода спекулятивной многопоточности для автоматического распараллеливания последовательных программ. Данный метод динамического распараллеливания позволяет существенно упростить анализ зависимостей

по данным и управлению между последовательными регионами таких программ, повысить за счёт этого возможности их параллельного исполнения.

Использование предложенного алгоритма позволило повысить производительность параллельной обработки метода спекулятивной многопоточности от 5% до 65% за счет рационального выделения спекулятивных регионов и определения оптимального количества смежных итераций, выполняемых внутри каждой спекулятивной эпохи.

Литература

1. Корячко В.П., Скворцов С.В., Телков И.А. Архитектуры многопроцессорных систем и параллельные вычисления. - М.: Высшая школа, 1999. 235 с.

2. Steffan J.G., Mowry T.C. The Potential for Using Thread-Level Data Speculation to Facilitate Automatic Parallelization. Carnegie Mellon University, HPCA-4, February 1-4, 1998.

3. Bakulev A.V., Bakuleva M.A., Avilkina S.B. Mathematical methods and algorithms of mobile parallel computing on the base of multi-core proces-

sors // European researcher. 2012. V. 33. № 11-1. P. 1826-1834.

4. Бакулев А.В., Бакулева М.А., Козлов М.А., Скворцов С.В. Технологии разработки параллельных программ для современных многоядерных процессоров. //Экономика, статистика и информатика. Вестник УМО. 2014. № 6. С. 211-215.

References

1.Koryachko V.P., Skvortsov S.V., Telkoff I.A. Architecture multiprocessor systems and parallel-calculations. - M .: Higher School, 1999. 235p.

2. Steffan J.G., Mowry T.C. The Potential for Using Thread-Level Data Speculation to Facilitate Automatic Parallelization. Carnegie Mellon University, HPCA-4, February 1-4, 1998.

3. Bakulev A.V., Bakuleva M.A., Avilkina S.B. Mathematical methods and algorithms of mobile parallel computing on the base of multi-core processors // European researcher. 2012. V. 33. № 11-1. P. 1826-1834.

4. Bakulev A.V., Bakuleva M.A., Skvortsov S.V, Kozlov M.A. Parallel Programming for modern multi-core processors// Economics, Statistics and Informatics. Bulletin of UMO. 2014. № 6. P. 211-215.

i Надоели баннеры? Вы всегда можете отключить рекламу.