Наблюдения в процессе тестирования смартфонов на Android и iOS в 2015 году (страница 3)
Пару слов о многоядерных SoC
Все мы привыкли, что сегодня в смартфоны устанавливают многоядерные однокристальные системы. Но что же скрывается под этими многообещающими определениями? Нужно ли это пользователям и что самое интересное – как именно оно работает?
С процессорами для настольных ПК все было традиционно просто: вот у нас модель с четырьмя ядрами, и она дает прирост производительности по сравнению с одноядерной моделью чуть менее, чем это теоретически возможно. У нас не было ни big, ни LITTLE, а модульная система путала только в моделях AMD. Впрочем, еще остались на свете люди, которые не видят разницы между физическими ядрами и Hyper-Threading, но эта тема уже не раз была разжевана и неактуальна для наших читателей.
Традиционная схема (all-BIG)
На рынке присутствует множество вариантов, созданных по этой схеме. Ранее это была самая распространённая вариация SoC, которая не нуждается в особом представлении. Все честно, прозрачно и предсказуемо. К таким SoC относится, например, вся серия Intel Atom Z, Qualcomm Snapdragon 200, 400, 410, 600, 800, 801, 805, а также ранние версии. Или другой пример – простенький MediaTek MT6735:
реклама
Теоретически при однопоточной нагрузке данная SoC должна работать как-то так (прошу прощения, иллюстратор из меня не очень):
Это, конечно, если не учитывать нагрузку, которая дает операционная система. В данном случае она частично заняла процессорное время другого ядра или других ядер. Но мы ее условно не будем учитывать.
А вот так в теории должна будет выглядеть нагрузка в четыре потока на ту же SoC:
реклама
Опять же, если не брать во внимание такие «тонкие» факторы как кэш ядер, специфику задачи и затраты на ОС. И раз уж мы затронули тему масштабирования, посмотрим, как это выглядит на деле в синтетических тестах.
pts., больше – лучше
Включите JavaScript, чтобы видеть графики
Прекрасно видно, насколько «страдает» реальная производительность и какой она должна быть при идеальной масштабируемости (mean).
Но это всего лишь GeekBench, лучше мы обратимся к столь любимому нами Linpack.
Размер задачи=500, 3 прохода
average Mflop/sec., больше – лучше
Включите JavaScript, чтобы видеть графики
Второе значение на графике – теоретически максимальное возможное число при идеальной масштабируемости. Как и в GeekBench 3, мы попросту недосчитываемся одного ядра. Именно это и есть те самые «сопутствующие расходы» на архитектуру, кривость ПО, нагрузку операционной системой и прочее.
В рамках «старого-доброго» подхода рассмотрим другой вариант:
Qualcomm Snapdragon 800 является «честной» SoC, хоть и получила дурную славу за свою любовь к троттлингу. Что неудивительно – достаточно посмотреть на частоту.
Это тестирование будет интересно в том плане, что «накладных расходов» на нужды ОС относительно общей производительности чипа будет намного меньше. Мы даже поставим задачу потруднее, увеличив тем самым нагрев и спровоцировав троттлинг.
Размер задачи=1500, 3 прохода
average Mflop/sec., больше – лучше
Включите JavaScript, чтобы видеть графики
реклама
Итак, за счет большей общей производительности «накладные расходы» меньше мешают нашему подопытному стремиться к теоретическому максимуму. В итоге картина получается примерно такой:
Расходы ресурсов на ОС и ограничения TDP делают свое дело. Разумеется, есть и другие факторы и архитектурные особенности, которые могут повлиять на худшую масштабируемость.
Кстати, можно вычислить, сколько производительности примерно теряется из-за троттлинга. Для демонстрации этого охладим нашего подопечного (благо на дворе декабрь) и повторим тест:
Размер задачи=1500, 3 прохода
average Mflop/sec., больше – лучше
Включите JavaScript, чтобы видеть графики
Первое, что бросается в глаза – существенное повышение производительности. Почти в два раза. Но на то это и 800-ый, чтобы троттлить.
Обработаем полученные данные, дабы разобраться, что к чему. Приведем абсолютные числа к относительным, где за 100% возьмем производительность на один поток.
Весьма интересная ситуация. Насколько позволяет точность измерений, можно предположить, что в случае со Snapdragon 800 при нагрузке в четыре потока масштабируемость возрастает, пусть и незначительно, а вот МТ6753М слишком слаб, чтобы продемонстрировать такие же показатели масштабируемости.
Но мы немного отвлеклись. Вернемся к нашей тематике.
Модульные SoC (big.LITTLE)
Это хорошо знакомая нам и, пожалуй, самая эффективная схема компоновки. Вот пример:
Я специально выбрал для примера Snapdragon 808, ведь он очень интересен за счет своей нестандартной шестиядерной компоновки. Если мы, например, возьмем Exynos 7420,…
… то его работа не вызывает вопросов: в случае с требовательными приложениями используется один четырехъядерный модуль, в случае с работой системы в фоне используется другой четырехъядерный модуль с ядрами Cortex-A53. А вот в случае со Snapdragon 808 возникают вопросы. Например, если подать на него нагрузку в четыре потока, будет ли он использовать четыре ядра Cortex-A53 или два ядра Cortex-A57?
Для этого нам достаточно нагрузить его при помощи того же Linpack и посмотреть масштабируемость между нагрузкой в два и три потока. Так как очевидно, что два ядра Cortex-A57 на большей частоте быстрее даже трех ядер Cortex-A53 на меньшей частоте, то все встанет на свои места.
Дабы не провоцировать сброс нагрузки на ядра А53 вследствие перегрева, проверим его в охлажденном состоянии. А также посмотрим, может ли он работать с шестью потоками одновременно, ведь этот процессор позиционируется как шестиядерный, а не «2+4». Благо у меня под рукой как раз есть LG G4.
Размер задачи=1500, 3 прохода
average Mflop/sec., больше – лучше
Включите JavaScript, чтобы видеть графики
Получается очень интересная картина.
При простое чип ведет себя следующим образом:
Производительности одного ядра Cortex-A53 вполне хватит для того, чтобы обеспечить работу ОС и приложений в фоне. В целях энергосбережения могут использоваться два-четыре ядра на пониженной частоте, вместо одного на максимальной, как это условно показано на рисунке. Тут все понятно.
Так поведет себя CPU при высокой нагрузке в один поток. Опять же – все предельно ясно и неинтересно. Тут мы абстрагируемся от нужд ОС, приложений, TDP и других «накладных расходов», дабы не создавать «шум» на схеме.
С двумя потоками тоже ничего интересного – нагрузка переляжет на второе ядро Cortex-A57. А далее начинается интересное.
Если мы подаем от трех до пяти потоков, то используется модуль с ядрами Cortex-A53. Во всяком случае, такой вывод можно сделать из данных, которые явно показывают на снижение производительности при переходе с двух потоков на три. А если бы три потока отрабатывались на двух ядрах Cortex-A57, то результаты были бы аналогичны.
Возникает вопрос: почему не повышается производительность при переходе с трех потоков на четыре? Ведь было бы логично, что тогда использовались бы четыре ядра вместо трех, как указано на схеме? Сложно ответить на этот вопрос, не углубляясь в дебри планировщика, но я осмелюсь предположить, что ситуация аналогична MediaTek MT6735M, где мы не увидели дальнейшей масштабируемости.
Но как только речь заходит о шести потоках,…
… SoC снова переносит нагрузку на «толстые» ядра. Зачем? Предположу, что это сделано для бенчмарков, которые точно знают, сколькими ядрами располагает CPU и именно они дадут эти самые шесть потоков, а при использовании двух ядер Cortex-A53 результаты будут выше, как мы видели на графике результатов.
Но в чем тут подвох? А вот в чем:
Какой бенчмарк расскажет об этом? Да, производительность Snapdragon 808 на одно ядро выше, нежели у своего коллеги, на минуточку, из 2013(!) года, но он абсолютно не способен эффективно обрабатывать более двух потоков. Хотя если вы скажете об этом неискушенному человеку, то можно будет услышать тезисы вроде «шесть ядер против четырех» и «808 больше чем 800». Ах, если бы вся серия на ядрах Krait 400/450 не страдала от троттлинга…
Посему в случае со Snapdragon 808 можно сказать, что это скорее двухъядерная SoC, нежели шестиядерная. Увы, но производители никогда об этом не напишут и даже не расщедрятся на формулировку «2+4», а будет что-то типа «Шестиядерный процессор Qualcomm Snapdragon 1.8 ГГц», то есть вроде как шесть ядер работают на частоте 1.8 ГГц и, естественно, все они одинаковые. Ага.
На этом моменте читатель может подумать, что я ругаю Snapdragon 808, но это относится и ко многим другим «системам-на-чипе», например, Snapdragon 810, 650, 652, MediaTek Helio X20, а также Exynos 7420, 5433.
Стоит отметить, что мы более-менее подробно рассмотрели лишь одну SoC, так что делать окончательные выводы рано, но в рамках одной статьи этого достаточно. Для тех, кто хочет познакомиться с этим типом однокристальных систем, советую почитать вот этот материал, а также эту статью, если вы знаете английский.
Страницы материала
Теги
Лента материалов раздела
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Комментарии Правила