В разговорах о многоклеточная архитектура Раньше его применимость к той или иной задаче часто обсуждалась в контексте присутствующего в нем количества естественного параллелизма.
Таким образом, при выполнении различных тестов, в частности CoreMark, была речь о несовместимости таких программ с многоклеточной архитектурой, обусловленной достаточно жесткой последовательностью алгоритма, не позволяющей ячейкам внутри группы извлекать достаточное количество команд, выполняемых параллельно в процессе работы.
В этой статье мы оценим мультиячейки в более репрезентативных условиях — с помощью бенчмарка WhetStone. Тест WhetStone выгодно отличается от CoreMark характером проводимых в нем вычислений: все входящие в него тесты, за исключением теста скорости условного прыжка, имеют в той или иной степени внутренний параллелизм.
Тестирование проводилось в двух вариантах.
В первом, Multiclet R1, компиляция осуществлялась текущей версией компилятора LLVM с опциями:
Во второй версии Multiclet R1* тестирование проводилось с реализацией в «ручном режиме» перспективных оптимизаций, которые сейчас добавляются в компилятор.-ffast-math -fno-builtin -O3
Ручная модификация сводилась к тому, чтобы помочь компилятору увеличить линейные участки за счет объединения нескольких итераций цикла.
Результаты
Система | МГц | 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/MHz примерно в полтора раза.
- Подобные оптимизации существенно расширяют эффективный диапазон применимости многоклеточных процессоров за счет высвобождения внутреннего параллелизма, ранее скрытого в задаче.
В первую группу входят тесты на производительность вычислений с плавающей запятой.
По результатам этих тестов определяют показатели МФЛОПС1 , МФЛОПС2 , МФЛОПС3 .
Видно, что использование дополнительных оптимизаций компилятора LLVM дает существенный прирост во всех трех тестах.
Рассмотрим природу результирующего ускорения на примере индикатора МФЛОПС1 и давайте рассмотрим, как достигается этот результат, на примере первого теста арифметики с плавающей запятой.
Тестовый код C: timea = dtime();
Теги: #multiclet #multiclet #многоячеечные процессоры #llvm #Тестирование IT-систем #компиляторы #C++ #Параллельное программирование
-
Вибрационные Реакции
19 Oct, 24 -
Выступление На Ted
19 Oct, 24