Компилятор Llvm Для Multiclet: Тест Whetstone



Компилятор LLVM для MultiClet: тест WhetStone

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

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

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

Тестирование проводилось в двух вариантах.

В первом, Multiclet R1, компиляция осуществлялась текущей версией компилятора LLVM с опциями:

  
   

-ffast-math -fno-builtin -O3

Во второй версии Multiclet R1* тестирование проводилось с реализацией в «ручном режиме» перспективных оптимизаций, которые сейчас добавляются в компилятор.

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



Результаты

Система МГц MWIPS/МГц МФЛОПС1/МГц МФЛОПС2/МГц МФЛОПС3/МГц COS MOPS/МГц EXP МОПС/МГц FIXPT MOPS/МГц ЕСЛИ МОПС/МГц РАВНЫЕ МОПС/МГц
Мультиклет R1* 100 0.721 0.256 0.212 0.162 0.018 0.008 3.569 0.417 1.57
РПи 2 v7-A7 1000 0.585 0.28 0.291 0.248 0.011 0.006 1.314 1.209 0.981
РПи 3 v8-A53 1200 0.604 0.276 0.29 0.248 0.01 0.007 1.267 1.561 1.014
ARM v8-A53 1300 0.642 0.268 0.241 0.239 0.028 0.004 1.197 1.436 0.439
Ядро i7 4820К 3900 0.887 0.341 0.308 0.167 0.023 0.014 0.998 1.504 0.251
Ядро i7 1CP 3066 0.873 0.325 0.295 0.174 0.025 0.013 0.892 0.958 0.167
Феном II 3000 0.799 0.307 0.27 0.111 0.026 0.016 0.835 1.001 0.167
Атлон 64 2211 0.785 0.308 0.272 0.104 0.026 0.016 0.832 0.999 0.187
Турион 64 М 1900 0.884 0.302 0.258 0.145 0.026 0.016 0.827 0.988 0.187
Ядро i5 2467M 2300 0.853 0.296 0.298 0.163 0.022 0.013 0.807 0.993 0.222
Ядро 2 Дуо 1 КП 2400 0.885 0.337 0.307 0.198 0.024 0.012 0.804 0.81 0.176
Целерон С2 М 2000 0.868 0.297 0.296 0.194 0.023 0.012 0.778 0.781 0.172
Ядро 2 Дуо М 1830 0.878 0.337 0.305 0.197 0.024 0.012 0.751 0.785 0.174
Мультиклет R1 100 0.311 0.157 0.153 0.029 0.018 0.008 0.714 0.081 0.143
Селерон М 1295 0.832 0.324 0.297 0.178 0.022 0.012 0.631 0.923 0.173
Raspberry Pi 1000 0.391 0.137 0.146 0.123 0.009 0.004 0.617 1.014 0.805
Атлон XP 2088 0.856 0.307 0.274 0.139 0.026 0.016 0.576 0.998 0.166
Пентиум Про 200 0.79 0.332 0.278 0.146 0.023 0.013 0.575 0.755 0.149
Атлон4 Бартон 1800 0.846 0.305 0.272 0.137 0.026 0.016 0.571 0.988 0.165
Селерон А 450 0.76 0.291 0.276 0.14 0.022 0.012 0.569 0.751 0.147
Пентиум 4Е 3000 0.39 0.182 0.164 0.058 0.014 0.006 0.323 0.27 0.126
Атом М 1600 0.348 0.176 0.157 0.051 0.01 0.007 0.252 0.744 0.11
Пентиум 4 1900 0.383 0.214 0.188 0.056 0.012 0.006 0.241 0.427 0.118
Пентиум ММХ 200 0.615 0.328 0.267 0.079 0.025 0.013 0.198 0.73 0.186
Пентиум 100 0.604 0.322 0.267 0.078 0.025 0.013 0.192 0.568 0.183
80486DX2 66 0.182 0.076 0.068 0.026 0.008 0.005 0.105 0.212 0.017
*Использование расширенных оптимизаций компилятора LLVM.
Видно, что по MWIPS/МГц мультисоты выглядят гораздо увереннее, чем по CoreMark/МГц (цифры опубликованы ранее в статья ).

Мы можем заметить следующее:

  • Использование оптимизаций, увеличивающих длину линейных участков, увеличивает общий показатель MWIPS/MHz примерно в полтора раза.

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

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

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

По результатам этих тестов определяют показатели МФЛОПС1 , МФЛОПС2 , МФЛОПС3 .

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

Рассмотрим природу результирующего ускорения на примере индикатора МФЛОПС1 и давайте рассмотрим, как достигается этот результат, на примере первого теста арифметики с плавающей запятой.

Тестовый код C:

timea = dtime();

Теги: #multiclet #multiclet #многоячеечные процессоры #llvm #Тестирование IT-систем #компиляторы #C++ #Параллельное программирование

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.