AMDBulldozer |
31-12-2013 19:08 2281336 |
Maxims94.08, насамом деле это повторялось уже тысячу раз, но надеюсь меня извинят если я повторю 1001-ый:
Да, формально, если смотреть на голые цифры и не понимать почему они именно такие, характеристики AMD вроде бы выглядят привлекательно.
Поставить эту привлекательность под сомнение можно очень простым путем: спросить себя, если всё так офигительно просто, почему же эту кластерную многопотоковость (CMT) никто до AMD не реализовал? Ведь сама концепция была предложена то ли в 70-х, то ли в 80-х годах фирмой IBM.
И в чем вообще эта концепция заключается?
Длинная куча оффтопика
Прошу прощения за оффоп, но попробую немного разъяснить нашему любителю AMD:
Для начала конструируется процессор, рассчитанный на очень высокие тактовые частоты. Для этогог, в частности, конвеер команд разбивается на большое число дополнительных стадий. Если у Intel среднее число стадий конвейера равно 15 (это число не является фиксированным и для одних и тех же инструкций в разных ситуациях может быть разным), то у AMD оно намного выше. Точные значения фирма скрывает, но оценивают её минимум в 21, а более вероятно в 25 стадий.
Знакомый подход? Точно такой же Intel использовала с провальной архитектурой Netburst, которую рассчитывала разогнать до 10ГГц. Но... не срослось!
Однако AMD пошла дальше и реализовала уже упомянутую кластерную многопотоковость. В чем она заключается?
Любой процессор имеет семь основных логических стадий конвейера (физически каждая стадия может быть разделена на несколько более элементарных). Часть из них работает с командами процессора. Теми самыми обычными командами архитектуры x86, из которых состоит исполняемый код.
Эти команды всегда выполняются строго последовательно. Никакого внеочередного выполнения тут быть не может. Эти стадии объединены под названием "начальной последовательной обработки" (in-order CISC frontend). В число этих стадий входит выборка (fetch), декодирование (decode), переименование регистров (renaming) и помещение декодированных команд в очередь микрокоманд (issue).
А вот уже для RISC-подобных микрокоманд в этой очереди реализовано внеочередное исполнение (out-of-order RISC backend).
Следующей стадией становится непосредственно исполнение микрокоманды. Микрокоманда исполняется одним из исполнительных устройств процессора. Понятно, что каждое устройство может за такт исполнить только одну микрокоманду. Причем только того типа, для исполнения которых оно предназначено.
Но предыдущие стадии конвейера, хоть они и последовательные, способны обрабатывать по несколько команд за такт. Декодер Piledriver'а 4 команды. Декодер core i (любого поколения) - до 5 (при условии использования macrofusion, без него 4).
Соответственно исполнительных устройств должно быть несколько. При этом очень распростаненной является ситуация когда команде исполняемом на следующем такте требуются результаты полученные командой выполненной тактом ранее.
Это действительно ситуации встречающаяся сплошь и рядом. Возьмите вычисление выражения "2a+1" или копирование информации через промежуточный регистр: "mov ax, cs; mov ds, ax" (примеры приведены произвольно, можете не напоминать мне, что последний был характерен только для MS-DOS).
Чтобы иметь возможность использовать результаты вычислений непосредственно на следующем такте процессор имеет сложную (чем больше исполнительных устройств - тем сложнее) и разветвленную обходную сеть (bypass network). Сложность этой сети является одним из факторов лимитирующих тактовую частоту процессора.
Что сделали инженеры AMD? Они просто разрезали её на две половинки. При этом сложность её уменьшилась не в два раза, а гораздо больше.
Было удалено каждое соединение между исполнительными устройствами из плвой и левой половины компьютерного "мозга". Из человека такая операция сделала бы шизофреника - у него возникли бы две независимые, но неполноценные личности. Ведь каждая из них управлялась бы только половиной мозга. Но у мозга есть неиспользованные резервы, а у процессора, увы, их нет.
Продолжая аналогию с людьми можно сказать, что когда Intel говорит о 4 ядрах, она имеет в виду, что работа будет выполнена 4 нормальными людьми. Когда Intel рассказывает о технологии Hyperthreading подразумевается, что работа будет выполнена людьми специально натренированными на исполнение какой-то дополнительной работы в промежутках между основной.
А когда AMD громко заявляет о, якобы, 8-миядерных процессорах, она предоставит Вам для работы четырех шизоидов, в каждом из которых содержатся две личности, причем одна личность может управлять только правой рукой и правой ногой, вторая - только левыми, а взаимодействовать между собой эти личности не обучены.
Итак: так называемые "8-миядерные процессоры" AMD серии FX являются на самом деле 4-хядерными. Каждое ядро разрезено на уровне out-of-order backend на две половины, поэтому каждый процесс может пользоваться только половиной исполнительных устройств. Блок выборки команд, декодер и регистровый файл ядро имеет в единственном числе. AMD называет ядро "модулем". Блок команд с плавающей точкой вообще вынесен за пределы "псевдоядра" и обращение к нему происходит по тому же принципу, который был реализован в процессоре i80486 в 1989 году. Этот блок также имеется в единственном числе, поэтому "псевдоядра" конкурируют за доступ к нему с использованием той же самой SMT-модели, которую реализует технология hyperthreding.
Прошу еще раз обратить внимание: я не против AMD вообще. Я всего лишь против неудачных архитектур. Во времена Pentium 4, я покупал Athlon'ы. Сейчас ситуация зеркально изменилась.
Вам мало? Я могу еще рассказать почему все три уровня кэш-памяти процессор AMD менее эффективны кэш-памяти Intel. Хотя формально все смотрят на её объем и восторгаются. Проверить дополнительно еще и ассоциативность с латентностью всем лень.
Но я не буду этого делать. Какое-то чувство подсказывает мне, что и эту-то простыню никто до конца не дочитает...
|