Если я не использую многопоточные парадигмы при разработке своего кода, будет ли гиперпоточность автоматически распределять нагрузку между логическими ядрами, или мне нужно будет специально писать, чтобы использовать преимущества других ядер, как это должно быть для физических ядер?
Процессоры Intel с гиперпоточностью и C
Ответы (1)
По предложению @us2012 я размещаю это здесь из своего комментария...
Нет такой магии. Суперскалярные процессоры, особенно Процессоры OOO (выполнение вне порядка) творят чудеса, но это внутри одного ядра.
Напротив, Hyperthreading можно рассматривать как (очень упрощенно) два конвейера впереди одного полного ядра.
процессоры AMD Bulldozer имеют похожий элемент, но они пошли дальше: Целочисленное ядро также разделено на два, но два конвейера + целочисленное ядро совместно используют один модуль с плавающей запятой. Это целое называется модулем, имеющим две нити.
TL;DR
Суперскаляр (из Вики)
Архитектура суперскалярного ЦП реализует форму параллелизма, называемую параллелизм на уровне инструкций в пределах одного процессора. Следовательно, это обеспечивает более высокую пропускную способность ЦП, чем это было бы возможно при данной тактовой частоте. Суперскалярный процессор выполняет более одной инструкции в течение тактового цикла, одновременно отправляя несколько инструкций резервным функциональным блокам процессора. Каждый функциональный блок — это не отдельное ядро ЦП, а исполнительный ресурс внутри одного ЦП, такой как арифметико-логическое устройство, устройство сдвига битов или умножитель.
Выполнение вне очереди (из Wiki)
В вычислительной технике неупорядоченное выполнение (OoOE или OOE) — это парадигма, используемая в большинстве высокопроизводительных микропроцессоров для использования циклов команд, которые в противном случае были бы потрачены впустую из-за дорогостоящих задержек определенного типа. В этой парадигме процессор выполняет инструкции в порядке, определяемом наличием входных данных, а не их первоначальным порядком в программе. При этом процессор может избежать простоя, пока данные извлекаются для следующей инструкции в программе, вместо этого обрабатывая следующие инструкции, которые могут выполняться немедленно.
Hyperthreading (от... сами знаете откуда...)
Hyper-threading (официально Hyper-Threading Technology или HT Technology, сокращенно HTT или HT) — это запатентованная Intel реализация одновременной многопоточности (SMT), используемая для улучшения распараллеливания вычислений (одновременное выполнение нескольких задач), выполняемых на микропроцессорах ПК. Впервые он появился в феврале 2002 г. на серверных процессорах Xeon и в ноябре 2002 г. на процессорах Pentium 4 для настольных ПК.1 Позже Intel включила эту технологию в процессоры Itanium, Atom и Core серии «i», среди прочих.
Бульдозер (не из не вики)
Bulldozer — это первая крупная модернизация процессорной архитектуры AMD с 2003 года, когда компания выпустила процессоры K8, а также два 128-битных FPU с поддержкой FMA, которые можно объединить в один 256-битный FPU. Этот дизайн сопровождается двумя целочисленными кластерами, каждый из которых имеет 4 конвейера (стадия выборки/декодирования является общей). Bulldozer также представит в новой архитектуре общий кэш L2. Маркетинговая служба AMD называет этот дизайн модулем. В конструкции процессора с 16 потоками будет восемь таких модулей,[7] но операционная система распознает каждый модуль как два логических ядра.