Самое интересное в обзорах
Компания Arm анонсировала два новых 64-разрядных мобильных процессорных ядра на базе архитектуры Arm v9. Они получили названия Cortex-X3 и Cortex-A715, и весьма вероятно, они найдут воплощение уже в грядущих мобильных процессорах Qualcomm Snapdragon 8 Gen 2 и Samsung Exynos 2300.
Источник изображений: Arm
По словам компании, пиковая производительность флагманского Cortex-X3 на 22 % выше, чем у предшественника в лице Cortex-X2. Также заявляется 11-процентная прибавка показателя IPC (числа выполняемых инструкций за такт) относительно предшественника. Компания также сравнивает быстродействие Cortex-X3 с ядрами последних потребительских процессоров для ноутбуков, утверждая, что её новинка до 34 % быстрее ядер процессора Intel Core i7-1260p с показателем TDP 28 Вт.
Ядра Cortex-X3 будут производиться с использованием 3-нм техпроцесса. Их прогнозируемая максимальная частота составляет около 3,3 ГГц. Для сравнения, ядра Cortex-X2, производящиеся с использованием 5-нм техпроцесса, работают с частотой около 3 ГГц.
Звучит всё это впечатляюще, но если учесть, что Cortex-X3 будет использоваться преимущественно в смартфонах и планшетах, то не менее важным здесь является показатель энергоэффективности. А вот о ней компания Arm по какой-то причине подробно рассказывать не стала. График ниже лишь показывает, что Cortex-X3 потребляет меньше энергии, чем Cortex-X2. Однако, опять же, никакой конкретики компания не предоставила.
Arm Cortex-A715 — это перспективное ядро среднего уровня, работающее исключительно с 64-битным набором инструкций. Arm отмечает, что по сравнению с предшественником в лице Cortex-A710 новое ядро получило прибавку производительности в 5 %, но при этом сохранило прежний уровень потребления энергии. Для нового ядра заявляется 20-процентный прирост показателя энергоэффективности по сравнению с Cortex-A710, что положительно скажется на времени автономной работы устройств, которые будут его использовать.
Arm также представила обновлённое ядро Cortex-A510. Значительных изменений относительно его первой итерации здесь нет. Отмечается лишь повышение энергоэффективности на 5 % относительно предыдущего поколения, поэтому производитель даже не стал менять его название. В отличие от первой версии, которая работает исключительно с 64-битным набором команд, обновлённая версия ядра поддерживает также и наборы 32-битных инструкций.
Предполагается, что ядра Cortex-X3 и Cortex-A715 станут основой процессора Snapdragon 8 Gen 2, что позволит увеличить не только производительность, но также и энергоэффективность чипа на фоне актуального Snapdragon 8 Plus Gen 1. Анонс первых мобильных чипсетов на базе новых ядер Arm ожидается в этом году. Однако первые смартфоны и другие потребительские продукты на их основе, вероятнее всего, появятся в продаже не ранее 2023 года.
Если вы заметили ошибку — выделите ее мышью и нажмите CTRL+ENTER.
Самые обсуждаемые публикации
10 1 дюймов планшет для детей 2.5D Sn Android Quad Core Dual Камера Wi-Fi игра обучения подарок
Детский планшет 10,1 дюйма 2.5D Sn Android четырехъядерный Двойная камера Wi-Fi образовательная игра подарок для мальчиков девочек Черная вилка США
Другие функции: Play Store, Google Talk, калькулятор, календарь, o-плеер, звукозаписывающее устройство, FM-радио, электронная почта, Gmail, флэш-память, будильник, камера, электронная почта и т. Д.Высокая чувствительность, мультисенсорность, экологичность и безвредность для здоровья. Встроенные тысячи веселых, образовательных и бесплатных игр, которые никогда не подвешивают ваших детей. Не нужно беспокоиться о недружелюбном содержимом в Интернете и о слишком долгой игре.Портативный и прочный в использовании.Прочный, легкий защитный рукав для защиты от падений и ударов, вызванных детьми во время игры.Цвет: черныйВысокая чувствительность, мультисенсорность, экологичность и безвредность для здоровья.Встроенные тысячи веселых, образовательных и бесплатных игр, которые никогда не подвешивают ваших детей.Не нужно беспокоиться о недружелюбном содержимом в Интернете и о слишком долгой игре.Оперативная память: DDR2 + 8 Гб обеспечивает Сверхбыстрый онлайн-просмотр веб-страниц, воспроизведение видео и 3D игровой процесс, а также улучшенную память DDR3, что делает все приложения быстрее. Все, что вам нужно для работы, учебы или игры, подойдет1920*1080 sn с полным углом обзора обеспечивает полную детализацию и реалистичный цвет для кристально чистого изображенияВнешняя память: Поддержка TF-карты до 32 Гб (не входит в комплект) для легкого расширенияАккумулятор емкостью 4500 мАч: может работать с током, мощностью и температурой и динамическо увеличивать производительностьROM: 32GBОЗУ: 2 ГбТип Sn: 10,1 дюймаСистема: Android 7,0Нажмите Sn: емкостный SnРазрешение: 2400*1176 пикселей HD SnСеть: 2G, 3GФронтальная камера: 2,0 МПЗадняя камера: 5,0 МППорт o-Out: 3,5 ммUSB-порт: Micro-USB2.0Аккумулятор: 4500 мАчМатериал: металлРазмер: 16,8×23,8 смТип вилки: вилка стандарта США, применяется для Канады, Индии, Японии, Мексики, Таиланда, Тайваня, США, Филиппин и т. д.Посылка в комплект входит:1 * планшетный ПК1 * USB-кабель1 * кабель OTG с USB на Micro- USB1 * Руководство пользователя на английском языкеТолько выше посылка содержание, другие продукты не прилагаются.Примечание: светильник шка и разные настройки дисплеев могут привести к тому, что цвет изделия на изображении может немного отличаться от реального. Допустима погрешность измерения +/- 1-3 см.
Напоминание о кэшбэке: Что бы получить кешбек при покупке этого или другого товара на Aliexpress. Авторизуйтесь или зарегистрируйетсь в кэшбэк-сервисе, далее появиться подробная инструкция как получать кэшбэк при покупках на Алиэкспресс.
*о других товарах
Отзывы
Здесь вы можете оставить свой отзыв о данном товаре.

ARM Cortex-M3 — это, пожалуй, самое популярное на сегодняшний день 32-разрядное процессорное ядро для встраиваемых систем. Микроконтроллеры на его базе выпускают десятки производителей. Причина этому — универсальная, хорошо сбалансированная архитектура, а следствие — непрерывно растущая база готовых программных и аппаратных решений.
Ругать Cortex-M3, в общем-то, не за что, но сегодня я предлагаю подробно рассмотреть Cortex-M4F — расширенную версию всеми любимого процессорного ядра. Перенести проект с микроконтроллера на базе Cortex-M3 на кристалл на базе Cortex-M4F довольно просто, а для ряда задач такой переход стоит затраченных усилий.
Под катом краткий обзор современных Cortex’ов, обстоятельное описание блоков и команд, отличающих Cortex-M4F от Cortex-M3, а также сравнение процессорных ядер на реальной задаче — будем измерять частоту мерцания лампы на микроконтроллерах с разными ядрами.
Часть обзорная
О том как сменяли друг-друга поколения процессорных ядер ARM написано огромное количество статей и обзоров. Не вижу смысла расписывать всё то, что есть в википедии, но напомню основные факты.
Компания ARM Ltd. разрабатывает микропроцессорные и микроконтроллерные ядра с RISC-архитектурой и продает производителям электронных компонентов лицензии на производство кристаллов по соответствующей технологии. Таких производителей по всему миру десятки и даже сотни, есть среди них и отечественные компании.
Современные ядра ARM объединены названием Cortex.
Кстати говоря, слово «cortex» переводится как «кора головного мозга» — структура, отвечающая за согласованную работу органов, мышление, высшую нервную деятельность. По-моему, прекрасное название.
Итак, процессорные ядра ARM Cortex разделены на три основные группы:
- Cortex-A — Application Processors — для приложений, требующих высокой производительности; чаще всего на них запускается linux, android и им подобные ОС
- Cortex-R — Embedded Real-time Processors — для приложений реального времени
- Cortex-M — Embedded Processors — для встраиваемых систем
Рассмотрим последнюю группу, постепенно приближаясь к паре Cortex-M3 / Cortex-M4F. Всего на конец 2015 года представлено шесть процессорных ядер: Cortex-M0, -M0+, -M1, -M3, -M4, -M7.
Из этого списка часто «выпадает» Cortex-M1, это оттого, что -M1 разработан и используется исключительно в приложениях связанных с FPGA. Остальные ядра не имеют столь специализированной области применения и отличаются по производительности — от самого простого -M0 до высокопроизводительного -M7.

По сравнению с Cortex-M0, Cortex-M0+ дополнительно оснащен блоком защиты памяти MPU, буфером Micro Trace Buffer для отладки программ, а также имеет двухступенчатый конвейер вместо трехступенчатого и упрощенный доступ к периферийным блоками и линиям ввода/вывода.
Cortex-M0 и Cortex-M0+ имеют одношинную фон-неймановскую архитектуру, а ядро Cortex-M3 — уже гарвардскую. Cortex-M3 довольно сильно отличается от «младших» представителей линейки и имеет гораздо более широкие возможности.
Cortex-M4 построен по абсолютно той же архитектуре и «структурно» не отличается от Cortex-M3. Разница заключается в поддерживаемой системе команд, но об этом позже. Cortex-M4F отличается от -M4 наличием блока вычислений с плавающей точкой FPU.
Архитектура Cortex-M7 представлена относительно недавно и отличается от Cortex-M3/M4 так же сильно, как Cortex-M3/M4 отличаются от Cortex-M0. 6-ступенчатый суперскалярный конвейер, отдельная кэш-память для данных и команд, конфигурируемая память TCM и другие отличительные функции этого ядра «заточены» для достижения максимальной производительности. И действительно, возможности контроллеров на базе Cortex-M7 сравнивают скорее с Cortex-A5 и -R5, чем с другими контроллерами группы Embedded Processors. Границы применения технологий продолжают размываться.
Несмотря на совершенно разные возможности ядер группы Cortex-M, набор команд каждого ядра включает в себя все команды, поддерживаемые в более младших ядрах. Так обеспечивается возможность разработки программно-совместимых микроконтроллеров на базе разных ядер, этим и занимается большинство производителей микроконтроллеров.

Ядра Cortex-M0 и Cortex-M0+ имеют одну и ту же систему команд. Набор инструкций Cortex-M3 включает все команды Cortex-M0 и около сотни дополнительных инструкций. Процессорные ядра Cortex-M4 и Cortex-M7 имеют, опять же, идентичный набор команд — набора команд Cortex-M3 плюс так называемые DSP-инструкции. Ядро Cortex-M4F дополнительно к набору Cortex-M4 / -M7 поддерживает команды вычислений с плавающей точкой, а система команд Cortex-M7F включает ещё 14 команд для операций над числами с плавающей точкой двойной точности.
Часть теоретическая
Итак, ближайшими «соседями» популярного процессорного ядра Cortex-M3 являются Cortex-M4, дополненный поддержкой DSP-инструкций, и Cortex-M4F, дополнительно содержащий блок FPU и поддерживающий соответствующие команды. Рассмотрим DSP- и FPU-команды.
DSP-инструкции
Аббревиатура DSP чаще всего расшифровывается как Digital Signal Processor, т.е. отдельный и вполне самостоятельный контроллер или сопроцессор, предназначенный для задач цифровой обработки сигналов. Не стоит путать специализированную DSP-микросхему и набор DSP-инструкций. DSP-команды (расшифровывается Digital Signal Processing вместо Processor) — это набор команд, который поддерживается рядом процессорных ядрер ARM и соответствует некоторым типовым для цифровой обработки сигнала операциям.
Первая группа таких операций — это умножение с накоплением (Single-cycle Multiply Accumulate или просто MAC).
Для самых маленьких: умножение с накоплением описывается формулой S = S + A x B. Соответствующие команды описывают умножение двух регистров с суммированием результата в аккумулятор и смежные операции: умножение с вычитанием результата из аккумулятора, умножение без использования аккумулятора и т.д.
Операции предусмотрены для 16- и 32-разрядных переменных и играют важную роль во многих типовых алгоритмах цифровой обработки сигналов. Например, КИХ-фильтр (это классический, почти банальный «например») представляет собой последовательность операций умножения с накоплением, а значит скорость его работы напрямую зависит от скорости выполнения умножения с накоплением.
Все MAC-инструкции в микроконтроллерах с ядром Cortex-M4(F) выполняются за один машинный цикл.
Вторая группа DSP-инструкций — это операции параллельной обработки данных (Single Instruction Multiple Data, SIMD), позволяющие оптимизировать обработку данных за счет параллелизма вычислений. Пары независимых переменных попарно помещаются в один регистр большей размерности, а арифметические операции проводятся уже над «большими» регистрами.
Например, команда SADD16 подразумевает одновременное сложение двух пар 16-разрядных знаковых чисел с записью результата в регистр, хранящий первый операнд.
SADD16 R1, R0

Поскольку регистры общего назначения имеют разрядность 32 бит, в каждый из них можно записать не только по две 16-разрядных переменных (полуслов), но и до четырех 8-разрядных переменных (байт). Теперь несложно прикинуть зачем нужна команда SADD8.
Вот более сложная операция: умножение старших полуслов, умножение младших полуслов и суммирование произведений между собой и с 64-разрядным накоплением. Команда SMLALD описывает все эти действия и выполняется Cortex-M4 за один машинный цикл. SMLALD, как и многие другие команды, совмещает умножение с накоплением и обработку данных по принципу SIMD.
SMLALD R6, R8, R5, R1

И простые SIMD-команды (знаковые и беззнаковые 8- и 16-разрядные сложение и вычитание и т.п.), и сложные команды, подобные SMLALD, выполняются за один машинный цикл.
Следующая группа DSP-инструкций — команды операций с насыщением (Saturating instructions). Они также известны как операции с отсечкой и представляют собой защиту от переполнений. При использовании стандартных команд, регистр, хранящий результат, при переполнении «перезагружается» с нуля, а команды, предусматривающие насыщение, при переполнении фиксируют результат на допустимом разрядностью максимуме. Таким образом с программиста снимается необходимость заботиться о флагах переполнения.

Среди команд процессорного ядра Cortex-M4 есть как «обычные» арифметические операции, так и те же операции с насыщением. Использование последних особенно востребовано в задачах, где точностью вычислений можно пожертвовать ради скорости. Таких задач в ЦОС немало.
FPU-инструкции
Аппаратная поддержка вычислений с плавающей запятой (или точкой, кому как больше нравится) — это особенность ядра Cortex-M4F и более старших представителей линейки Cortex-M.
Команды вычислений с плавающей точкой позволяют выполнять операции над вещественными числами с максимальной производительностью. Вообще, для представления вещественных чисел сегодня используется два формата — с фиксированной и плавающей точкой. В первом случае количество разрядов для записи целой и дробной частей зафиксировано и вычисления сводятся к операциям над целыми числами, во втором число представляется как совокупность знакового бита, нескольких разрядов порядка и мантиссы:
(-1)s * m × be,
где s — знак, b-основание, e — порядок, а m — мантисса

К слову, для формата чисел с плавающей запятой двойной точности, который поддерживается в Cortex-M7F, используется тот же принцип, но вместо 32-разрядного представления используется 64-разрядное, т.е. на порядок приходится 11 бит, а на мантиссу 52.
О том как и зачем используется формат с плавающей точкой не раз написано на хабре (вот , например, отличная статья). Мне, пожалуй, не написать лучше, поэтому идем дальше.
Список ассемблерных DSP- и FPU-команд
Чтобы прочувствовать масштаб — понять насколько может быть ускорена обработка данных с использованием Cortex-M4 — можно поизучать полный перечень DSP- и FPU-инструкций. У меня есть большие сомнения на счет практической ценности этих таблиц, это посмотреть интересно.
Все DSP- и большинство FPU-инструкций выполняются за один машинный цикл.
DSP-инструкции ядра Cortex-M4
PKHTB, PKHBT
перезапись полуслова из одного регистра в другой, при необходимости сдвиг содержимого “принимающего” регистра
QADD
знаковое сложение с насыщением
QADD16
знаковое сложение соответствующих полуслов двух операндов (с насыщением)
QADD8
знаковое сложение соответствующих байт двух операндов (с насыщением)
QASX
знаковое сложение младшего полуслова второго операнда и старшего полуслова первого операнда, знаковое вычитание старшего полуслова второго операнда из младшего полуслова первого операнда (с насыщением)
QDADD
удвоение второго операнда, суммирование результата с первым операндом (знаковое, с насыщением)
QDSUB
удвоение второго операнда, вычитание результата из первого операнда (знаковое, с насыщением)
QSAX
знаковое вычитание младшего полуслова второго операнда из старшего полуслова первого операнда + знаковое сложение младшего полуслова первого операнда и старшего полуслова второго операнда (с насыщением)
QSUB
знаковое вычитание (с насыщением)
QSUB16
знаковое вычитание соответствующих полуслов двух операндов (с насыщением)
QSUB8
знаковое вычитание соответствующих байт двух операндов (с насыщением)
SADD16
знаковое сложение соответствующих полуслов двух операндов
SADD8
знаковое сложение соответствующих байт двух операндов
SASX
знаковое сложение старшего полуслова первого пперанда и младшего полуслова второго операнда с записью в старшее полуслово результата, знаковое вычитание младшего полуслова второго операнда из старшего полуслова первого с записью в младшее полуслово результата
SHADD16
знаковое сложение соответствующих полуслов операндов, сдвиг двух результатов на один бит вправо
SHADD8
знаковое сложение соответствующих байт операндов, сдвиг четырех результатов на один бит вправо
SHASX
знаковое сложение старшего полуслова первого операнда и младшего полуслова второго операнда, запись результата в старшее полуслово указанного регистра со сдвигом вправо на один бит, знаковое вычитание старшего полуслова второго операнда из младшего полуслова первого операнда, запись результата в младшее полуслово указанного регистра со сдвигом вправо на один бит
SHSAX
знаковое вычитание младшего полуслова второго операнда из старшего полуслова первого операнда, запись результата в младшее полуслово указанного регистра со сдвигом вправо на один бит, знаковое сложение старшего полуслова второго операнда и младшего полуслова первого операнда, запись результата в старшее полуслово указанного регистра со сдвигом вправо на один бит
SHSUB16
знаковое вычитание старшего и младшего полуслов второго операнда из соответствующих полуслов первого операнда, сдвиг результат на бит вправо
SHSUB8
знаковое вычитание старшего и младшего байт второго операнда из соответствующих байтов первого операнда, сдвиг результат на бит вправо
SMLABB, SMLABT, SMLATB, SMLATT
умножение верхних или нижних полуслов двух операндов с 32-разрядным накоплением
SMLAD, SMLADX
попарное умножение полуслов двух операндов, суммирование двух произведение с 32-разрядным накоплением
SMLALBB, SMLALBT, SMLALTB, SMLALTT
умножение знаковых полуслов двух операндов (старших или младших) с 64-разрядным накоплением и 64-разрядным результатом
SMLALD, SMLALDX
попарное умножение двух байт, взятых из первого операнда на два байта из второго операнда, суммирование двух полученных произведений с 64-разрядным накоплением и 64-разрядным результатом
SMLAWB, SMLAWT
умножение верхнего или нижнего полуслова первого операнда на второй операнд с 32-разрядным накоплением, в результирующий регистр записываюся первые 32 разряда 48-битного результата
SMLSD
вычитание произведения старших полуслов двух операндов из младших полуслов двух операндов с 32-разрядным накоплением
SMLSLD
вычитание произведения старших полуслов двух операндов из младших полуслов двух операндов с 64-разрядным накоплением
SMMLA
умножение двух операндов с 32-разрядным накоплением (берутся только 32 старших разряда произведения)
SMMLS, SMMLR
умножение двух операндов, вычитание результата из указанного регистра (берутся только 32 старших разряда произведения)
SMMUL, SMMULR
умножение операндов (результат — старшие 32-разрядна произведения)
SMUAD
умножение старших полуслов двух операндов, умножение младших полуслов двух операндов, сложение произведений
SMULBB, SMULBT SMULTB, SMULTT
умножение верхних или нижних полуслов двух оперндов
SMULWB, SMULWT
умножение первого операнда на верхнее или нижнее полуслово второго операнда, в результирующий регистр записываюся первые 32 разряда 48-битного результата
SMUSD, SMUSDX
умножение старших полуслов двух операндов, умножение младших полуслов двух операндов, вычитание первого произведения из второго
SSAT16
знаковое насыщение полуслов до указанного значения
SSAX
знаковое вычитание младшего полуслова второго операнда из старшего полуслова первого операнда с записью в младшее полуслово результата, сложение старшего полуслова первого операнда и младшего полуслова второго операнда с записью в старшее полуслово результата
SSUB16
знаковое вычитание соответствующих полуслов двух операндов
SSUB8
знаковое вычитание соответствующих байт двух операндов
SXTB16
преобразование двух байт в два полуслова с учетом знака, сложение результата со словом или полусловом
UADD16
беззнаковое сложение соответствующих полуслов двух операндов
UADD8
беззнаковое сложение соответствующих байт двух операндов
USAX
сложение младшего полуслова первого операнда и старшего полуслова второго операнда с записью результата в младшее полуслово результата, беззнаковое вычитание младшего полуслова второго операнда из старшего полуслова первого операнда с записью в старшее полуслово результата
UHADD16
беззнаковое сложение соответствующих полуслов двух операндов и сдвиг результатов на один бит вправо
UHADD8
беззнаковое сложение соответствующих байт двух операндов и сдвиг результатов на один бит вправо
UHASX
беззнаковое сложение старшего полуслова первого операнда и младшего полуслова второго операнда со сдвигом результата сложения на один бит вправо и записью в старшее полуслово результата, беззнаковое вычитание старшего полуслова второго операнда из младшего полуслова первого операнда со сдвигом результата вычитания на один бит вправо и записью в младшее полуслово результата
UHSAX
беззнаковое вычитание млдашего полуслова второго операнда из старшего полуслова первого операнда со сдвигом результата вычитания на один бит вправо и записью в старшее полуслово результата, беззнаковое сложение младшего полуслова первого операнда и старшего полуслова второго операнда со сдвигом результата сложения на один бит вправо и записью в младшее полуслово результата,
UHSUB16
беззнаковое вычитание соответствующих полуслов двух операндов, сдвиг результата на один бит вправо
UHSUB8
беззнаковое вычитание соответствующих байт двух операндов, сдвиг результата на один бит вправо
UMAAL
беззнаковое умножение с двойным 32-разрядным накоплением и 64-разряжным результатом
UQADD16
беззнаковое сложение 16-разрядных переменных (с насыщением)
UQADD8
беззнаковое сложение 8-разрядных переменных (с насыщением)
UQASX
беззнаковое вычитание младшего полуслова второго операнда из старшего полуслова первого операнда, беззнаковое сложение младшего полуслова первого операнда и старшего полуслова второго операнда (с насыщением)
UQSAX
беззнаковое вычитание младшего полуслова второго операнда из старшего полуслова первого операнда, беззнаковое сложение младшего полуслова первого операнда и старшего полуслова второго операнда (с насыщением)
UQSUB16
беззнаковое вычитание соответствующих полуслов двух операндов (с насыщением)
UQSUB8
беззнаковое вычитание соответствующих байт двух операндов (с насыщением)
USAD8
беззнаковое вычитание соответствующих байт двух операндов, сложение абсолютных разностей
USADA8
беззнаковое вычитание соответствующих байт двух операндов, сложение абсолютных разностей, сложение результат операции с содержимым аккумулятора
USAT16
беззнаковое насыщение полуслов до указанного значения
UASX
беззнаковое вычитание старшего полуслова второго операнда из младшего полуслова первого операнда с записью в младшее полуслово результата, сложение старшего полуслова первого операнда и младшего полуслова второго операнда с записью результата в старшее полуслова результата
USUB16
беззнаковое вычитание соответствующих полуслов двух операндов
USUB8
беззнаковое вычитание соответствующих байт двух операндов
UXTB16
преобразование двух байт в два полуслова без учета знака, сложение результата со словом или полусловом
FPU-инструкции ядра Cortex-M4F
VABS.F32
получение абсолютного значения операнда
VCMP.F32
сравнение двух операндов или операнда и нуля
VCMPE.F32
сравнение двух операндов или операнда и нуля с проверкой на некорректный операнд (NaN)
VCVT.S32.F32
преобразование между типами данных (с плавающей точкой / целые)
VCVT.S16.F32
преобразование между типами данных (с плавающей точкой / с фиксированной точкой)
VCVTR.S32.F32
преобразование между типами данных (с плавающей точкой / целые) с округлением
VFMA.F32
перемножение двух переменных, прибавление результата умножения к содержимому указанного регистра
VFNMA.F32
инвертирование первого опренда, умножение результата на второй операнд, сложение произведения и инвертированного значения из указанного регистра
VFMS.F32
инвертирование первого опренда, умножение результата на второй операнд, сложение произведения и значения из указанного регистра
VFNMS.F32
умножение двух операндов, сложение произведения и инвертированного значения из указанного регистра
VLMA.F32
умножение с накоплением
VLMS.F32
вычитание произведения двух операндов из указанного регистра
VMOV
пересылки данных между “стандартными” регистрами ARM и регистрами FPSCR (Floating-Point Status and Control Register), пересылки данных между регистрами хранящими формата с плавающей точкой (регистры FPU), запись констант в регистры FPU и т.п.
VMOV, VMRS, VMSR
пересылки данных между “стандартными” регистрами ARM и регистрами FPSCR (Floating-Point Status and Control Register)
VNMLA.F32
умножение двух операндов, инвентирование результата, сложение инвертированого произведения и инвертированного значения из указанного регистра
VNMLS.F32
умножение двух операндов, произведения и инвертированного значения из указанного регистра
VNMUL
умножение двух операндов, инвентирование результата
VSQRT.F32
извлечение квадратного корня
VSTM
сохранение содержимого нескольких указанных регистров в память программ
Впрочем, на практике сами инструкции ядра используются не часто. Обычно при разработке достаточно разобраться с документацией на контроллер и сишными библиотеками от производителей ядра и кристалла. В частности, для ядер Cortex существует ARM-овский набор библиотек CMSIS, который используется для процессоров Cortex-M от разных производителей. В состав CMSIS входит и библиотека CMSIS-DSP, она включает в себя:
- базовые математические функции, операции над векторами
- быстрые тригонометрические и трансцендентные функции (sin, cos, sqrt и т.д.)
- линейную и билинейную интерполяции
- комплексную арифметику
- статистические функции
- алгоритмы фильтрации – БИХ-, КИХ- фильтры, алгоритм минимальной среднеквадратичной ошибки
- алгоритмы преобразования сигналов (БПФ и др.)
- матричную арифметику
- ПИД-регулятор
- функции для работы с массивами
Часть практическая
Как правило, сравнение ядер Cortex-M3 и Cortex-M4(F) заканчивается красивыми графиками — гистограммами, на которых показано значительное ускорение работы контроллера на базе Cortex-M4 при выполнении типовых для ЦОС операций (КИХ-фильтр, БПФ, матричные вычисления, ПИД-регулятор и т.п). Без указаний используемых контроллеров, методики вычислений и измерений.
Но мы не будем сравнивать Тайд и Обычный стиральный порошок, вместо этого возьмем реальную аппаратную и программную платформы.
На этом месте есть смысл отвлечься и немного поразмышлять о задачах, для которых актуален математический аппарат Cortex-M4F. Понятно, что на работу с потоковыми данными и мультимедиа производительности ядра Cortex-M4 не хватит, речь идет скорее о системах управления и обработки данных.
Например, идет сбор каких-то телеметрических данных. Узел опроса датчиков может либо просто управлять датчиками и передавать массивы данных на некий центральный вычислительный узел, либо самостоятельно обрабатывать и фильтровать результаты измерений, передавая «центру» только полезные данные. Второй подход имеет ряд очевидных преимуществ — уменьшаются затраты на коммуникации, за счет распределенных вычислений повышается надежность системы и упрощается её масштабирование.
Я не имею в виду только большие и сложные распределенные системы. Представьте себе какой-нибудь модный фитнес-браслет. Будет он передавать всё что намерил на вашем пульсе через bluetooth смартфону? Конечно, нет. Браслет сам проанализирует данные и отправит только одну маленькую посылочку с результатом.
И вот мы подошли к главному. Что чаще всего важно для контроллера, который осуществляет вычисления «на месте»? Энергопотребление! Чем меньше варемени занимает обработка данных, тем больше времени микроконтроллер проводит в режиме сна и тем дольше устройство работает без подзарядки.
Так мы вполне логично дошли до того чтобы рассмотреть микроконтроллеры серии EFM32 Wonder Gecko от SiLabs. Они классные и вы можете купить их в ЭФО по отличным ценам оптом и в розницу. Кхе-кхе.
EFM32WG — серия микроконтроллеров на базе ядра Cortex-M4F. Как и другие EFM32, они ориентированы на малопотребляющие устройства и предоставляют разные программные и аппаратные средства для контроля над энергопотреблением. Эти средства мы будем использовать для сравнения ядер Cortex-M3 и Cortex-M4F.
Плата EFM32WG-STK3800 — кит для работы с микроконтроллером на базе ядра Cortex-M4F
Плата EFM32GG-STK3700 — кит для работы с микроконтроллером на базе ядра Cortex-M3
Платы отличатся между собой только целевым микроконтроллером.

Одна из программ из набора готовых примеров использует Быстрое Преобразование Фурье для измерения частоты мерцания внешнего источника света. Если вкратце, то сигнал с датчика освещенности поступает на АЦП, результаты измерений буферизируются, и раз в 0,5 сек производятся вычисления: по выборке из 512 результатов измерений с использованием БПФ выделяется частота основной гармоники. На ЖКИ выводится результат вычислений и количество машинных циклов за которые была исполнена функция ProcessFFT().
Ресурсоемкой является только часть алгоритма, связанная с анализом измерений. Запустим одну и ту же программу на двух платах и сравним длительность вычислений и уровень энергопотребления.

Открываем Simplicity Studio, включаем Simplicity IDE, компилируем проект.
Мопед не мой, приведенный файл — один из дефолтных примеров, доступных как в Simplicity IDE, так и в IAR, Keil и некоторых других средах разработки.
Подключаем плату в режиме DBG, программируем микроконтроллер, подключаем вход АЦП к выходу интерфейса датчиков (через него опрашивается light sensor), запускаем.
Вывод первый: программа работает корректно. Когда работает лампа дневного света, результат работы вычислений — 100 Гц (в сети переменного тока частота 50 Гц, а «максимальная интенсивность» света включенной в сеть лампы достигается и на минимуме, и на максимуме синусоиды, т.е. дважды за период). Помещая датчик освещенности в тень получаем результат «DARK», а при естественном освещении — «прыгающие» цифры.

Теперь воспользуемся утилитой energy profiler, которая предоставляет график изменения уровня энергопотребления, обновляющийся по ходу исполнения программы.
Запускаем профилирование для платы EFM32WG-STK3800.

На вычисления у микроконтроллера EFM32WG990F256 ушло около 49 мс, среднее энергопотребление — 411 мкА. Запомним этот результат и попробуем запустить ту же сишную программу на модуле с микроконтроллером на базе Cortex-M3, то есть без всяких DSP- и FPU-инструкций ядра.
В свойствах проекта для этого необходимо
изменить целевой микроконтроллер с EFM32WG990F256 на EFM32GG990F1024,

объяснить компилятору, транслятору и линковщику что программа теперь собирается для кристалла на базе cortex-m3 вместо cortex-m4,

отключить опцию использования аппаратного fpu.


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

Результаты можно сравнивать с чистой совестью: оба кристалла работают с тактовой частотой 48 МГц, опрос датчиков и обработка данных идут с одинаковой периодичностью, результаты выводятся в одном и том же формате на одинаковые ЖКИ.
По графикам видно, что энергопотребление кристалла действительно почти полностью определяется уровнем потребления на этапах вычислений и вывода их результатов. Измерения же проводятся в режиме «сна» и практически не влияют на общее энергопотребление. Вычисления на ядре Cortex-M3 проводятся в 2.2 раза медленнее, в той же пропорции изменяется и среднее энергопотребление устройства.
С одной стороны, вся математика, необходимая для решения задачи может исполняться и на контроллере с ядром Cortex-M3, однако разница в скорости вычислений может быть существенной для многих устройств, критичных к энергопотреблению или скорости работы.
На всякий случай прошу прощения за некоторые упрощения и допущения, сделанные в первой части статьи. Спасибо за внимание
Этот материал написан посетителем сайта, и за него начислено вознаграждение.
Введение
Многим из читателей, возможно, будет в это трудно поверить, но первые 4-ядерные x86-64 процессоры для настольных систем были представлены более 16 лет тому назад, в ноябре 2006 года, когда компания Intel явила миру свой очередной “экстремальный” процессор, Core 2 Extreme QX6700.

Первый 4-ядерный x86-64 процессор для домашних пользователей представлял собой два 2-ядерных кристалла, объединённых на одной подложке. Intel попросту повторила уже использованный ранее в процессорах Pentium D подход, удвоив количество ядер простым объединением двух кристаллов в одном корпусе. Преимущества и недостатки такого дизайна были и остаются очевидными: с одной стороны компании не нужно было тратить время и ресурсы на разработку нового 4-ядерного кристалла, с другой — ядрам из разных кристаллов для обмена данными необходимо было пересылать последние через северный мост по FSB.

Конечно же, последнее обстоятельство сказывалось на производительности, но на практике потери были не столь уж и велики. Да и на другой чаше весов был максимально быстрый выпуск 4-ядерных процессоров Core, потенциально способный окончательно “добить” конкурента в лице AMD, который толком ещё не оправился от выпуска 2-ядерных процессоров Core. Для компании Intel, ещё не так давно откровенно прозябавшей со своей не самой удачной архитектурой NetBurst, выбор на тот момент был очевиден — оседлать войну успеха новой архитектуры Core здесь и сейчас, окончательно закрепив за собой лишь недавно возвращённый статус лидера рынка.
Естественно, первый 4-ядерный настольный x86-64 процессор, как и большинство когда-либо выходивших “экстремальных” процессоров Intel, был продуктом чистом имиджевым. Дело в том, что программное обеспечение для настольных ПК тех лет в массе своей было адаптировано в лучшем случае под 2-ядерные процессоры, так что на практике от дополнительной пары ядер в QX6700 толку было исчезающе мало. А вот цена у новинки была поистине “экстремальная” — $999! И это при том, что “половинка” QX6700 в лице Core 2 Duo E6700 давала примерно тот же уровень производительности в большинстве приложений и игр, будучи почти вдвое дешевле! Понятно, что новый “экстремальный” процессор Intel был, как и все его предшественники, ориентирован на небольшую группу ПК-энтузиастов, вот только на сей раз не на геймеров, а, скорее, на пользователей рабочих станций. Именно они в различного рода профессиональном ПО могли получить доселе невиданный на настольных системах уровень производительности. Для обычных же пользователей оптимальным выбором по-прежнему оставались 2-ядерные процессоры.
Но так продолжалось недолго. Уже в момент выпуска Core 2 Extreme QX6700 Intel анонсировала менее дорогой “не-экстремальный” 4-ядерный Core 2 Quad Q6600, который должен был увидеть свет уже в новом, 2007 году. И в начале января 2007 года этот процессор был действительно представлен миру. Отпускная цена Q6600 изначально была не сильно ниже в сравнении с QX670, а именно $851, но уже к апрелю упала до $530, а в конце июня опустилась до отметки $266. И это при том, что Core 2 Quad Q6600 отличался от Core 2 Extreme QX6700 всего лишь чуть меньшей тактовой частотой (2.4 ГГц против 2.67 ГГц) и заблокированным множителем. А в те годы, напомню, разгон по шине не был запрещен ни де-юро, ни де-факто, так что указанные отличия были совершенно несущественными. И именно Core 2 Quad Q6600, особенно после летнего снижения цен, стал первым массовым 4-ядерным настольным процессором, открыв новую главу в истории персональных компьютеров.

Конечно же, за прошедшие с момента выхода Core 2 Quad Q6600 годы существенно выросло число инструкций, выполняемых x86-64 процессорами за такт. В процессорах так же появились новые функциональные блоки и соответствующие наборы инструкций, увеличившие производительность в определённых задачах. Банально выросли тактовые частоты и среднее число ядер, возросла скорость обмена данными между процессором и оперативной памятью, а также между ядрами процессора. Заметно улучшилось и масштабирование программного обеспечения на большое количество ядер, которые уже не редкость в современных домашних ПК. Даже игры, долгое время ограниченные преимущественно однопоточной производительностью, с внедрением современных API, таких, как DirectX 12 и Vulkan, стали эффективнее использовать мощности многоядерных процессоров. В общем, технический прогресс всё это время, конечно же, на месте не стоял, вот и давайте сегодня посмотрим, что сможет “старичок” Core 2 Quad Q6600 в современных приложения и играх.
Тестирование
В роли актуального 4-ядерника выступит Core i3-10100, увидевший свет в апреле 2020 года. В моём блоге год назад уже публиковалась заметка со сравнением Xeon E5450 (аналог настольного Core 2 Quad Q9650) с Core i3-8100 в современных приложениях и играх. Эта статья ещё немного расширяет временные рамки между современными 4-ядерными процессорами и их далёкими предками: участников прошлогоднего тестирования разделяли 10 лет технического прогресса в области процессоростроения, а участников сегодняшнего — уже 13. Так же в прошлый раз соперники были поставлены в не совсем равные условия — Xeon E5450 тестировался в разгоне да ещё и в комплекте с быстрой DDR3-памятью, а Core i3-8100, напротив, с медленной DDR4. Да и 3D-ускоритель (RTX 2060 Super) в том тестировании был всё-таки слабоват.
В этот раз у нас Quad постарше, не только в разгоне, но и в стоке, да ещё и память у него помедленнее (DDR2), а вот современный Core i3, напротив, будет оснащён более быстрой DDR4-памятью. Видеокарта тоже “пободрее” — RX 6800. И здесь сразу отвечу на вопрос, а почему в соперники “старичку” был выбран Core i3-10100, а не Core i3-12100? Внезапно, потому, что у меня i3-12100 нет и, скорее всего, никогда уже и не будет. А покупать, как минимум, материнскую плату + 4-ядерный процессор исключительно ради тестов желания нет. В будущем, впрочем, возможно разорюсь на недавно анонсированный i3-13100(F) с DDR5-памятью — там будет уже 16 лет прогресса! Но то пока только в планах, а сегодня имеем то, что имеем.
- “Настоящая” 4-ядерность: все 4 процессорных ядра теперь находятся на одном кристалле и имеют в распоряжении общий для всех ядер кэш 3-го уровня.
- Контроллер памяти теперь встроен в процессор и обзавёлся поддержкой DDR4.
- Так же перекочевал из северного моста под крышку процессора и контроллер шины PCI Express.
- Во многих процессорах присутствует встроенное графическое ядро.
- Ядра, встроенная графика, общий L3-кэш и некоторые другие компоненты объединены между собой кольцевой шиной.
- Многочисленные улучшения во фронтенде и бекенде процессорных ядер, включая как простое увеличение количества исполнительных устройств, так и более тонкие архитектурные изменения.
- Появление новых (а также улучшение уже имеющихся) исполнительных устройств и регистров для поддержки новых наборов инструкций, таких, например, как SSE4.1 и 4.2, AVX, AVX2, FMA3, AES.
- Была возвращена поддержка Hyper-Threading и введена поддержка Intel Turbo Boost.

Небольшие пояснения к таблице:
- Частота для Core i3-10100F указана в бусте по всем ядрам.
- Контроллер памяти для Core 2 Quad Q6600 был частью северного моста чипсета. Официально чипсет Intel P45 поддерживал DDR2-800 и DDR3-1066, но абсолютное большинство производителей материнских плат заявляли о поддержке, как минимум, DDR2-1066 и DDR3-1333.
- Для DDR4-памяти в системе с Core i3 активирован XMP-профиль.
По последнему пункту — в это раз избегаем тестирования Core i3 в паре с “медленной” DDR4-2666 памятью сразу по нескольким причинам. Начнём с того, что даже на момент выхода процессоров Comet Lake DDR4-память с XMP-профилем 3200 стоила лишь немногим дороже в сравнении с DDR4-2666 памятью, так что многие покупали и использовали, как минимум, такие плашки. Тут можно было бы возразить, что в 400-ой серии чипсетов Intel увеличить частоту памяти выше официально поддерживаемой можно было лишь на платах с Z490. Факт, но раз уж мы не может разогнать на используемой современной платформе процессор (ибо множитель заблокирован, а разгон по шине мёртв), то давайте разгоним хотя бы память. А то получилось бы несколько несправедливо — систему с Core 2 Quad Q6600 мы тестировали бы и в стоке, и в разгоне, а система с Core i3-10100 довольствовалась бы исключительно стоковой конфигурацией. Будем считать, что современную платформу мы здесь тестируем в режиме где-то между стоком и небольшим разгоном по памяти.
Основы тестовых стендов LGA 775 и LGA 1200 составляют материнские платы GIGABYTE GA-EP45-UD3R и ASUS PRIME Z490M-PLUS, соответственно. Остальные комплектующие, кроме оперативной памяти и системы охлаждения процессора, идентичны: видеокарта PowerColor AMD Radeon RX 6800 Fighter, SSD Apacer AS350 PANTHER на 512 ГБ под Windows 11 и приложения, SSD Colorful SL500 на 4 ТБ под игры, блок питания CHIEFTEC BDF-1000C. Что касается памяти, то первый тестовый стенд оснащен 4 планками DDR2-1066 CL5 памяти Kingston KHX8500D2 объёмом по 2 ГБ каждая, второй — 2 планками Patriot Viper 4 Blackout DDR4-3200 CL16 памяти объёмом по 4 ГБ каждая (кит PVB48G320C6K). Core i3-10100F охлаждался недавно купленной СВО ID-Cooling FROSTFLOW X 360 (знаю, перебор, но она уже стояла на тестовом стенде), а для Core 2 Quad Q6600 пришлось “расчехлять” старенький Cryorig R1 Ultimate, так как у упомянутой СВО нет креплений на LGA 775.
Core 2 Quad Q6600 был дополнительно разогнан до 390 МГц по шине, так что итоговая частота составила 3.51 ГГц (390×9). Напряжение Vcore в BIOS пришлось поднять до внушительных 1.4875 В, но видавший виды суперкулер со своей задачей справился — даже в стресс-тестах температуры не поднимались выше 72° C по ядрам при Tjunction в 75° C. Горячо, конечно, но для стресс-теста терпимо.




И пара слов о методике тестирование. Производительность будем сравнивать в современном программном окружении, используя актуальные (насколько это возможно) версии тестируемых приложений и игр. Аналогично и с Windows — на оба тестовых стенда была установлена “свеженькая” Windows 11, версия 22H2. Здесь можно возразить, что использование современного ПО ставит участников тестирования в не совсем равные условия, ведь актуальные версии приложений и игр с большой долей вероятности могут использовать наборы инструкций, отсутствующие у “старичка” Core 2 Quad Q6600. Как следствие, значительно более актуальный Core i3-10100 получит от использования SSE4- и AVX-инструкций дополнительное, якобы несправедливое, преимущество. Но я считаю иначе: появление новых наборов инструкций — это, как упомянуто выше, одно из микроархитектурных улучшений, которое ничем по сути своей не отличается от роста тактовых частот или увеличения объёма кэш-памяти. В конце концов, появились все эти наборы не просто так, и транзисторный бюджет на их поддержку был потрачен не смеху ради.
Жаль лишь, что во многих случаях использовать максимально современное ПО в тестах не получится, так как поддержка наборов инструкций, отсутствующих у Q6600 много где уже стала обязательной. В особенности сказанное, конечно же, касается игр, но и многие актуальные версии неигрового ПО уже не так просто или вообще невозможно запустить на стареньких процессорах. Тем не менее, небольшой список вполне себе актуального ПО набрать удалось:
- Для тестов синтетических были выбраны AIDA64 и Geekbench 5. Из первой правда, мы воспользуемся лишь тестами скоростных характеристик памяти, так как бенчмарки вычислительной скорости процессоров мне в Geekbench 5 нравятся сильно больше.
- В качестве реального неигрового ПО будут использованы Cinebench R23, Photoshop 2020, Premiere Pro 2022, 7-Zip 22, Blender 3.3, HandBrake 1.5, NAMD 2, Python 3.9.
- И, наконец, игры будет представлены проектами Grand Theft Auto V, Sid Meier’s Civilization VI, Shadow of the Tomb Raider, Hitman 2, Metro Exodus, Total War: Three Kingdoms, Borderlands 3, F1 2020.
По играм отмечу, что тестировать будем не только в двух разрешения — HD и QHD, но и (там, естественно, где такое возможно) с использованием двух версий DirectX — 11 и 12.
Синтетические и комплексные тесты
AIDA64 Memory Bandwidth & Latency

Столь любимый многими энтузиастами тест пропускной способности памяти в AIDA64 демонстрирует крайне не радужную картину — в сравнении с современной 4-ядерной платформой Intel скорости чтения и копирования у системы с Q6600 в стоке меньше в 6 и 7 раз, соответственно, а по скорости записи преимущество Core i3 вообще практически на порядок. Небольшой разгон памяти в системе с Q6600 позволяет немного сократить отставание, но оно по-прежнему многократное.

При в разы больших показателях пропускной способности латентность памяти на современной платформе заметно ниже. Преимущество сборки с Core i3-10100 над старой платформой с Core 2 Quad Q6600 порядка 40% — чуть больше в сравнении с последней в стоке, чуть меньше — в разгоне.

В известном синтетическом наборе тестов Geekbench 5 Core i3-10100 в 3.5 раза быстрее Core 2 Quad Q6600 в однопоточных тестах и более чем в 4 раза в многопоточных. В сравнении с разогнанным Q6600 преимущество современного 4-ядерного процессора в однопоточных и многопоточных сценариях использования уже 2.5- и 3-кратное, соответственно.
Что ж, как видим, с точки зрения бенчмарков синтетических прогресс на месте действительно не стоял.

Комплексный тест PCMark 10 показывает общую производительность в наиболее распространённых для настольного ПК задачах. Даже в наиболее лёгких, можно сказать “офисных”, сценариях (группы тестов Essentials и Productivity) система на Core i3-10100 обходит таковую на Core 2 Quad Q6600 на 70–130%. Ну а в тестах “профессионального” ПО для создания контента (группа тестов Digital Content Creation, DCC), современная платформа быстрее уже на внушительные 180%. В сравнении с разогнанным Q6600, показатели преимущества i3-10100 в упомянутых сценариях составляют уже “всего” 30%, 60% и чуть больше 100%. В целом, выглядит не так уж и плохо, если бы не одно “но”.
Как будет показано ниже, в реальном “профессиональном” ПО относительные показатели i3-10100 заметно выше. Возможно, в PCMark сценарии использовании недостаточно сложные, чтобы как следует нагрузить современный 4-ядерник. Или свободное ПО используемое в тестах хуже оптимизировано под современные микроархитектуры нежели коммерческие пакеты. Или некоторая значимая часть работы в тестах PCMark 10 выполняется видеоускорителем, который в обеих системах идентичен.
Профессиональное ПО

И вот первый пример реального ПО — популярный бенчмарк Cinebench, который позволяет оценить производительность при использовании пакета для создания трёхмерной графики и анимации Cinema 4D. И да, здесь у Core 2 Quad Q6600 всё плохо: Core i3-10100 быстрее “старичка” в стоке и в разгоне в 4.6 и 3.1 раза, соответственно.

Photoshop 2020 — последний выпуск графического редактора Adobe, который без каких-либо манипуляций запустился на Core 2 Quad Q6600. Для оценки производительности использовался бенчмарк от американского сборщика компьютерных систем Puget Systems. Преимущество Core i3-10100 над “старичком” здесь чуть менее внушительное — современные 4-ядерник быстрее Q6600 в стоке и в разгоне в 3.5 и 2.6 раза, соответственно.

А вот видео-редактор Adobe Premiere Pro без проблем запустился в своей последней (на момент тестирования) версии. Так же, как и в случае с Photoshop использовался бенчмарк от Puget Systems, и результаты в целом получились аналогичными — современный 4-ядерник оказался быстрее Q6600 в стоке и в разгоне в 3.7 и 2.6 раза, соответственно.

Со сжатием данных в популярном архиваторе Core i3-10100 справился в 3.4 раза быстрее стокового Core 2 Quad Q6600. Разгон последнего лишь немного исправил ситуацию, сократив отрыв Core i3-10100 до 2.6-кратного.

На рендеринг популярной для целей оценки производительности сцены BMW27 Core i3-10100 потратил более чем в 5 раз меньше времени нежели стоковый Core 2 Quad Q6600. Разогнанный Q6600 оказался медленнее уже “лишь” в 3.6 раза.

С H.265-кодированием видео пакетом Handbrake Core 2 Quad Q6600 справился ещё хуже — Core i3-10100 оказался быстрее даже разогнанного Q6600 в 5.2 раза! А отрыв i3-10100 от Q6600 в стоке составил 7.6 раза.

Задачу классической молекулярной динамики в NAMD 2 Core i3-10100 решил быстрее в 3.5 и 2.4 раза в сравнении со стоковым и разогнанным Core 2 Quad Q6600.

Вычисления с матрицами в многопоточном режиме в Python 3 Core i3-10100 провёл в 2.7 и 1.9 раза быстрее в сравнении со стоковым и разогнанным Core 2 Quad Q6600.
В среднем, таким образом, по группе тестов неигрового ПО имеем более чем 4-кратное превосходство Core i3-10100 над стоковым Core 2 Quad Q6600. Разогнанный Core 2 Quad Q6600 медленнее в среднем в 3 раза.




