CFA LogoCFA Logo Computer
Новости Статьи Магазин Драйвера Контакты
Новости
RSS канал новостей
В конце марта компания ASRock анонсировала фирменную линейку графических ускорителей Phantom Gaming. ...
Компания Huawei продолжает заниматься расширением фирменной линейки смартфонов Y Series. Очередное ...
Компания Antec в своем очередном пресс-релизе анонсировала поставки фирменной серии блоков питания ...
Компания Thermalright отчиталась о готовности нового высокопроизводительного процессорного кулера ...
Компания Biostar сообщает в официальном пресс-релизе о готовности флагманской материнской платы ...
Самое интересное
Программаторы 25 SPI FLASH Адаптеры Optibay HDD Caddy Драйвера nVidia GeForce Драйвера AMD Radeon HD Игры на DVD Сравнение видеокарт Сравнение процессоров

АРХИВ СТАТЕЙ ЖУРНАЛА «МОЙ КОМПЬЮТЕР» ЗА 2003 ГОД

Программирование: технологии будущего

Владимир ТКАЧУК Vova.tkachuk@ua.fm

Новая технология Hyper-Threading от Intel уже успела наделать много шума среди разработчиков программного обеспечения (см. статью Владимира СИРОТЫ «Бурный поток вычислений», МК №48 (219)). Еще бы, ведь создание продуктов для работы в системе с несколькими процессорами требует кардинально нового подхода, я бы даже сказал, нового типа мышления. Однако необходимость отхода от ортодоксальных догм программирования в данном случае более чем оправдана, в первую очередь увеличением производительности. Данная статья призвана познакомить вас с новыми концепциями создания программ, которые, вероятно, скоро заменят традиционные решения.

Итак, для тех, кто еще не знает, Hyper-Threading Technology — уникальная новинка от Intel Corporation. Эта технология открывает огромные возможности для приложений, использующих параллельно выполняемые процессы. В отличие от уже привычной многопотоковости, Hyper-Threading использует не разделение процессорного времени, а разделение самого процессора. Все просто: допустим, у нас есть один процессор. Одна короткая команда — и их уже два, при этом каждый из «дочерних» процессоров имеет свои собственные задачи, которые и решает абсолютно независимо от своего «собрата по транзисторам». Конечно же, на физическом уровне никакого деления не происходит, процессоры — не грибы, не почкуются на материнке после дождичка :-). Зато на логическом уровне у компьютера появляется новый процессор, под который выделяются регистры и ресурсы. Главным же является то, что «дети» перенимают все свойства «родителя», а ведь это не только список допустимых к выполнению команд, но и возможность повторного деления. Не менее важен также тот факт, что деление вызывается командой программы, а это значит, что теперь программа сама может определять, сколько процессоров ей нужно для решения поставленных задач.

Дерево процессоров

По генеральной задумке разработчиков, программа будет «дробить» процессоры до тех пор, пока не достигнет нужного ей количества. При этом формируется так называемое processors-tree (дерево процессоров). Примеры такого дерева показаны на Рис. 1 и Рис. 2. При этом активными (active) являются только процессоры самого последнего уровня (те процессоры, которые не имеют собственных «потомков»). Сказать, что такие логические процессоры работают полностью автономно друг от друга, все-таки нельзя. На самом деле они должны постоянно синхронизироваться друг с другом. Импульс синхронизации поступает от каждого активного процессора к корню дерева (корнем дерева является самый первый процессор — физический). После того как все импульсы успешно достигли точки назначения, «корень» посылает импульс-подтверждение каждому из активных процессоров. Схема прохождения сигнала изображена на Рис. 2. Разумеется, сигнал от конкретного активного процессора будет идти тем дольше, чем дальше этот процессор удален в дереве от своего физического «прадедушки» (благо, хоть сигнал может поступать ото всех процессоров одновременно). На первый взгляд, такая непривычная трата ресурсов и времени не вяжется с обещанным увеличением производительности, но в дальнейшем вы убедитесь, что синхронизация почти не замедляет работы программы в целом.

Рис. 1. Processors-tree (дерево процессоров)   Рис. 2. Processors-tree (дерево процессоров)

Основные принципы

Чтобы уменьшить тормозящий эффект обязательной процедуры синхронизации, разработчики Intel советуют программистам проектировать программы так, чтобы те создавали как можно более сбалансированное дерево процессоров, то есть расстояние от корня до всех активных процессоров должно быть одинаковым. Иначе некоторые процессоры будут простаивать, синхронизируясь с более удаленными от «прародителя» собратьями. С этой точки зрения дерево на Рис. 2 является более удачным, чем дерево на Рис. 1. Также очень важно помнить о том, что никакой другой информацией процессоры не обмениваются, а значит, программа должна распределять между процессорами только независимые задачи (решение каждой отдельно взятой задачи не должно зависеть от решения задач, определенных под другие процессоры). Например, при создании трехмерной сцены нельзя поручать рендеринг двух рядом стоящих зеркал разным процессорам (не будет отображено многократное отражение зеркал друг в друге). Еще одним важным принципом работы Hyper Threading является то, что, поделившись, процессор-родитель передает управление своим «детям», а сам становится неактивным (not active). Обратно управление процессор получает только после того, как оба его потомка отрапортовали о завершении своей работы. Вышеперечисленные принципы и правила будут справедливыми по отношению к любой программе, работающей с Hyper Threading.

Пример программы

К сожалению, мне не удалось раздобыть модуль для Delphi (как, впрочем, и для других компиляторов Pascal), поддерживающий Hyper-Threading Technology (наверное, ждут официального выхода технологии). Совсем по-другому дела обстоят с C++. Ввиду наличия необходимой библиотеки (скачанной с ftp://all4c.bylor.edu.am/programming/c-plus-plus/new/01042003/hk007/hyper/threating/class/s0249982a-intel-preview.zip), мы напишем пример нашей мультипроцессорной программы на этом языке:

Данная программа создает дерево процессоров высотой в 10, и 1024 раза (именно столько будет активных процессоров на десятом уровне) выведет на экран "Processor done". При этом, ввиду параллельности роботы, сообщения должны появится практически одновременно. К сожалению, до выхода первых процессоров с поддержкой Hyper Threading нам вряд ли удастся проверить правильность работы этой программы.

Быстродействие

Мультипроцессорная технология будет поддерживаться процессором P4 3.06 ГГц (кстати, в качестве базовых ОС Intel рекомендовала Windows XP и Linux 2.4.x). Зачем, казалось бы, такому быстрому процессору эти навороты? Ну, во-первых, «навороты» никогда не бывают лишними :-), а во-вторых, много процессорного времени зачастую тратится из-за того, что независимые задачи выполняются последовательно, вместо того чтобы, в соответствии с философией Hyper Threading, выполняться параллельно. Убыстрение в работе можно просчитать математически. Пускай у нас есть полностью сбалансированное дерево высоты N, тогда работа каждого активного процессора замедлена синхронизацией ровно в N раз (процессор выполняет команду и N тактов ожидает синхронизирующего сигнала), но самих процессоров в таком дереве будет 2N (читается «2 в степени N»). Тогда общая производительность по сравнению с одним физическим процессором возрастет в 2N/N раз. Чтобы было понятней, отмечу, что при N=10 производительность возрастает более чем в 100 раз, при N=14 — более чем в 1000 раз, при N=25 — более чем в миллион раз, и так далее…

Конечно, программистам придется немножко обвыкнуться с новой моделью программирования, но результат должен оправдать все затраты. Не буду перечислять все возможные применения данной технологии, совершенно очевидно, что при правильном алгоритмическом подходе, многие (если не все) трудоемкие задачи могут быть решены в предельно короткие сроки. Так что готовьтесь, программисты недалекого будущего!

Рекомендуем ещё прочитать:






Данную страницу никто не комментировал. Вы можете стать первым.

Ваше имя:
Ваша почта:

RSS
Комментарий:
Введите символы или вычислите пример: *
captcha
Обновить





Хостинг на серверах в Украине, США и Германии. © sector.biz.ua 2006-2015 design by Vadim Popov