Comments 82
16 целочисленных 64-битных регистра общего назначения (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 — R15)
Рассмотрим пример, как передаются в регистрах четыре аргумента типа integer:
RCX: первый аргумент
RDX: второй аргумент
R8: третий аргумент
R9: четвертый аргумент
integer тут который понимается? 64хбитный? А как будут 32хбитные инты передаваться в 64хбитном приложении? Или они всё равно выравниванием превратятся в 64хбитные?
Ха-ха. Напомню что первыми 64 разрядные процессоры для настольных ПК были у AMD: потому архитектура и называется AMD64. К тому же ОС Windows не 64 разрядная, уж больно в ней много 32 битного.
Главное что там ядро таки 64разрядное, но конечно вин разрабы уж очень люто слоупочат. Иной раз просто не по себе становится, когда даже в Win7 находишь куски которые не обновлялись со времен вин95.
Брэхня, в Windows NT-ядре не осталось кода от DOSа. Учитывая количество модификаций и то, что семерка все же на MinWin…
и, да, как в х64 остались 16битные куски, которые под ней не работают?
и, да, как в х64 остались 16битные куски, которые под ней не работают?
Вин95 таки была 32 битной уже. Иконки вот точно некоторые с 95 года тянутся, да и диалоги некоторые ну к примеру в ИЕ уже точно лет 10 не обновлялись
Название AMD64 — батхёрт для интела. Есть i386, есть AMD64. Усё. Навсегда.
Ужас, невозможно, когда столько маркетинга в технической статье.
«Архитектура Intel 64 бла-бла-бла»
«Архитектура Intel 64 бла-бла-бла»
x86-64 (также x64/AMD64/Intel64/EM64T) — 64-битная аппаратная платформа: архитектура микропроцессора и соответствующий набор инструкций и чипсет, разработанные компанией AMD. Это расширение архитектуры x86 с полной обратной совместимостью. Набор инструкций x86-64 в настоящее время поддерживается процессорами AMD Athlon 64, Athlon 64 FX, Athlon 64 X2,Phenom, Phenom II, Turion 64, Opteron, последними моделями Sempron. Этот набор инструкций поддержан компанией Intel (с незначительными дополнениями) под названием Intel 64
Wikipedia
Wikipedia
Да уж… без описания Unix'ового ABI и в частности OS X'овского формата universal binary статья ну никак не может претендовать на полный охват
Можете дополнить? Напишите небольшой раздел — я вставлю в статью.
Да, из могучих старичков не выжил никто, ни Cray, ни DEC, ни даже Sun… А как много они сделали для развития отрасли!
«AMD64» в тегах нехватает
Процессоры с архитектурой Intel 64 нашли широкое распространение персональных компьютерах. И скорее всего ваш компьютер оснащен именно процессором с данной архитектурой.
Хм, вот у меня в ноуте стоит процессор Core 2 Duo T7100, если верить википендии то он поддерживает этот набор инструкций. Но почему же при попытке поставить ось х64 выскакивает сообщение мол ай-яй-яй и всё такое. Это я дурак или ось виновата?
Должно ставится, core2 duo специально 64 битным разрабатывался
Если верить официальному сайту — справочнику по процессорам Intel :) то 64-битные инструкции поддерживаются. Попробуйте еще раз ;)
Оно у вас не при попытке запустить 64-битный инсталлятор под 32-битной осью ругается?
Вы из-под винды ставились? И, да, зачем на ноуте х64? Лишние 700 метров рамки отхватить?
Добротная статья. Спасибо. А почему здесь Вы говорили только про Windows?
1) Тематика 64-битности актуальней для пользователей/программистов Windows. В Unix/Linux/… 64-битность прижилась как то быстрее и проще. Возможно из-за того, что эти системы традиционно работают на более разнообразных аппаратных платформах.
2) Я лучше знаком с Windows. Считаю что лучше писать о том, что знаешь, чем заниматься бездумной компиляцией текстов. Это не избавляет от всех ошибок и неточностей, но по крайней мере и нет откровенной технической глупости, как это нередко бывает.
2) Я лучше знаком с Windows. Считаю что лучше писать о том, что знаешь, чем заниматься бездумной компиляцией текстов. Это не избавляет от всех ошибок и неточностей, но по крайней мере и нет откровенной технической глупости, как это нередко бывает.
Статья хорошая, но видно, что некоторые источники весьма устарели:
Практически все современные операционные системы сейчас имеют версии для архитектуры Intel 64. Например, Microsoft предоставляет Windows XP x64.
Практически все современные операционные системы сейчас имеют версии для архитектуры Intel 64. Например, Microsoft предоставляет Windows XP x64.
Статья сильно проинтеловская и даже промайкрософсткая. Еще AMD Athlon поддерживали 64 бита, процессоры от intel тогда этим похвастаться не могли.
*Написано по нерусски.
з.ы. в архитектуре вообще ничего не понимаю((
з.ы. в архитектуре вообще ничего не понимаю((
а можно подробнее про:
«приложения получат существенные преимущества от 64-битного адресного пространства и увеличения количества регистров. Малое количество регистров, доступное в устаревшей x86 архитектуре, ограничивает производительность в вычислительных задачах.»
каким образом?
«приложения получат существенные преимущества от 64-битного адресного пространства и увеличения количества регистров. Малое количество регистров, доступное в устаревшей x86 архитектуре, ограничивает производительность в вычислительных задачах.»
каким образом?
Большой объем оперативной памяти дает колоссальный прирос производительности на ряде задач. Если удается держать все данные в памяти, то производительность из-за отсутствия работы с жестким диском, может вырасти на порядок. Можно использовать алгоритмы, получающие выигрыш от дополнительного объема памяти. В ряде случаев упрощается программирование, так как не следует думать о барьере в 2 гигабайта. Большее количество регистров позволяет передавать в них параметры, позволяет компилятору лучше оптимизировать код. Дополнительные регистры позволяют реже обращаться к памяти, чтобы сохранять значения переменных.
про память то ясно, вопрос был именно про регистры. зависимость производительности от количества регистров (не размерности)
Кажется преимущество достаточно очевидно. Есть абстрактный алгоритм в циклах:
Раньше, чтобы выполнить код алгоритма внутри циклов, нам могло не хватать регистров для хранения значений i, j, k и требовалось сохранить эти значение в памяти. Теперь регистров может хватить. Следствие — сокращение обращения к памяти и просто устранение лишних операций.
for (size_t i = 0; i < a; i++) for (size_t j = 0; j < b; j++) for (size_t k = 0; k < c; k++) { // Алгоритм }
Раньше, чтобы выполнить код алгоритма внутри циклов, нам могло не хватать регистров для хранения значений i, j, k и требовалось сохранить эти значение в памяти. Теперь регистров может хватить. Следствие — сокращение обращения к памяти и просто устранение лишних операций.
Регистры — это часть процессора и работают они со скоростью процессора. Плюс к ним не надо стучаться через материнскую плату. Чем больше в них можно всунуть данных, тем лучше. Оператива-таки большой тормоз по сравнению с процом. Обычно в функции передаётся не более четырёх параметров — всё что больше считается плохим тоном. Да и вообще не так часто надо. Тем не менее иметь несколько регистров про запас — это значит что 90% функций будут общаться через регистры. Перформанс сильно возрастает.
Windows Server 2008, Enterprise — 2 Tbyte;
Как можно засунуть столько? Вообще поясните мне как подключаются большие объемы памяти типа 64, 128 Гб. Спасибо.
Ну уж не в десктопные материнки, явно. Некоторые серверные платформы это позволяют.
Фотка ваша? Какую задачу решает подобный сервер?
По-моему, это один из кластеров skynet'а )
Полагаю что это модуль для высоконагруженных БД. Хотя все упирается в то, сколько там камней. Ну или для виртуалок.
Собственно вот www.oracle.com/us/products/servers-storage/servers/x86/030699.htm
Там 4 сокета для шестиядерных Xeon-ов. Так что вполне хватит %)
Там 4 сокета для шестиядерных Xeon-ов. Так что вполне хватит %)
Например, stackoverflow крутится на бд, размещенной в 48 GB RAM.
Более посещаемые социальные сервисы требуют большей RAM.
Более посещаемые социальные сервисы требуют большей RAM.
Если вас интересует физическая сторона вопроса, то она решается экстенсивными методами.
Если программная, то советую почитать про механизмы PAE ну и виртуальную память вообще.
Если программная, то советую почитать про механизмы PAE ну и виртуальную память вообще.
Мне интересно следующее: вот мне нужно засунуть в сервер 1Tb оперативной памяти. Как мне решить эту задачу? А 2Tb возможно? А сколько максимум? Я не про программное ограничение в 64 бита, чисто аппаратный вопрос. Количество слотов, объемы планок, какие-то расширителньые платы и так далее. Вопрос перехода на кластер не затрагиваю.
Основная проблема с памятью заключается в сложности схемотехники. При высоких частотах очень большое значение начинают играть сами проводники. Паразитные индуктивности и емкости ограничивают допустимые длины проводников и вводят очень строгие ограничения на их разводку.
Когда основной памятью была SDRAM, то количество слотов ограничивалось разве что возможностями контроллеров памяти того времени. DDR, DDR2 и DDR3 особенно, не позволяют вешать больше нескольких слотов на канал. Иначе уже не работает нифига.
Из всего вышесказанного следует, что расширять память в сервере можно только увеличивая количество каналов. Собственно, так и делают. На больших машинах, как правило, применяется архитектура NUMA, при которой память организована неоднородно. Каждой кучке процессоров дается собственный контроллер памяти и, конечно, шина позволяет использовать память соседних узлов. Но тут уже на первый план вылезают проблемы когерентности кэшей и распределения памяти по узлам.
В общем и целом, если речь идет о NUMA, то максимум ограничен разве что адресным пространством. В классических архитектурах ограничения носят физический характер.
Когда основной памятью была SDRAM, то количество слотов ограничивалось разве что возможностями контроллеров памяти того времени. DDR, DDR2 и DDR3 особенно, не позволяют вешать больше нескольких слотов на канал. Иначе уже не работает нифига.
Из всего вышесказанного следует, что расширять память в сервере можно только увеличивая количество каналов. Собственно, так и делают. На больших машинах, как правило, применяется архитектура NUMA, при которой память организована неоднородно. Каждой кучке процессоров дается собственный контроллер памяти и, конечно, шина позволяет использовать память соседних узлов. Но тут уже на первый план вылезают проблемы когерентности кэшей и распределения памяти по узлам.
В общем и целом, если речь идет о NUMA, то максимум ограничен разве что адресным пространством. В классических архитектурах ограничения носят физический характер.
Почитал по диагонали, но неточности режут глаз
>> Apple также выпускает 64-битный процессор «G5» PowerPC 970 с разрешения IBM.
Apple ничего не выпускал. PowerPC 970 это процессор, спроектированный и выпускаемый IBM.
>> 2006: Sony, IBM и Toshiba начинают разработку 64-битного процессора Cell для PlayStation 3
В начале состоялся запуск PS3, а в 2005 CELL уже был готов. Разработка началась в 2001г
>> Apple также выпускает 64-битный процессор «G5» PowerPC 970 с разрешения IBM.
Apple ничего не выпускал. PowerPC 970 это процессор, спроектированный и выпускаемый IBM.
>> 2006: Sony, IBM и Toshiba начинают разработку 64-битного процессора Cell для PlayStation 3
В начале состоялся запуск PS3, а в 2005 CELL уже был готов. Разработка началась в 2001г
Кстати, быть может кого-то заинтересует вот это видео на тему 64-битности. Так себе, но раз попалось сейчас под руку, то решил написать :) — 32bit vs WoW64 vs 64bit.
Меня всегда интересовало _точное_ определение понятия 'разрядность', не могли бы вы привести его?
А таки есть какая-то разница между AMD64 и EM64T? Когда всё это начиналось объясняли что EM64T это только 64-битная адресация памяти для поддержки больше 4 ГБ, а на деле получается что AMD64 и EM64T это практически одна платформа.
Так и есть. Просто были различные маркетинговые моменты. Изначально Intel планировал считать полноценной 64-битной архитектурой только IA-64. То что предложила AMD64 они решили объявить как просто технологией для доступа к большему объему памяти, а не как новой 64-битной архитектурой. Для них настоящей 64-битной архитектурой была только IA-64. Потом все изменилось.
P.S. Это мое личное мнение, которое может расходиться с действительностью. И еще напоминаю, что я не сотрудник Intel и говорю не от ее имени.
P.S. Это мое личное мнение, которое может расходиться с действительностью. И еще напоминаю, что я не сотрудник Intel и говорю не от ее имени.
Кстати, до сих пор понять не могу, почему MS втирает, что 32 битная OS больше 4ГБ не поддерживает, когда Windows Server 2008 x86 поддерживает до 16GB без того, чтобы быть 64 битным.
Если у них ядро одно и то же, то и Vista и 7-ка должны по идее тянуть больше 4х… Не на процесс, а как общедоступную память.
Если у них ядро одно и то же, то и Vista и 7-ка должны по идее тянуть больше 4х… Не на процесс, а как общедоступную память.
в 32 битном режиме это все держится через костыль PAE в котором прога не может адресовать больше 3х гигов оперативки
Наверное так говорится для простоты обывателям. Попробуй, объясни им тонкости… Думаю правильно, пусть и дальше так говорят. А тот кто понимает технические моменты, тот и так понимает.
Вы путаете несколько понятия адресуемой памяти и физической. Разрядность влияет на понятие адресуемой памяти. У вас на компе даже при 1Гб ОС x32 будет адресовать всегда 4 гигабата — используя интенсивно своп, для сохранения страниц из физической памяти, которые не нужны в данный момент. И для PAE (для x32) тоже 4ГБ будет, только в адресуемом пространстве будет выделено окно, куда будет отображаться физическая память из доступной > 4Гб.
Windows Server x86 использует PAE, а Windows 7 нет — поэтому вы и не сможете воспользовать более 4Гб.
А вот в x64 режиме у вас для адресации доступно теоретически 2^64 байт памяти. Понятно что современные объемы физической памяти с лихвой укладываются в этот диапазон, и никакие костыли до тех пор пока не достигнем этого предела не нужны.
Windows Server x86 использует PAE, а Windows 7 нет — поэтому вы и не сможете воспользовать более 4Гб.
А вот в x64 режиме у вас для адресации доступно теоретически 2^64 байт памяти. Понятно что современные объемы физической памяти с лихвой укладываются в этот диапазон, и никакие костыли до тех пор пока не достигнем этого предела не нужны.
Ничего я не путаю. Я в курсе, что один процесс больше 4ГБ физически адресовать не может, а если вычесть зарезервированные куски — так и все 3ГБ. Но это совсем не значит, что на уровне 32х битного ядра эту память использовать никак нельзя. Костыль-не костыль этот PAE, но например, как дополнительный дисковый кэш, как быстрый своп типо ready boost, главное, что эта память не простаивает.
Ведь прецеденты есть — Windows Server 2008 x86, по заявлениям MS, у них с Vista одно и то же ядро. Спрашивается, почему в Vista они про эту фишку умолчали? Форсируют прогресс?
Ведь прецеденты есть — Windows Server 2008 x86, по заявлениям MS, у них с Vista одно и то же ядро. Спрашивается, почему в Vista они про эту фишку умолчали? Форсируют прогресс?
Парни, кто что может сказать о таком разительном потреблении памяти у х64 — почти в 2 раза?
Логично предположить о необходимости хранения чисел 64бит для новых регистров, но ведь это не может затрагивать ВСЮ работу как системы так и приложений?
Прошу Вас.
Логично предположить о необходимости хранения чисел 64бит для новых регистров, но ведь это не может затрагивать ВСЮ работу как системы так и приложений?
Прошу Вас.
Все сильно зависит от приложения. Откуда собственно данные?
Например, требования для Вин7 х64 — 2 Гб, для х32 — 1 Гб
«Нельзя 10 лет в одном свитере ходить» © анекдот. :)
Андрей, это не ответ ;)
Спасибо
Спасибо
Я уже давно планирую пост в духе «Куда уходит память в 64-битных программах». Там попробую ответить на эти вопрос. Но надо будет еще поэкспериментировать. Потерпите немного. :)
а там есть што-то кроме банального «все указатели на структуры занимают в два раза больше места»? интересно!
Вот, написал :) — habrahabr.ru/company/intel/blog/94340/
Я тоже поначалу думал, что если скомпилировать код в 64-битный екзешник — то он будет работать быстрее. Но на деле не все так просто. Преимущества 64-битной архитектуры, отсутствия эмуляции и повышенного количества регистров могут быть сведены на нет двумя вещами:
1) Пониженная плотность кода. В результате в тот же объем кэша процессора влезает меньше инструкций. С точки зрения производительности по сравнению с 32-битным кодом это приводит к эффективному уменьшению размера кэша в 2 раза (или какое там соотношение у плотности кода x86 и x64). Также для извлечения увеличенного размера кода возрастает нагрузка на пропускную способность основной памяти (DRAM)
2) Если алгоритм таков, что хранит в памяти много указателей — то из-за увеличившегося в 2 раза размера этих указателей возникают те же проблемы, что описанные в п.1, не только для кода, но и для данных. Кэша данных (в расчете на число обрабатываемых указателей) становится меньше; также увеличивается потребление памяти и нагрузка на ее пропускную способность.
Поэтому далеко не всегда переход на 64-битную архитектуру повысит производительность. Это очень сильно зависит от алгоритма; от того, какие данные он обрабатывает.
1) Пониженная плотность кода. В результате в тот же объем кэша процессора влезает меньше инструкций. С точки зрения производительности по сравнению с 32-битным кодом это приводит к эффективному уменьшению размера кэша в 2 раза (или какое там соотношение у плотности кода x86 и x64). Также для извлечения увеличенного размера кода возрастает нагрузка на пропускную способность основной памяти (DRAM)
2) Если алгоритм таков, что хранит в памяти много указателей — то из-за увеличившегося в 2 раза размера этих указателей возникают те же проблемы, что описанные в п.1, не только для кода, но и для данных. Кэша данных (в расчете на число обрабатываемых указателей) становится меньше; также увеличивается потребление памяти и нагрузка на ее пропускную способность.
Поэтому далеко не всегда переход на 64-битную архитектуру повысит производительность. Это очень сильно зависит от алгоритма; от того, какие данные он обрабатывает.
Ссылки на уроки в конце статьи не работают. Поправьте если возможно, пожалуйста.
Sign up to leave a comment.
64 бита