сейчас как раз, в силу падения скорости прогресса в ЦПУ, для целей рендеринга можно затариваться тачками 2009-2010 гг, это 4-сокетные Оптероны .\socketF\ (24 ядра с ноды) и Интел 1366 (дороже, но экономичнее) - 2-сокетные мамки, это 16 или 24 потока НТ. Цены вторичного рынка позволяют сделать фермочку в несколько шт. мобо. Одна такая нода по CPU- производительности Intel 3930K@4,5 (только, ессно, без учета avx / aes)
_________________ Невозможно пить мало,изменять жене в пределах разумного.Нет золотой середины при определении степени порочности.Нельзя деградировать в меру
Мемbеr
Статус: Не в сети Регистрация: 17.04.2005 Фото: 80
Походу в Интеле шизофреники работают: Пофигу на всё лишь бы закон Мура выполнялся. Закон Мура рухнет вместе с Интел, это их знамя компании! Увлечённые люди! У них есть своя идеология) Сложно их критиковать - ведь они лидеры рынка и задают ему темп.
_________________ В меру упитанный, в меру воспитанный. Штанишки с кулером не предлагать. # Веду блог про майнинг и крипту здесь https://overclockers.ru/blog/appengamer
Member
Статус: Не в сети Регистрация: 20.03.2011 Откуда: Москва
vlad_s писал(а):
Опять "общие" слова, давайте конкретнее?
Флаг защищенного режима
Первый архитектурный геморрой. Имел место в процессоре 80286. Достаточно эпичен. Заключается в том, что установкой этого флага процессор переводится в режим, в котором доступны все его новые фички (включая доступ к памяти до 16 Mb), но при этом он теряет совместимость с 8086, а сбросить этот флаг уже нельзя. А поскольку ко времени появления компьютеров PC AT с этим процессором существовало более 9000 программ под MS-DOS, которая была гвоздями прибита к 8086, то новые возможности процессора оставались невостребованными. Для решения проблемы был придуман костыль: для возврата в реальный режим выполнялся сброс процессора через контроллер клавиатуры, что само по себе было операцией небыстрой. Поэтому использовать память свыше 1 Мб было можно только для виртуальных дисков, кеш-буферов и временных хранилищ[2]. Windows и OS/2, работая в защищенном режиме, пользовались этим костылем для обработки прерываний и запуска программ DOS. Начиная с процессора 80386 флаг защищенного режима сбрасывать было уже можно, но костыль с контроллером клавиатуры таскают и до сей поры, дабы обеспечить совместимость. Также в 80386 появился режим виртуального 8086, что тоже в какой-то степени решало проблему совместимости с DOS.
Адресная линия A20
Второй по значимости костыль. Дело в том, что ряд нерадивых программистов использовали тот факт, что адреса в сегменте FFFFh процессором 8086 заворачивались на первые 64k памяти.
Дело в том, что ещё при проектировании 8086 процессора для совместимости, а точнее для простоты портирования старого 8-битного кода с 8080 и Z80, физический 20-битный адрес было решено от программиста спрятать. Взамен ему выдали виртуальный 32-битный адрес, состоящий из 2-х 16-битных полей -- сегмента (точнее номера сегмента, см. ниже, ещё точнее - сегмента с 16-битной гранулярностью, а не номера-дескриптора) и смещения. Если программист со всем своим кодом, данными и стеком влезал в 64К памяти, то он мог писать по-старинке, если же ему требовалось больше -- вот тут-то и начиналось веселье. Дело в том, что на обе половины адреса было отведено по своему отдельному набору регистров, и при трансляции виртуального адреса в физический процессор брал сперва содержимое сегментного регистра, умножал его на 16 (т.н. "гранулярность памяти"), и прибавлял к полученной величине содержимое регистра смещения. Но поскольку сегментный регистр мог содержать от 0h до FFFFh, то максимальным значением адреса при таком алгоритме получалось 10FFEFh, что, разумеется, превышало максимально адресуемые FFFFFh. Поэтому старший бит адреса попросту обрезался, что и приводило к тому, что у любого сегмента с номером, большим F000h, старшие адреса начинали заворачиваться на сегмент 0000h.
В 80286, имевшем 24-битовый физический адрес, старшие биты больше не обрезались, и поэтому такие адреса указывали в расширенную память, а в результате такие хитро*****нные программы на этом процессоре не работали. Решили эту проблему, сделав 20-ю адресную линию отключаемой, заведя управление ею на вышеупомянутый контроллер клавиатуры. Костыль также таскают по сей день[3], хотя уже и о программах-то тех, наверное, давно забыли, как и о самой MS-DOS вспоминают лишь ностальгисты да олдфаги. Область расширенной памяти, адресуемая в реальном режиме (размером в 65520 байт), получила название High Memory Area (HMA), которую, впоследствии, MS-DOS использовала для размещения своего ядра, естественно, при этом потеряв совместимость с A20-зависимыми программами (тем не менее, для их запуска можно было грузить DOS в обычные нижние адреса памяти). Тут следует сделать важное замечание для людей, которые не совсем понимают нафига всё это сделано. Отключать А20 придумали в ibm действительно для совместимости. Если забыть о том, что линии можно(нужно?) отключать и дебилах, которые использовали memory wrap, то нововведение дескрипторов сегмента не кажется такой плохой идеей, так как вместе с защищенным режимом уже в 286 позволило говорить о какой-никакой многозадачности. Также следует не забывать что в компьютерах 21-го века, управление 20-й адресной линией производится как правило более быстрыми способами, чем через контроллер клавиатуры (опция в BIOS «Gate a20 option», где normal — использование контроллера клавиатуры, а Fast — уже что-то реализуемое через сам чипсет)
Команда LOADALL
Недокументированная команда, имевшаяся в процессоре 80286, которую использовали для обращения к памяти выше 1Мб в реальном режиме. Использовалась драйвером HIMEM.SYS. Говорят, что был выигрыш в скорости, по сравнению с переключением через клавиатурный контроллер. Других преимуществ нет. Маньяки из IBM даже пытались реализовать через нее что-то наподобие виртуальной машины, но сфейлили из-за невысокой скорости работы.
Архитектурный песец эволюции
Благодаря своей давней истории и стремлению Интела к сохранению совместимости, сабжевый процессор являет нам ярчайший пример свалки исторического мусора, напоминая тем самым ДНК. Начнём с того, что x86 является чуть ли не единственным современным CISC'ом. А это означает множество режимов адресации, избыточную, неотрогональную и неединообразную систему команд, совершенно ебанутую систему префиксов команд и смехотворное количество регистров общего назначения (с последним пунктом в X86-64 дела обстоят несколько в два раза лучше), правда, от последнего помогает условное выполнение и переименование регистров. Въедливый нерд же, ознакомившись со структурой сегментного дескриптора, моментально фалломорфирует от того, что первые 24 бита поля base address хранятся отдельно от последних 8-ми. Может показаться что причина этого кроется в том, что процессор проектировали конченые укурки, но на самом деле всё много прозаичней: в процессоре 80286 это поле было 24-х разрядным. А когда потребовалось расширить его до 32-х разрядов, старшие 8 бит приткнули куда получилось. И вот из такого леденящего душу [автоцензор3.14] состоит наш любимый x86 чуть более, чем полностью.
«Расширенный» реальный режим
Также известный как Unreal mode (по аналогии с реальным режимом, real mode). Очень интересный костыль, связанный с наличием т. н. «теневой части» сегментного регистра aka дескрипторного кеша. Впервые появился в 80386, с возможностью возвращаться из защищённого режима в реальный. Нехитрый трюк позволяет модифицировать реальный режим так, что в нём становится можно обращаться ко всем четырем гигабайтам адресного пространства. Недокументированная, но вполне полезная и юзабельная в некоторых ситуациях фича. То есть, была полезной, когда кто-то ещё использовал для чего-то полезного реальный режим. Сейчас эта фича используется в основном в BIOS-ах, и то только из-за лени программистов.
SMM (System Management Mode)
Несмотря на «4-уровневую» систему колец защиты (от наиболее высокого 0-го уровня, где, по идее, работает менеджер Операционной системы, который имеет наиболее высокий приоритет до 3-го, наименее привилегированного), имеется еще один «надуровень» который имеет… еще более высокие привилегии! Точнее, это программный код который вообще никому не виден и который (когда процессор передает ему управление по сигналу #SMI) имеет полный и неограниченный доступ абсолютно ко всем ресурсам системы.
Более того, в архитектуре предусмотрен специальный бит, и если обработчик этого режима (SMI Handler) установит его, то OS даже если и сильно захочет, не сможет не то что блокировать его, но и даже прочитать!
Вообще, всё задумывалось как лучше — SMI-обработчик это на самом деле часть BIOS и управление ему передаётся по сигналу от чипсета при наступлении каких-то событий (например, запись в некоторые порты или сигнал о перегреве) совершенно прозрачно для операционной системы, за исключением потраченного на выполнение этого обработчика времени. То есть, BIOS обеспечивает поддержку или эмуляцию некоторых девайсов чипсета, освобождая ОС от необходимости делать это самой, что даёт нас шансы в старости снова увидеть DOS (да-да, там в 90% случаев было примерно так же: Onboard BIOS Extensions эмулировали сферовакуумное оборудование, а софт работал прямо с этим «оборудованием» без дров).
Хорошо? Хорошо, но не совсем: во-первых, для SMМ нужна поддержка в железе: в чипсете и в процессоре (аж целый специальный режим).
Во-вторых, SMI-обработчики беспардонно отнимают время у задач операционной системы, никак не прерываемы, не откладываемы и приходят ВНЕЗАПНО (прощай риалтайм, для которого x86 изначально был годен чуть менее чем никак).
В-третьих, факт наличия SMM, именуемого иногда Ring −2, вызывает небеспочвенные опасения у специалистов касательно появления руткитов и прочих троянов, которые не будут брезговать добавлять в BIOS свой резидентный модуль — имея с этого профит в виде повышенной живучести и скрытности, так как выпилить их можно будет только перешивкой биоса, причем — только на программаторе. И совершенно ненапрасно, поскольку первый такой V2P был написан ещё в 1998-ом… И очень интересно глючил систему, «зануляя» по байту с конца массива флэшки за каждую перезагрузку. Отчего порты на матери поражённой такой заразой начинали друг за другом довольно экзотично отмирать даже после того, как антивирь вычищал код-инсталлятор.
В-четвёртых, мысль сумрачных гениев из компании Интел не стоит на месте, и SMM-у ещё в середине девяностых придумали более продвинутую замену: ACPI. Идея ACPI в том, что BIOS всё равно предлагает обработчики для событий чипсета, но в виде аккуратно сложенного в доступную операционной системе табличку байткода. ОС содержит интерпретатор байткода и при необходимости вызывает эти обработчики в своём контексте когда и как хочет. Все довольны. SMМ можно выкидывать на помойку.
Но не тут-то было. Несмотря на моральное устарение, SMM жив даже в последних моделях x86 процессоров и чипсетов. Помереть SMM-у мешает тот факт, что через него реализовано несколько других уродливых костылей, из которых самый главный — эмуляция PS/2 клавиатуры через USB, и вообще эмуляция доисторических клавиатурных портов, которые, помимо своего прямого назначения, позволяют невозбранно ресетить систему и используются для этого многими олдфажными ОС-ями. Алсо, во многих системах SMM управляет кулером процессора, без чего может наступить [автоцензор3.14]. Все эти костыли опциональны; то есть, если ОС поддерживает ACPI, она при загрузке отключает SMM и дальше делает всё сама через ACPI. ACPI поддерживают все выпущенные за последний десяток лет мейнстримные ОСи (винды, линух, фрибсдя, макось, и другие). Но убрать костыль, как все уже догадались, не позволяет желание сохранить обратную совместимость с доисторическим софтом, а также предпочтением мобильных камушков — управлять собственным кулером самостоятельно, игноря эту директиву (большинство буков Lenovo, Samsung-и почти все, словивший эпичный [автоцензор3.14] на этом эффекте Fujitsu-Siemens и т. п.).
Аппаратная мультизадачность
В процессорах начиная с 80286 был введен механизм аппаратного переключения контекстов задач, но практически не использовался разработчиками по причине неуклюжей реализации, и поэтому из x86-64 был выпилен[4][5]. Система команд
Система команд x86 начиная с 8086 значительных изменений не претерпела, она просто все расширяется и расширяется добавлением новых костылей, постепенно превращаясь в один большой фракталоподобный костыль. Работа с 8-, 16-, 32- и 64-битными операндами и новые режимы адресации вводятся путем добавления префиксов или атрибутов сегмента, а число самих режимов скоро перевалит за 9000.
Длинный режим
Упомянутое выше архитектурное расширение до 64 бит представляет собой еще один режим работы, несовместимый с реальным режимом, но немного совместимый с защищенным. В этом режиме доступны шестнадцать 64-битных регистров общего назначения и Over 9000 адресного пространства.
Примечателен тем, что разработчиком этой архитектуры была AMD, в то время как Intel [автоцензор3.14] переделала технологию[6] (кое-что не доделав), изменив неполиткорректное вражеское название AMD64 на нейтральное EM64T. Сей факт несколько нетипичен, так как крайне редко Intel что-то так дословно копипастила у AMD, обычно все было наоборот. [автоцензор3.14], кстати, довольно коряво, и первые 64-битные зионы, например, бодро рапортовали о 40 битах физического адреса, имея всего 36. Однако ты, Анон, должен помнить — никто просто так ничего без последствий не [автоцензор3.14]. Вся загогулина есть в том, что существует соглашение о перекрёстном лицензировании технологий, по условиям которого эти две конторки обязаны(!!!) делиться подобными технологиями. Отак-то!
Несмотря на свою молодость, даже этот режим уже пару раз перепилили по всё той же набившей оскомину причине: совместимость с быдлокодом. Дело в том, что так увлекшись избавлением от атавизма сегментной адресации, инженегры AMD заодно выпилили две древнючие команды: LAHF и SAHF, использовавшиеся в основном для анализа флагов состояния не менее древнючего куска кремния по имени 8087(fstsw ax+sahf). Эти команды существовали со времён дедушки 8086, и занимались пересылкой нижнего байта регистра флагов в кумулятор и обратно. Начиная с Пня-2, эту команду перестали указывать в документации, тщетно надеясь, что быдло-погромисты забудут этот уродливый костыль, и будут пользоваться богоугодными pushfd+pop reg/push reg+popfd, работающими на новых процах с нулевым начислением обращений в память благодаря хитрожопой штуке «очередь записи», но не тут-то было. Оборзевшие от безнаказанности x86-фаги продолжали совать эти команды везде, до куда добирались, в частности — в софт для виртуализации. Ну а дальше приключилась стандартная история для х86-архитектуры: вместо того, чтобы показать быдлокодерам писю, в архитектуру вставили очередной костыль. Да, мой юный друг, на ранних Athlon 64 и соответствующих им интелах невозможно было запустить 64-битного гостя даже если хост был 64-битный. Такие дела.
VEX префикс
Революционная идея — выпилить старые костыли методом запила новых — пришла на ум инженерам Intel после очередного сеанса раскуривания какого-то нового типа веществ. Однажды, когда в очередной раз стало подходить к концу пространство опкодов, интелевцы задумались: до коих пор, мать твою, нам городить мелкие костыли, не пора ли запилить такой, чтобы хватило лет этак на десяток? И им пришла в голову гениальная мысль, суть которой в следующем. Давно известно, что размер опкода в x86 — всего один байт. Ну так вот исторически сложилось. И возможных инструкций можно закодировать всего 256. Поначалу (8086) этого хватало даже с лихвой: можно было, не боясь исчерпать опкодовое пространство, для самых частоиспользуемых операций кодировать индекс регистра непосредственно в коде инструкции: ведь команда занимает всего один байт, а память в те времена была по цене золота. Также среди этих кодов существовали так называемые префиксы, сами не кодирующие никакой операции, но немного (или много) меняющие смысл следующего опкода, грубо говоря, рассматривались с ним как единый целый опкод. И таким, и только таким способом можно было расширять однобайтное пространство. О первом глобальном расширении задумались при разработке 80286: тогда в префикс превратили команду «POP CS» за номером 15, доставив баттхёрта некоторым авторам вирусов, активно её использовавшим. Пространство расширилось еще на 255 кодов. [автоцензор3.14] же начался с эпохи великого и ужасного SSE, когда новые команды стали расти как грибы после дождя. В дело пошло переопределение префиксов REPNE/REPE и OPSIZE. Появились трехбайтовые команды с длинной цепочкой префиксов (и постфиксов). Когда амдшники создавали свой AMD64, они в порыве энтузиазма расправились с однобайтовыми INC/DEC, превратив их в префикс REX. Код стал состоять из префикс-байтов чуть менее, чем наполовину. И вот, свершилось. Вместо этой цепочки переопределенных однобайтных префиксов решили сделать один многобайтный универсальный. В общем — разумное решение. Но! Где взять для него опкод? Ведь однобайтовое пространство уже давно занято. Но ведь гений костылестроения Intel не знает границ! Решили просто: взяли две, уже не совсем нужные в 10-х годах XXI века команды LES и LDS, вспомнив, что они, помимо всего прочего имеют еще и байт-описатель адресации и не могут использовать регистровый операнд. Дырка найдена! Теперь берём команду LES или LDS, кодируем регистровый операнд, а остальные биты — в нашем распоряжении. Выпиливаем все лишние префиксы и ставим вместо них VEX. Можно даже уподобиться RISC'ам и закодировать трех-, четырёх-, и пятиоперандные команды, битов в префиксе хватит (он бывает двух- и трех-байтовым). Правда, некоторые биты приходится делать инверсными, ибо иначе получится LDS или LES, но разве это костыль против такой революции?
_________________ I would tell you a joke about UDP, but you probably wouldn't get it.
Member
Статус: Не в сети Регистрация: 30.04.2009 Откуда: эта шляпа?
IliaV писал(а):
Пора вспоминать Си, ассемблер, оптимизацией заняться, параллельные вычисления и прочее.
А кто будет писать на C, асме и оптимизировать? Может быть вы? Со всеми этими штуками проект пишется ооочень долго. Раз в пять дольше, чем если писать более высокоуровневыми средствами. Ждать выхода каждой более-менее крупной проги 10 лет никто не будет, правильно же? И платить программистам эти 10 лет тоже никто не будет, потому что как-то не выгодно получается
Member
Статус: Не в сети Регистрация: 20.03.2011 Откуда: Москва
VladiT писал(а):
Если что, изначально компьютер совсем не для игр был придуман, но мысль что он ничем им ни помог в развити это мда...
вы хоть пробовали что-нибудь на QCL писать? Да, некоторые задачи можно на них быстрее решать, но вот крузис на нем быстрее не пойдет.
Цитата:
А кто будет писать на C, асме и оптимизировать? Может быть вы? Со всеми этими штуками проект пишется ооочень долго. Раз в пять дольше, чем если писать более высокоуровневыми средствами. Ждать выхода каждой более-менее крупной проги 10 лет никто не будет, правильно же? И платить программистам эти 10 лет тоже никто не будет, потому что как-то не выгодно получается
так шо, оказывается, программистам еще и платить надо?
_________________ I would tell you a joke about UDP, but you probably wouldn't get it.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения