Компьютер сноба-потребителя за 2013 год, часть третья.
реклама
Компьютер сноба-потребителя за 2013 год
Часть 3.
(продолжение)
Примеры исключительной доблести.
Конь обозного возчика, состоявшего при императорском
обозном эскадроне, был убит. "Бедный мой Сивка, пришел
тебе конец!" - горько причитал солдат. Он выпряг
павшего коня и оттащил тяжелую большую повозку
в укрытие. Потом он вернулся за упряжью убитого коня.
Я не хотел бросать упряжи - ведь она почти новая. Жаль,
думаю, пригодится", - оправдывался доблестный солдат.
Немного времени спустя ротмистр украсил его грудь
серебряной медалью "За храбрость"!
агит-плакат "ПРИМЕРЫ ИСКЛЮЧИТЕЛЬНОЙ ДОБЛЕСТИ".
Продолжим говорить о тишине. Не о глухоте, а о низком энергопотреблении, которое и приводит к тишине. А также продолжим говорить о хороших потоках воздуха в корпусе, которые позволяют делать вид, что энергия не потребляется.
Как вы должно быть уже знаете, платформу Интел у меня к Пятнице 13 декабря 13 года постигла полная неработоспособность. Пока решается вопрос с починкой платформы Интел, которая внезапно откинула копыта (я не знаю в чем причина, комп выключили и больше он не включился; теоретически проблема может быть в том, что из платы выдернули кабель питания не выключив дежурное питание, но точнее установить причину повреждения нельзя), мы поговорим на любимую тему - как АМД и Интел улучшают процессоры.
А также мы продемонстрируем, что система охлаждения в предыдущей части из жалкого листка бумаги формата A5 это ничто, по сравнению с могучей системой охлаждения которая может быть построена из огромных газетных листов. Мощный бумажный кулер теперь полностью управляет потоками воздуха, охлаждая разгоряченный процессор АМД FX4100. С этого бумажного кулера и начнем, т.е. продолжим.
Содержание
1. Система охлаждения АМД из бумаги, часть 2.
2. Как АМД и Интел улучшают процессоры, часть 2.
Система охлаждения АМД из бумаги, часть 2.
Все снимки предыдущей части, как вы поняли, были сделаны чудо нано-камерой, которая обеспечивает непревзойденные качества изображения, такие как четкость и цветопередача. Добавим новые нано-снимки и покажем как с помощью старой газеты "Аргументы и Факты", ножниц и китайских хомутиков построить систему охлаждения корпуса.
Самое интересное, что эта система практически применяется на моем компьютере и позволяет не только задействовать режим полного включения всех ядер в BIOS, режим 50% ядер в Windows и на частотах и напряжении 206х17.5, 1.238В при основных нагрузках снизить предел температуры до 58 градусов (при самых тяжелых до 63 градусов) при 10% вращения вентиляторов. В общем в результате в закрытом корпусе температура процессора упала на 5-10 градусов.
Но ничего не дается бесплатно. Температура датчика системной платы стала уверенно показывать и 45 градусов, и 55 градусов. Возможно это единственная в мире материнская плата, которая в обычном режиме работы разогревается до 55 градусов. В общем температура материнской платы приблиилась к температуре процессора.
(на снимке 43 градуса матплата, 46 градусов процессор)
Система охлаждения работает таким образом: свежий воздух задувается в нижнее отверстие малого вентилятора на задней стенке, проходит над большим газетным листом, вдувается вентилятором процессора в его радиатор и попадает под газетный лист; там нагретый воздух скапливается, нагревает материнскую плату и постепенно вытягивается вентилятором блока питания назад, через верхнее отверстие большого вентилятора на задней стенке.
Изготовить такую систему воздуховодов из газеты для штатного кулера АМД FX-4100, к которому приделан прямоугольный вентилятор от блока питания, очень просто.
На газете отмечаем контур вентилятора процессора, делаем ножницами прямоугольную дыру меньшего размера
по углам делаем надрезы так, чтобы малая дыра смогла налезть на большой фланец вентилятора.
Добавляем второй лист газеты.
Теперь вентилятор процессора берет воздух сверху газеты и задувает его под низ.
При разметке отверстия газету располагаем так, чтобы она не давала блоку питания закачивать воздух сверху газеты, только из под ее низа.
Изготовление системы воздуховодов занимает 5-10 минут. Теперь холодный воздух ощутимо тянется в задувное отверстие и перегретым выбрасывается из блока питания.
Добавим третий лист. Я рад, наконец-то все заработало.
Большие возможности в плане создания конструкций, где части "соединены веревочками", открывают китайские пластиковые нано-хомутики, которыми скручиваются провода, пакетики и т.п. В отличие от веревочек или гибких проводочков эти хомутики обладают жесткостью достаточной чтобы не только тянуть, но и толкать.
Данные крепления позволяют создавать объемные ажурные конструкции: крепить вентилятор перпендикулярно плате видеокарты или на радиатор процессора, если крепление для такого вентилятора не предусмотрено. Альтернатива этим хомутикам одножильный провод в изоляции.
Как АМД и Интел улучшают процессоры, часть 2.
1. Помимо 286 давайте рассмотрим другой экземляр компьютеросторения - P4. Все сразу в крик - "идиоты аутсайд", "глупая грелка" и т.п.
На деле в этом процессоре есть интересный механизм в виде подсказки для статического предсказания ветвлений. Как вы понимаете, этот механизм интересный, но он работает неправильно. Почему? Потому что если бы мы были "T.-Y. Yeh and Y. N. Patt", мы бы тоже изобретали улучшатель для динамического предсказателя, потому что больше нам все равно было бы нечем заняться.
А вот с точки зрения программы, динамические предсказания нам вообще говоря не всегда и нужны, потому что программист очень часто знает куда точно будет ветвиться программа в большом количестве случаев. Почему? Есть интересное такое наблюдение, математическое, хорошая функция очень хорошо ведет себя внутри интервала и создает кучу проблем на его границах. Чем больше интервал, тем меньше влияние границ.
В переводе на программу, все сложности приводящие к переходам возникают тогда, когда программист вынужден "обрабатывать границы". Основной поток программы как бы никогда не затрагивает границы и никаких неожиданных переходов в этом случае не выполняется, но к невероятному моему изумлению процессоры Интел и АМД не позволяют описать в программе такой поток. Эти процессоры что только не делают во время выполнения чтобы выполнить такой основной поток, который хорошо известен уже на этапе компиляции - то самообучаются, то заводят кэши переходов и т.д. Это горе от ума.
Ясно, что язык С в 70 годы не мог предусмотреть предсказатель в процессоре, но более новые языки имеют возможность указать направление предвыборки на условных переходах. Это направление указывается программистом не как "подсказка для самообучения", а как прямая команда "куда всегда делать предвыборку". Программист сам гарантирует малое количество промахов на всем наборе тестовых данных.
Процессоры P4 рассматривают префиксы-подсказки как "taken(переход)/not_taken(пропуск)". Программисту удобнее использовать качественные описатели безусловной предвыборки "often/rare".
Когда эти префиксы применяются? Очень часто. Я на самом деле даже не был готов сразу ответить в каких типовых случаях программисту будет точно неизвестно куда надо делать переход, впрочем, один случай был ясен - это переход по результату генератора случайных чисел
if(rand()&1)
На практике переход по абсолютно случайному числу применяется не так уж часто, давайте лучше рассмотрим псевдокод типичных применений rare/often
resfn(p1,p2,p3,p4){
//1)блок проверки параметров: параметры функции
//параметры функции обычно правильные
[rare]::if (!p1) throw;
[rare]::if (!p2) throw;
[rare]::if (p3<p4) throw;
//2)блок проверки параметров: индекс массива
//индекс обычно ожидается внутри массива
[rare]::if( (idx < base )||( idx >= top) )throw;
//3)обычный цикл
//в данном цикле обычно ожидается один или более повторов
[often]::for (; *p1; --(*p1)){}
//4)обычный цикл
//только одна точка обычно ожидается вне достаточно большого окна после начала вывода линии
[often]::for (;;){ [rare]::if (point_out_of_window) break; }
}
//5)
//класс h_p32h_
//объекты которого хранят (h) монопольное владение динамической памятью (h), адресуемой 32 битным указателем (p32)
template <class T>
struct h_p32h_{
p32h_<T> ptr;
//подразумеваем "двухстадийные конструкторы",
//исключения второй стадии генерируются из кода {} как из обычных функций
//(деструктор объекта вызывается)
//
//исключения первой стадии "подготовки объекта к деструкции" генерируются
//при инцициализации каждого поля ("после каждой запятой"), при этом частично
//созданные поля деструктируются автоматически (деструктор объекта не вызывается)
//
nothrow h_p32h_():ptr(0){}
nothrow h_p32h_(const p32h_<T> p_data):ptr(p_data){}
//копирование запрещено
...
//деструктор такого объекта вызывает функцию delete для своих данных очень часто,
//деструкция всегда связана с освобождением ресурса
//подразумеваем стек исключений, деструкторы могут бросать исключения
~h_p32h_() throw(ex_alloc) { [often]::if(ptr){ delete_h ptr; ptr=0; } }
};
//класс w_p32h_, RAII wrapper (w)
//объекты которого монопольно владеют динамической памятью (h), адресуемой 32 битным указателем (p32)
//new возвращает такой wrapper
//подразумеваем семантику перемещения (operator move <-<)
template <class T>
struct w_p32h_{
p32h_<T> ptr;
nothrow w_p32h_():ptr(0){}
nothrow w_p32h_(const p32h_<T> p_data):ptr(p_data){}
//
nothrow w_p32h_(const moveable w_p32h_& obj):ptr(<-<obj.ptr){}
...
//деструктор такого объекта вызывает функцию delete для своих данных довольно редко,
//обычно деструкция связана только с передачей владения другому указателю или с переходом указателя по стекам функций
~w_p32h_() throw(ex_alloc) { [rare]::if(ptr){ delete_h ptr; ptr=0; } }
};
//класс ha_p32h_
//объекты которого хранят (h) во фреймах стека_A (a) владение динамической памятью (h), адресуемой 32 битным указателем (p32)
//класс преимущественно однонитевого применения, но позволяет несколько нитей, подключая новые нити через IPC
template<class T>
struct ha_p32h_{
struct Th_ctl{
h_p32h_<T> ptr;
ureg32threads;
};
struct Tth_ctl{
p32h_<Th_ctl> p_h_ctl;
ureg32 counter;
};
p32th_<Tth_ctl> p_ctl;
//
nothrow ha_p32h_():p_ctl(0){}
ha_p32h_(const moveable w_p32h_<T>& data) throw(ex_alloc): p_ctl(0){
[often]::if( p_data ){
p_ctl = new_th_ Tth_ctl(0,1);
p_ctl->p_h_ctl = new_h_ Th_ctl(<-<p_data,1);
}}
//копирование разрешено
nothrow ha_p32h_(const ha_p32h_& obj):p_ctl(obj.p_ctl){ [often]::if(p_ctl)++p_ctl->counter; }
//for IPC
ha_p32h_(const p32h_<Th_ctl> common_p_h_ctl) throw(ex_alloc): p_ctl(0){
[often]::if( common_p_h_ctl ){
p_ctl = new_th_ Tth_ctl(common_p_h_ctl,1);
atom(++p_ctl->p_h_ctl->threads);
}}
...
//
//деструктор такого объекта вызывает функцию delete для своих данных очень редко,
//обычно деструкция связана только с передачей владения другому указателю или с переходом указателя по стекам функций
~ha_p32h_() throw(ex_alloc){
[often]::if (p_ctl){
[rare]::if (!--p_ctl->counter) {
[often]::if (p_ctl->p_h_ctl){
[rare]::if (!atom(--p_ctl->p_h_ctl->threads)){
delete_h_ p_ctl->p_h_ctl; p_ctl->p_h_ctl=0;
}}
delete_th_ p_ctl; p_ctl=0;
}}}
//
};
//и т.д.
Как вы видите в программе на самом деле немало рельно неслучайных ветвлений. Нет, я не отрицаю, случайные ветвления есть и при случайных закономерностях в тестовых данных предсказать ветвление можно, но на наборе действительно случайных данных выборку можно делать бросая монетку и в 50% случаев вы угадаете обойдясь вообще без аппаратных ресурсов. Кстати, чтобы не загружать предсказатели гарантированнно случаными переходами в случае набора гарантированнно случайных данных переход можно всегда пропускать (rare), это лучше для локальности программы.
typedef [rare]:: rand;
[rand]::if (rand()&1)
Каждая неправильно сделанная предвыборка это потери энергии. Если вы угадываете только в 20% случаев длинных очередей, то 80% работы у вас улетит в радиатор, в режиме экономии энергии процессор не должен делать вообще никаких спекулятивных предвыборок, жертвуя скоростью или в крайнем случае, делать только указанные программистом предвыборки.
Продолжение следует...
Обсуждение этой заметки в форуме.
Создано: 18.12.13
Последний раз отредактировано: 18.12.13
реклама
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Сейчас обсуждают