Применение метода спекулятивного выполнения для распараллеливания исходного кода, содержащего обработку исключений - page 10

2) исключение генерируется при выполнении второго потока и по-
токов с большими номерами:
m
n/k
. В этом случае необходимо
дождаться завершения работы предыдущих потоков (потоки с боль-
шими номерами можно завершить немедленно) и только после этого
завершить работу потоков. Следовательно, время выполнения много-
поточной версии будет равно времени выполнения одного потока.
Время выполнения однопоточной программы будет линейно возра-
стать при увеличении номера итерации цикла, на которой происходит
генерация исключения.
Для тестирования подхода было создано программное обеспечение
на языке Java. Тестирование заключалось в прогоне цикла, содержаще-
го генерацию исключения, с разными параметрами (в том числе, при
различном числе потоков выполнения) и замером времени выполнения
тела цикла как без генерации исключения, так и при его генерации на
различных итерациях. Каждый прогон представлял 120 вычислений
50 000 числа Фибоначчи с использованием рекуррентной формулы,
что обеспечивало полную загрузку вычислительных ядер. Тестирова-
ние осуществлено на компьютере с процессором Intel Core i7 3770K
(четыре физических или восемь виртуальных ядер, 3,4 ГГц) и 16 Гб
оперативной памяти под управлением операционной системы Linux с
использованием Oracle JDK 1.7.45. Время выполнения программы при
различном числе потоков и без генерации исключений представлено
ниже:
Число потоков
k
. . . . . . . . . . . . . . . .
1 2 4 8
Время выполнения, мс . . . . . . . . . . 3976 2084 1409 1135
Зависимость времени выполнения программы от номера итерации
генерации исключения
m
при различном числе потоков
k
приведена
на рисунке.
Для всех рассчитанных вариантов
n
= 120
. При
m < n/k
время
выполнения программы возрастает линейно, при
m
n/k
время вы-
полнения не увеличивается и остается стабильным (
m
= 60
при
k
= 2
,
m
= 30
при
k
= 4
и
m
= 15
при
k
= 8
). Таким образом, выдвинутые
в настоящей работе предположения о времени выполнения програм-
мы подтверждены экспериментально: генерация исключения практи-
чески не влияет на степень параллелизма результирующего кода, при
этом при распараллеливании можно достичь кратного ускорения прог-
раммы.
Вывод.
В работе исследована возможность применение метода
спекулятивного выполнения для распараллеливания исходного кода,
содержащего обработку исключений. Предложен новый алгоритм, по-
зволяющий решить проблему упорядочения управления при распарал-
леливании фрагментов кода при генерации исключений. С использо-
ванием дополнительных приемов можно минимизировать накладные
80 ISSN 0236-3933. Вестник МГТУ им. Н.Э. Баумана. Сер. “Приборостроение”. 2014. № 6
1,2,3,4,5,6,7,8,9 11,12,13
Powered by FlippingBook