Научная статья на тему 'ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ ПРОЦЕССОРА НА ОСНОВЕ ТРУДОЁМКОСТИ АЛГОРИТМА УМНОЖЕНИЯ МАТРИЦ'

ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ ПРОЦЕССОРА НА ОСНОВЕ ТРУДОЁМКОСТИ АЛГОРИТМА УМНОЖЕНИЯ МАТРИЦ Текст научной статьи по специальности «Математика»

CC BY
295
15
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
АЛГОРИТМ / ТРУДОЁМКОСТЬ / АЛГОРИТМИЧЕСКАЯ СЛОЖНОСТЬ / МОДЕЛЬ ВЫЧИСЛЕНИЙ / УМНОЖЕНИЕ МАТРИЦ / ПРОЦЕССОР

Аннотация научной статьи по математике, автор научной работы — Мироночев А.С., Панченко В.М.

В современных компьютерах быстродействие программы во многом определятся уровнем производительности процессора. Способов оценить эту производительность существует немало. Зачастую такие оценки основаны на тактовой частоте процессора, пропускной способности шины данных, числе ядер, размере кэша разных уровней. Одна из возможных оценок основывается на сравнении числа тактов, которое тратят различные процессоры на выполнение строго заданного алгоритма. Подобная схема применялась в работе [1]. Так же она применяется при подсчёте числа FLOPS компьютера [2-3]. Для построения оценки производительности, в данной работе вводятся два понятия: процессорный индекс алгоритма (число тактов процессора, которое тратит процессор на выполнение алгоритма) и алгоритмический индекс процессора (число тактов, которое тратит процессор на одну условную базовую операцию). Для построения этих оценок были написаны две тестирующие программы (умножение квадратных матриц и сортировка массива). Проведено три теста на шести компьютерах с различными процессорами.

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

Похожие темы научных работ по математике , автор научной работы — Мироночев А.С., Панченко В.М.

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

Текст научной работы на тему «ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ ПРОЦЕССОРА НА ОСНОВЕ ТРУДОЁМКОСТИ АЛГОРИТМА УМНОЖЕНИЯ МАТРИЦ»

ОЦЕНКА ПРОИЗВОДИТЕЛЬНОСТИ ПРОЦЕССОРА НА ОСНОВЕ ТРУДОЁМКОСТИ АЛГОРИТМА УМНОЖЕНИЯ МАТРИЦ

© Мироночев А.С., Панченко В.М.1

Московский технологический университет, г. Москва

В современных компьютерах быстродействие программы во многом определятся уровнем производительности процессора. Способов оценить эту производительность существует немало. Зачастую такие оценки основаны на тактовой частоте процессора, пропускной способности шины данных, числе ядер, размере кэша разных уровней. Одна из возможных оценок основывается на сравнении числа тактов, которое тратят различные процессоры на выполнение строго заданного алгоритма. Подобная схема применялась в работе [1]. Так же она применяется при подсчёте числа FLOPS компьютера [2-3].

Для построения оценки производительности, в данной работе вводятся два понятия: процессорный индекс алгоритма (число тактов процессора, которое тратит процессор на выполнение алгоритма) и алгоритмический индекс процессора (число тактов, которое тратит процессор на одну условную базовую операцию).

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

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

Введение

Основная цель данной работы заключалась в классификации процессоров для решения конкретных задач и нахождения закономерностей в оценках производительности.

Список процессоров, выбранных для оценки производительности:

Таблица 1

№ Название Тактовая частота Число ядер / потоков Технологический процесс

1 2 3 4 5

1 Core i7-2670QM 2.2GHz 4 / 8 32 нм

2 Core i5-2410M 2.30GHz 2 / 4 32 нм

3 Core 2 Quad Q6600 2.40GHz 4 / 4 65 нм

4 Core 2 Duo E6700 2.66GHz 2 / 2 65 нм

5 AMD Athlon II X4 645 3.1GHz 4 / 4 45 нм

6 AMD Turion II M520 2.3GHz 2 / 2 45 нм

1 Профессор, кандидат технических наук.

Продолжение таблицы 1

№ L1 кэш L2 кэш L3 кэш Ядро Дата выпуска

1 6 7 8 9 10

1 4 x 64KB 4 x 256KB 6MB Sandy Bridge 12.10.2011

2 2 x 64KB 2 x 256KB 3MB Sandy Bridge 20.02.2011

3 2 x 64KB 2 x 4096KB - Kentsfield 08.01.2007

4 2 x 64KB 4096KB - Conroe 27.07.2006

5 4 x 128Kb 4 x 512KB - Propus 21.09.2010

6 2 x 64KB 2 x 512KB - Caspian 10.09.2009

Более подробную информацию о процессорах можно найти в [4-9].

Для построения оценки производительности введём три понятия:

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

Пусть базовые операции в модели вычислений будут следующие:

- присваивание (1);

- индексация (2);

- арифметические операции (+,-, *, /, %, >>, <<) (3);

- операции сравнения (>, >=, <, <=, ==, !=) (4);

- логические операции (&&, ||, !) (5);

- индексация в сложных структурах (object.bar) (6);

- вызов функции (7);

- передача в функцию одного аргумента (8);

- операция разыменовывания указателя (*) (9).

Пусть каждая базовая операция имеет вес, равный одному.

Для примера рассмотрим строчку, где каждый тип операций встречается один раз (следовательно, трудоёмкость будет равна девяти): Arr[i] = 2 + ob.foo(*d > 2 && true).

2. Процессорный индекс алгоритма (ПИА) - число тактов, которое тратит процессор на выполнение того или иного алгоритма.

3. Алгоритмический индекс процессора (АИС) - число тактов, которое тратит процессор на одну базовую операцию.

Методика тестирования

Для сравнения процессорного и алгоритмического индексов был выбран алгоритм умножение матриц размером 10 х 10, 50 х 50 и 100 х 100 с элементами типа unsigned int (в дальнейшем uint), float и long double.

Программы для тестирования алгоритмов были реализованы на языке С++11 и скомпилированы компилятором GCC 4.8.1. Опции компилятора, с

которыми компилировались программы тестов: - O3 - march = nocona -msse - msse2 - msse3 - mmmx - ffasm-math. Подробное описание действия этих опций можно найти в [11]. Число тактов процессора, требующихся для выполнения тестовых программ, определялось с помощью функции rdtsc [12]. На всех тестируемых компьютерах установлена Windows 7 Ultimate x64.

В разделе результаты тестов будут приведены сравнения индексов.

Результаты выполнения тестов

Тесты проводились на квадратных матрицах размерностью 10, 50 и 100 элементов. Типы данных - long double, float и unsigned int. Для представления матрицы был выбран специализированный класс matrix<T> из библиотеки UBLAS [13].

Для вычисления алгоритмического индекса каждого процессора нам потребуется число базовых операций, необходимых для перемножения двух матриц. Так как алгоритм традиционного перемножения матриц относится к классу N (число базовых операций зависит только от длины входа) [14], то не важно, какие числа умножаются, следовательно, можно просчитать число базовых операций для данного алгоритма в общем случае.

Трудоёмкость цикла for определяется следующим образом:

Следовательно, трудоёмкость простого алгоритма умножения матриц составляет

/(л) = 2 + (l + п*(з +п* (3 +п* 11)))= 3 + 3n+3n2 + lin3

Следовательно, сложность алгоритма умножения матриц будет равна:

- 8333 базовых операций для матриц размером 10 элементов;

- 1007653 базовых операций для матриц размером 50 элементов;

- 8030303 базовых операций для матриц размером 100 элементов.

Тест 1. Матрицы типа uint.

Таблица 2

Процессорный индекс алгоритма умножения матриц типа uint

Размер матрицы Процессор 1 Процессор 2 Процессор 3 Процессор 4 Процессор 5 Процессор 6

10x10 9150 10000 18200 18250 17500 22000

50x50 99000 101000 205000 202000 195000 198000

100x100 7200000 7800000 16300000 16200000 15800000 15800000

Таблица 3

Алгоритмические индексы процессоров для алгоритма умножения матриц типа шП

Размер матрицы Процессор 1 Процессор 2 Процессор 3 Процессор 4 Процессор 5 Процессор 6

10x10 0.76 0.76 0.92 1.62 1.54 1.96

50x50 0.71 0.72 0.75 1.41 1.49 1.42

100x100 0.67 0.71 0.72 1.01 0.99 0.9

Как можно видеть по приведённым выше графикам, процессорные индексы Intel Core i7 и Intel Core i5 при всех рассматриваемых наборов матриц меньше, чем у других процессоров из набора. Процессоры Intel Core 2 Duo и Intel Core 2 Quad имеют сходные индексы - разница между ними составляет всего несколько процентов. Однако они примерно в 2 раза выше, чем у процессоров i-серии. Процессорные индексы AMD Turion ниже, чем у процессоров семейства Intel Core 2, но заметно выше, чем аналогичные показатели Core i5 и Core i7. Процессорный индекс AMD Athlon II в первом тесте имеет самый высокий показатель, однако во втором и третьем тестах индекс достигает уровня индекса процессора AMD Turion. Алгоритмические индексы процессоров уменьшаются с ростом размерности матрицы, однако при изменении размера тестируемых матриц с 10 до 50 они уменьшаются быстрее, чем при изменении размера матриц с 50 до 100.

Тест 2. Матрицы типа float.

Таблица 4

Процессорный индекс алгоритма умножения матриц типа float

Размер матрицы Процессор 1 Процессор 2 Процессор 3 Процессор 4 Процессор 5 Процессор 6

10x10 9630 10340 18400 18200 22320 22000

50x50 110500 123000 222000 221000 252000 253000

100x100 7400000 7900000 17300000 16800000 20100000 19900000

Таблица 5

Алгоритмические индексы процессоров для алгоритма умножения матриц типа float

Размер матрицы Процессор 1 Процессор 2 Процессор 3 Процессор 4 Процессор 5 Процессор 6

10x10 8.2 9.5 16.0 16.0 18.1 18.2

50x50 7.6 7.8 15.5 15.5 17.5 17.5

100x100 7.7 7.7 15.4 15.5 17.4 17.4

Можно заметить, что при умножении матриц типа ublas::matrix<float>, процессорные индексы больше на один порядок по сравнению с использованием типа данным Matrix, что отчётливо заметно по уровню алгоритми-

ческих индексов процессоров. Так же в этом тесте процессоры AMD, которые имели более низкие индексы по сравнению с процессорами семейства Intel Core 2, показали наиболее высокие результаты.

Тест 3. Матрицы типа long double.

Таблица 6

Процессорный индекс алгоритма умножения матриц типа long double

Размер матрицы Процессор 1 Процессор 2 Процессор 3 Процессор 4 Процессор 5 Процессор 6

10x10 9540 9940 17400 17200 20320 20100

50x50 110500 123000 222000 221000 252000 253000

100x100 7600000 7800000 12000000 12500000 17400000 16700000

Таблица 7

Алгоритмические индексы процессоров для алгоритма умножения матриц типа long double

Размер матрицы Процессор 1 Процессор 2 Процессор 3 Процессор 4 Процессор 5 Процессор 6

10x10 0.8 0.85 1.15 1.2 1.6 1.8

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

50x50 0.65 0.7 0.96 0.96 1.44 1.44

100x100 0.64 0.68 1.05 1.05 1.5 1.5

Можно заметить, что при умножении матриц размером 10x10 процессорный индекс AMD Athlon, как и в тесте 1, наиболее высокий. Следовательно, можно сделать вывод, что при умножении матриц малого размера этот процессор не эффективен. При размерах матриц 50x50 и 100x100, индекс этого процессора выравнивается с индексом процессора AMD Turion II M500.

Выводы:

- Во всех тестах процессорные индексы Intel Core i7 и Intel Core i5 были наименьшими. Скорей всего, причиной этому послужили несколько факторов: наличие L3 кеша, что позволяло минимизировать число операций чтения из памяти, более современная архитектура Sandy Bridge.

- Индексы процессоров в тестах 2 и 3 на один порядок выше, чем индексы в тестах 1 и 4. Это может быть объяснено сложной внутренней структурой библиотеки ublas, в частности использованием шаблонов, что повышает сложность анализа кода оптимизатором.

- В тесте 1 процессоры фирмы AMD показали результаты более низкие, чем у процессоров Intel Core 2 Duo и Intel Core 2 Quad, за исключением случая умножения матриц размером 10х10 элементов. В этом случае процессора AMD Athlon показал наихудший результат. Однако, результаты AMD всё ещё выше, чем результаты процессоров i-серии.

- Алгоритмический индекс процессоров Intel Core i5 и Intel Core i7 в тестах 1 и 3, а так же процессоров Intel Core 2 Duo E6700 и Intel Core 2 Quad Q6600 в тесте 3 при размерах матриц в 50x50 и 100х 100 элементов, меньше единицы. Это может быть объяснено как несовершенством нашей базовой модели, так и высокой степенью оптимизации, позволяющей использовать специальные SIMD расширения процессора [18], такие как SSE, SSE2, SSE3 и так далее [19-20].

- В тестах 1 и 3 алгоритмический индекс процессов при разных размерах матриц примерно одинаков. Это свидетельствует о том, что выбранная нами базовая модель и, следовательно, оценка числа базовых операций, близка к реальной.

- Самый большой процессорный индекс алгоритма сортировки принадлежит процессору Intel Core 2 Quad. Вероятно, это происходит из-за того, что у него самый медленный кэш второго уровня.

- По результатам тестов процессоры можно разделить на 3 группы:

• Группа 1: Intel Core i5 и Intel Core i7. Их объединяет архитектура Sandy Bridge, одинаковый размер кэша на ядро всех уровней, поддержка технологии Turbo Boost (автоматический разгон процессора под нагрузкой) и Hyper-threading и технологический процесс 32 нм.

• Группа 2: Core 2 Quad Q6600 и Core 2 Duo E6700. Одинаковый кэш первого уровня на каждое ядро. Кэш второго уровня одинакового объёма и общий на 2 ядра. Технологический процесс 65 нм. Лежащие в их основе архитектуры очень похожи, так как разрабатывались параллельно [16-17]. Самые старые из представленных процессоров.

• Группа 3 : AMD Turion II M500 и AMD Athlon II X4 645. Эти процессоры объединяет одинаковый кэш второго уровня на каждое ядро и 45-нм технологический процесс. У AMD Athlon II X4 645 кэш первого уровня в два раза больше

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

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

Список литературы:

1. Егоров А.В., Кудряшов А.С., Пиняев К.М., Сталянский С.В. Определение компьютерного индекса для алгоритма умножения матриц / МГАПИ.

2. http://habrahabr.ru/company/intel/blog/144388/.

3. http://ru.wikipedia.org/wiki/FLQFS.

4. http://www.cpu-world.com/CPUs/K10/AMD-Turion %20II %20Dual-Co-re%20Mobile%20M500%20-%20TMM500DBO22GQ.html.

5. http://www.cpu-world.com/CPUs/Core_i5/Intel-Core%20i5%20Mobile% 20I5-2410M.html.

6. http://www.cpu-world.com/CPUs/Core_2/Intel-Core%202%20Quad%20 Q6600%20HH80562PH0568M%20%28BX80562Q6600%29.html.

7. http://www.cpu-world.com/CPUs/Core_i7/Intel-Core%20i7%20Mobile% 20i7-2670QM. html.

8. http://www.cpu-world.com/CPUs/Core_2/Intel-Core%202%20Duo %20E 6700%20HH80557PH0674M%20%28BX80557E6700 %29.html.

9. http://www.cpu-world.com/CPUs/K10/AMD-Athlon%20II%20X4%206 45%20-%20ADX645WFK42GM%20%28ADX645WFGMB0X%29.html.

10. Петрушин В Н., Ульянов М.В. Информационная чувствительность компьютерных алгоритмов. - М.: ФИЗМАТЛИТ. - С. 26-33.

11. http://gcc.gnu.org/onlinedocs/gcc/0ptimize-0ptions.html.

12. http://ru.wikipedia.org/wiki/Rdtsc.

13. http://www.boost.org/doc/libs/1_49_0/libs/numeric/ublas/doc/index.htm.

14. Петрушин В.Н., Ульянов М.В. Информационная чувствительность компьютерных алгоритмов. - М.: ФИЗМАТЛИТ. - 59.

15. http ://ru.wikipedia.org/wiki/Core_2_Quad.

16. http://en.wikipedia.org/wiki/Kentsfield_%28microprocessor%29.

17. http://ru.wikipedia.org/wiki/SIMD.

18. http://ru.wikipedia.org/wiki/SSE.

19. http://ru.wikipedia.org/wiki/SSE2.

20. http://ru.wikipedia.org/wiki/SSE3.

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