Перспективы развития центральных процессоров

    Семьдесят лет назад, в 1941 году, был создан первый программируемый компьютер. С тех пор утекло немало воды, и сейчас компьютеры окружают нас повсюду. Многие аспекты устройства компьютеров сильно эволюционировали, многие, напротив, ничуть не изменились по сути. В частности, не изменился и, вероятно, никогда не изменится сам принцип работы центральных процессоров — алгоритмическая модель. Хорошо понятны физические ограничения этой модели, и соответственно, отчётливо виден предел развития центральных процессоров в смысле их быстродействия. Технологически до этого потолка ещё довольно далеко: несколько десятилетий развития и несколько порядков быстродействия. Но это не должно помешать нам всерьёз подумать, какими же будут процессоры на пороге предела их скоростного развития.

    Делать прогнозы в этой области позволяет именно то, что возможные пути развития жёстко диктуются фундаментальными физическими ограничениями: конечностью скорости света, законами термодинамики и ограничением на минимальный размер элементов — они не могут быть меньше молекулы.

    Часть 1. Принципы устройства вычислительных машин сегодня и в будущем

    В первые десятилетия своего существования компьютеры использовались только для вычислений. Исходный смысл слова «компьютер» переводится на русский как «автоматизированная вычислительная машина» (АВМ). Чуть позже компьютеры стали также применять в качестве управляющих элементов других устройств, и слово «компьютер» обрело своё современное значение: «исполняющий программы аппарат общего назначения». Сегодня АВМ являются узкоспециальными (используемыми в вычислительных центрах) устройствами, а компьютер как управляющий элемент, напротив, используется практически во всех автоматизированных устройствах — от микроволновок до роботизированных производственных линий и от мобильных телефонов до космических кораблей. В частности, именно управляющую роль он играет в ноутбуках, настольных рабочих станциях и игровых приставках — устройствах, называемых бытовыми компьютерами.

    Существует несколько существенно различных моделей вычислений, так что АВМ будущего, возможно, будут устроены совершенно непредвиденным образом. Однако компьютер как управляющее устройство в любом случае должен содержать исполнительный блок (центральный процессор), и устройство этого блока жёстко зафиксировано его функциями: он должен уметь
    – выдавать последовательные инструкции другим устройствам и
    – совершать выбор дальнейшей программы действий в зависимости от сложившихся условий.
    Эти два требования автоматически предполагают модель устройства, называемую «relaxed sequential execution» по-английски или «алгоритмической моделью» в русскоязычной традиции. Эта модель, в отличие от многих других, не имеет квантового аналога, так как квантовые вычисления принципиально обратимы, а совершение выбора принципиально необратимо. Именно об этой модели пойдёт речь в следующих двух частях статьи.

    Для полноты рассказа приведём список всех известных на данных момент масштабируемых аппаратных моделей вычислений:
    – алгоритмическая модель, то есть, (условно-)пошаговое выполнение инструкций («условно» означает, что допускается параллельное выполнение независимых инструкций);
    – потоковые векторные вычисления и их естественное обобщение — квантовые конвейеры;
    – клеточные/сетевые автоматы и их естественное обобщение — квантовые автоматы.

    На данный момент на практике за исключением модели последовательного выполнения используются лишь потоковые векторные вычисления: на бытовых компьютерах в специализированных сопроцессорах для трёхмерной графики (GPU), а также в их аналогах повышенной мощности (GPGPU) на вычислительных станциях для численных симуляций и обработки больших массивов данных. Центральный процессор делегирует некоторые специфические задачи потоковому процессору, однако управляющие функции в полной мере выполняет только он сам. С развитием квантовых вычислений это положение вещей вряд ли изменится: квантовые конвейеры и автоматы будут лишь дополнениями центрального процессора, но не его заменой.

    Часть 2. Элементная база процессоров сегодня и в будущем

    На элементарном уровне процессоры состоят из двух типов элементов: переключателей и соединяющих их дорожек. Задача дорожек в том, чтобы переносить сигнал, а задача переключателей в том, чтобы этот сигнал трансформировать. Существует много разных реализаций переключателей и дорожек.

    В окружающей нас цифровой электронике в качестве переключателей используются транзисторы, а дорожки делаются из проводников.

    § 2.1. Передача сигнала
    В двоичной цифровой электронике для кодирования сигнала используются напряжение. Дорожка несёт сигнал «ноль», если на неё подан потенциал (U0 ± ε), а если на неё подан потенциал (U1 ± ε), то она несёт сигнал «единица». Базовые уровни U0 и U1 выбираются так, чтобы (U0 + ε) < (U1 — ε), где ε — неизбежная по техническим причинам погрешность. Переход из одного состояния в другое — это остановка или, наоборот, разгон огромного количества электронов в проводнике. Оба эти процесса занимают довольно много времени и неизбежно связаны с большими энергетическими потерями.

    Существуют альтернативы цифровой электронике, лишённые этого недостатка: по дорожкам можно пускать постоянный поток электронов (т.н. спинтроника) или фотонов (т.н. фотонная логика), а сигнал кодировать при помощи поляризации этого потока. Как электроны, так и фотоны, движущиеся по одномерному волноводу, могут пребывать ровно в двух ортогональных состояниях поляризации, одно из которых объявляется нулём, а другое единицей. Что лучше — фотонная логика или спинтроника, пока непонятно:
    – в обоих случаях поток частиц течёт с неизбежными тепловыми потерями, однако эти потери могут быть сколь угодно малы;
    – в обоих случаях скорость потока ниже скорости света, однако может быть сколь угодно близка к ней;
    – в обоих случаях требуются сложные технические приёмы, чтобы наводки, тепловой шум и фоновое излучение (пролетающие мимо случайные частицы) не искажали сигнал.
    Иными словами, известные физические ограничения обеих технологий одинаковы. По всей видимости, наилучшие результаты будут давать комбинированные технологии: транспортировка фотонов выигрывает на длинных дистанциях и проигрывает на коротких; при этом уже разработаны рабочие прототипы переходников (в обе стороны) между поляризацией фотонного и электронного потока. Идеальным материалом для спинтронных дорожек является графен: он обеспечивает превосходную скорость при очень низких тепловых потерях. Кроме того, уже существуют рабочие прототипы следующих элементов:
    – дорожек, надёжно сохраняющих поляризацию тока на коротких и средних дистанциях;
    – ячеек памяти, способных сохранить поляризацию и затем формировать поток сохранённой поляризации.

    Информация по графеновым дорожкам:
    2010-06: Mass fabrication of graphene nanowires. Georgia Institute of Technology.
    2011-01: Researchers managed to generate a spin current in Graphene. City University of Hong Kong.
    2011-02: Creating a pure spin current in graphene. City University of Hong Kong.
    2011-02: Mass production-ready bottom-up synthesis of soluble defect-free graphene nanoribbons. Max Planck Institute for Polymer Research in Mainz.

    § 2.2. Переключатели
    Применяемый в цифровой электронике транзистор представляет собой устройство с тремя контактами, работающее следующим образом:
    – если на средний контакт подаётся высокий потенциал, то крайние контакты соединены, переключатель находится в положении «проводник»;
    – если на средний подаётся низкий потенциал, то крайние контакты разомкнуты, переключатель находится в положении «изолятор».
    На данный момент успешно созданы и протестированы транзисторы, состоящие из одной молекулы. Их скорость работы и компактность практически достигают теоретического предела, однако пока не существует технологий, которые бы позволяли их массово производить и использовать. Вся современная цифровая электроника изготавливается на основе металл-оксидных полевых транзисторов (MOSFET). Уже несколько десятилетий производители микросхем лишь уменьшают линейные размеры и энергопотребление таких транзисторов, однако уже были проведены промышленные испытания некоторых типов многостоковых и беспереходных транзисторов (BDT, JNT). Такие транзисторы смогут обеспечить повышение производительности в 4–6 раз. Этот переход не потребует сильных изменений технологического процесса и ожидается в ближайшие 5–10 лет.

    По фундаментальным термодинамическим причинам переключатели транзисторного типа не могут работать эффективно: эффективный должен быть консервативным и обратимым как логический элемент. Этим условиям удовлетворяет симметрический переключатель, называемый также вентилем Фредкина. Это устройство с двумя входами In1, In2, двумя выходами Out1, Out2 и сквозной дорожкой С (Сontrol). Если C находится в положении «0», входы и выходы соединены прямо: In1 с Out1, In2 с Out2; если С находится в положении «1», входы и выходы соединены крест-накрест: In1 с Out2, In2 с Out1. Скорее всего, и спиновые симметрические переключатели удастся реализовать в одномолекулярном варианте, сочетающем максимальные компактность, скорость работы и эффективность.

    Как из транзисторов, так и из симметрических переключателей можно изготовить логические схемы любой сложности, однако симметрические переключатели гораздо более экономны. Например, для клонирования сигнала и логических операций «не», «и», «или», «и не» и «следует» требуется всего один симметрический переключатель, «исключающее или», «не или» и «не и» требуют двух переключателей. Для реализации этих операций на транзисторах требуется от 4 до 6 транзисторов:


    Быстрый одноразрядный сумматор (half adder) использует четыре симметрических переключателя (вместо 12 транзисторов) и обеспечивает в идеале существенно большую скорость работы, чем транзисторный аналог: время его работы составляет всего 2τ, где τ — время прохождения сигналом одного переключателя и одной дорожки. На более сложных схемах компактность и выигрыш в скорости симметрических переключателей проявляются ещё более явно. Звено многоразрядного сумматора (full adder) состоит из десятков транзисторов, в то время как реализация на симметрических переключателях требует от 4 (самый компактный вариант) до 7 (самый быстрый вариант) переключателей:
     

    Уникальная особенность симметрических переключателей заключается в том, что с их помощью достигается максимальная компактность и скорость работы мультиплексоров и демультиплексоров, являющихся очень распространёнными составными элементами процессоров. К сожалению, симметрические переключатели становятся привлекательными лишь при использовании спинтроники или фотонной логики. Электроника обречена использовать обычные транзисторы.

    * В параграфе использованы материалы и изображения из статей Bruce, Thornton et al., “Efficient Adder Circuits Based on a Conservative Reversible Logic” (Mississippi State University, Proc. IEEE Symposium on VLSI, 2002); Rentergem, de Vos, “Optimal Design of A Reversible Full Adder” (Universiteit Gent, International Journal of Unconventional Computing, 2005), а также материалы частной переписки. Изображение одномолекулярного транзистора взято из соответствующего пресс-релиза на сайте Йельского университета.

    § 2.3. Заключение
    Итак, в пределе центральный процессор будущего, скорее всего, будет представлять из себя огромную паутину, где нити сделаны из графеновой ленты, проводящей поляризованный поток электронов, а в узлах находятся миниатюрные симметрические переключатели. На длинных дистанциях сигнал будет перекодироваться в свет, доставляться фотонами и перекодироваться обратно на месте назначения. Ряд специальных задач (в частности, поиск и сортировка) будут выполняться квантовыми конвейерами и автоматами.

    Часть 3. Архитектура центральных процессоров сегодня и в будущем

    Все распространённые сегодня центральные процессоры представляют из себя регистровые машины фон-неймановской архитектуры:
    – процессор содержит содержит определённое количество (например, 16) нумерованных ячеек памяти (например, по 64 бита каждая), которые называются операционными регистрами;
    – работа процессора состоит в том, чтобы перерабатывать содержимое регистров в соответствии с программой;
    – программа представляет из себя последовательность инструкций, например:
      – взять значения из регистров № 2 и № 5 и записать их сумму в регистр № 8;
      – считать в регистр № 4 значение из ячейки внешней памяти с адресом из регистра № 6;
      – отослать число из регистра № 12 внешнему устройству NNN;
    – данные и сами программы хранятся в оперативной памяти, при этом инструкции программ кодируются числами и записываются в последовательные ячейки памяти;
    – номер ячейки, инструкция из которой выполняется в данный момент, хранится в специальном регистре, называемом Instruction Pointer, который по окончании выполнения передвигается на следующую ячейку памяти.

    За более чем полвека с момента появления этой архитектуры были предложены десятки альтернативных арихетектур организации последовательного выполнения, однако все из них уступают ей в потолке производительности. Потолок производительности определяется (из-за конечности скорости света) линейными размерами критической части конструкции, и именно классическая регистровая архитектура обеспечивает максимальную локальность вычисления из всех предложенных на данный момент архитектур последовательного выполнения. Соответственно, именно такая архитектура сохранится, по всей видимости, и в дальнейшем — по крайней мере ещё несколько десятилетий.

    § 3.1. Функционально-логические единицы
    Описанные в первой части переключатели и дорожки являются «сырьём» для изготовления функционально-логических единиц, таких как сумматор, умножитель, мультиплексор и демультиплексор. Мультиплексоры и демультиплексоры представляют из себя устройства, похожие на сортировочные станции на железной дороге (см. иллюстрацию справа). На вход мультиплексора поступают n чисел (a1..an) и управляющее число m. На выход подаётся число am, то есть m-тое из n входящих чисел. Демультиплексор — зеркальный аналог мультиплексора: передаёт входящий сигнал на m-тый из n выходов.


    Задача сумматора в том, чтобы складывать подаваемые на него числа. На вход n-битного сумматора поступает два числа a и b по n бит плюс однобитное число c (0 или 1). Сумматор складывает входящие числа и выдаёт результат (a + b + с). Это (n + 1)-битное число.


    Функционально-логические единицы реагируют на изменения аргументов не сразу: нужно, чтобы сигнал успел пройти весь путь от начала схемы до её конца, учитывая задержки, вызываемые прохождением через переключатели, и возможные циклы в схеме. Для каждой функционально-логической единицы при проектировании рассчитывается время работы. Разработана обширная теория проектирования функционально-логических единиц с минимальным временем работы. Так, простейший многоразрядный сумматор, выполняющий сложение по образу и подобию сложения в столбик на бумаге, требует для работы время, растущее линейно с разрядностью. В 60-е годы были разработаны схемы ускоренного переноса, уменьшающие рост до логарифмического. Использующий их сумматор на симметрических переключателях гарантированно подсчитывает результат за ⌈3 + log2(разрядность)⌉·τ, что является теоретическим пределом скорости. В случае 64-битного сумматора достигается 15-кратное ускорение о сравнению с наивной реализацией. А хитроумная оптимизация умножения, деления, вычисления тригонометрических функций позволяет подчас достичь ускорения в сотни раз.

    § 3.2. Операционные блоки
    Операционный блок — это устройство, умеющее выполнять инструкции какого-то одного типа — например, сложение и вычитание. Базовый элемент операционного блока — ячейка памяти (т.н. регистр инструкции), в которую записывают инструкцию, подлежащую выполнению. По исполнении инструкции блок очищает эту ячейку. В остальном операционный блок состоит из набора связанных между собой и с регистром инструкции функционально-логических единиц. Для примера рассмотрим операционный блок, способный выполнять инструкции вида «сложить значения из регистров № 2 и № 5 и записать сумму в регистр № 8».
    Нам потребуется:
    – регистр инструкции, в котором хранится код операции суммирования и номера регистров-операндов (2, 5 и 8 в вышеуказанной команде);
    – сумматор;
    – два мультиплексора, подключенные к блоку регистров с одной стороны и входам сумматора с другой: они выбирают из регистров те два, чьи номера сохранении в регистре инструкции (№ 2 и № 5) и подают содержимое на входы сумматора;
    – один демультиплексор, подающий вывод сумматора на входы регистра, в котором его следует сохранить.

    В современных процессорах операционные блоки способны производить более чем одно действие. Например, блок может содержать кроме сумматора ещё и умножитель. Для технической реализации достаточно в параллель с сумматором поставить умножитель, обрамлённые демультиплексором и мультиплексором, которые выбирают, проводить сигнал через сумматор или умножитель в зависимости от кода операции, сохранённого в регистре инструкции.

    § 3.2.1. Организация операционного цикла: синхронизация, суперскалярность, pipelining
    Работа процессора представляет из себя повторение следующего цикла, в ходе которого информация проходит по кругу «регистры → операционные блоки → регистры»:
    – загрузить подлежащие выполнению инструкции в операционные блоки;
    – подождать результатов;
    – сохранить результаты в регистры.

    Существует два подхода к организации процессорного цикла: синхронный и асинхронный. В синхронных процессорах имеется сигнал-дирижёр. При его изменении («дирижёр взмахивает палочкой») значения, выдаваемые операционными блоками сохраняются в регистры, а в операционные блоки подаётся следующая инструкция. В асинхронных процессорах общего сигнала-дирижёра нет, а о готовности результата сообщают сами операционные блоки. С момента готовности задания и операндов блок начинает отслеживать готовность результата. По окончании вычисления блок даёт отмашку на сохранение результата и запрашивает следующее задание.

    Синхронные процессоры имеют фиксированную тактовую частоту — количество «взмахов дирижёрской палочки» в секунду. Время между «взмахами» приходится выбирать, исходя из самого пессимистичного сценария. Однако на практике в подавляющем большинстве случаев для выполнения операции требуется в несколько раз меньше времени. На скорость выполнения влияют три фактора:
    – исходное состояние операционного блока: если инструкция или часть аргументов загружены заранее, часть блока заранее приходит в нужное состояние;
    – значения операндов: так, умножение коротких чисел занимает много меньше времени, чем умножение длинных;
    – уровень фоновых шумов: при температуре процессора 20 °C все операции протекают гораздо быстрее, чем при температуре 90 °C.

    Синхронный подход не может учитывать всех этих факторов; кроме того, зависимость уровня шумов от температуры определяется концентрацией кристаллических дефектов — величиной, которая варьируется от экземпляра к экземпляру и увеличивается по мере старения процессора. При расчёте тактовой частоты процессора следует исходить из худшего, то есть из изношенного посредственного экземпляра, работающего при температуре 85–90 °C. Именно этим фактом пользуются люди, выполняющие так называемый «разгон» процессора («overclocking»): удачные экземпляры при достаточном охлаждении продолжают стабильно работать при существенном превышении заложенной производителем тактовой частоты.

    Асинхронные процессоры начинают следующую операцию, как только результаты предыдущей готовы. У них нет такого понятия как тактовая частота, и их скорость работы всегда максимальна для данных условий: если на асинхронный процессор поставить горячий кофе, он замедлится, если полить жидким азотом — ускорится. Однако асинхронная схемотехника из-за её сложности используется на сегодняшний день лишь в небольшом количестве экспериментальных асинхронных процессоров (начиная с ILLIAC I в 1951 году и заканчивая GA144 в 2010 году). В будущем она, вероятно, будет применяться всё шире, так как других областей оптимизации не остаётся.

    Уже больше десятилетия в процессорах устанавливают несколько операционных блоков каждого типа. Такие процессоры называют суперскалярными. Они могут параллельно производить независимые действия — например, параллельно выполнять инструкции «c = a + b» и «d = a · b». Ещё одной широко применяемой техникой оптимизации является так называемый «pipelining»: инструкцию-задание записывают в операционные блоки ещё до того, как операнды готовы, при этом мультиплексоры и демультиплексоры успевают заранее прийти в нужное состояние, и время выполнения операции разительно сокращается. Однако максимальную выгоду от использования пайплайнинга можно получить лишь на асинхронном процессоре, так как синхронные процессоры дают на выполнение каждой инструкции заранее фиксированное количество «взмахов дирижёрской палочки», а при этом выигрыш от упреждающей загрузки инструкций в блоки относительно невелик. Если же вдобавок отдельно следить за готовностью каждого операнда, на асинхронном процессоре можно получать выигрыш во времени не только за счёт предварительной загрузки инструкции, но и за счёт более ранней готовности одного из операндов. Иногда инструкция может сработать вообще до того, как готовы все операнды — например, при равенстве одного из операндов нулю умножение выдаст ноль, не дожидаясь готовности второго операнда.

    Единственный эффективный способ раздельного контроля готовности операндов — одноразовое использование регистров. Под этим термином подразумевается, что в ходе работы каждой подпрограммы запись в каждый регистр производится только один раз (значения никогда не перезаписываются). По окончании процедуры все использованные регистры сбрасываются назад в пустое состояние. Тем самым обеспечивается простота проверки готовности операндов: операнд готов, как только содержащий его регистр непуст. Прямолинейная реализация раздельного контроля готовности требует огромного числа регистров, однако на практике этого не требуется: можно эмулировать большое число логических регистров, на деле обходясь небольшим числом аппаратных регистров.

    § 3.3. Управляющие блоки и блок прерываний
    Распределением заданий по операционным блокам в соответствии с записанной в оперативной памяти программой занимается управляющий блок. Он загружает из оперативной памяти команды программы, декодирует их и в декодированном виде рассылает по регистрам инструкций свободных операционных блоков. Кроме того, он выполняет инструкции перехода и ветвления, то есть выбирает одну из ветвей программы в зависимости от значения какого-либо операционного регистра. Управляющих блоков в процессоре может быть несколько, что позволяет исполнять несколько программ параллельно.

    Центральные процессоры не только выполняют программы, но и реагируют на аппаратные запросы. Аппаратный запрос — это сигнал, подаваемый внешними устройствами на специально выделенные для этого входы процессора. Например, при нажатии на кнопку мыши процессору подаётся запрос на обработку этого события. Обработкой аппаратных запросов занимается блок прерываний. При поступлении запроса блок прерываний ищет свободный управляющий блок и посылает приказ о выполнении программы-обработчика. Если свободных блоков нет, он выбирает один из блоков и временно прерывает выполняющуюся в нём программу, перенаправляя блок на обработку аппаратного запроса. По окончании обработки выполнение прерванной программы возобновляется. Блок прерываний обязан своим названием тому, что большая часть его работы состоит именно в прерывании и возобновлении выполнения программ.

    § 3.3.1. Управляющие инструкции: переходы, вызовы, ветвление и циклы
    Программа представляет собой набор закодированных числами инструкций, расположенных в последовательных ячейках памяти. Если же по тем или иным причинам невозможно расположить последовательные инструкции в последовательных ячейках, обычно используется инструкция перехода. Считывая такую инструкцию, управляющий блок записывает в Instruction Pointer адрес, указанный в инструкции. В традиционных архитектурах состояние остальных регистров при переходе не изменяется.

    Исторически основным применением инструкций перехода является вызов подпрограмм, однако сейчас для этого используются отдельные инструкции вызова и возврата. Инструкция вызова маскирует или очищает все регистры (сбрасывая их значения в специально выделенное хранилище) за исключением диапазона регистров, в которых находятся аргументы, чтобы вызываемая подпрограмма работала «с чистого листа». (Маскировка работает быстрее перемещения значений в хранилище, но может быть реализована лишь на процессорах, использующих динамическое переименование регистров.) Подпрограммы заканчивают своё выполнение инструкцией возврата, которая очищает использованные подпрограммой регистры и демаскирует либо восстанавливает убранные при вызове регистры за исключением диапазона, в котором сохранены результаты выполнения подпрограммы.

    Специальным случаем является так называемый хвостовой вызов, то есть ситуация, когда некая подпрограмма f заканчивается парой инструкций вида «вызвать g и вернуть результат её выполнения на уровень выше». В этом случае при вызове g не нужно сохранять или маскировать текущие регистры и точку возврата — вместо этого можно передать вызываемой подпрограмме g, что результат нужно возвращать не в f, а сразу на уровень выше. Хвостовой вызов отличается от описанного в самом начале этого параграфа перехода только тем, что явно указывается, какие регистры следует сохранить, а какие отбросить при переходе. В будущем переход-«хвостовой вызов» заменит традиционный переход (не изменяющий значений операционных регистров), так как традиционный переход мешает асинхронному выполнению и одноразовому использованию регистров, а переход-«хвостовой вызов» нет. (На самом деле, и инструкция возврата является частным случаем перехода-«хвостового вызова», однако обсуждение этой красивой концепции выходит за рамки данного текста.)

    Кроме вызовов и переходов управляющие блоки выполняют инструкции ветвления, то есть выборы ветви программы в зависимости от значения одного из операционных регистров. Традиционно ветвление осуществляется при помощи инструкций условного перехода, однако на асинхронных процессорах вместо традиционной операции перехода гораздо лучше использовать инструкции условного вызова или условного хвостового вызова. Инструкция такого рода указывает на таблицу, в которой записано, какую подпрограмму вызывать в зависимости от значения одного из операционных регистров. При помощи инструкций условного (хвостового) вызова можно эффективно реализовывать и конструкции вида if-then-else, match-case, условную рекурсию и, соответственно, все возможные виды циклов. Дополнительных операций управления выполнением не требуется.

    Зачастую на подходе к точке ветвления свободных вычислительных ресурсов много и большая часть аргументов для вызываемых подпрограмм готова, однако не готово значение, определяющее, какую из подпрограмм надлежит в итоге вызвать. В этом случае можно спекулятивно начать выполнять одну или несколько наиболее вероятных процедур, избегая лишь операций, влияющих на «внешний мир»: сохранения каких-либо значений в общедоступную оперативную память, обращения к внешним устройствам и возврата из процедуры. Эта техника оптимизации во многих ситуациях способна обеспечить более чем двукратный прирост производительности.

    Пример ветвления:
      match (a <> b) {
        case 0: {
          print "a and b are equal"
        }
        case 1: {
          print "a is greater than b"
        }
        case -1: {
          print "b is greater than a"
        }
      }
    Наиболее частый частный случай ветвления — бинарное ветвление if-then-else:
      if (condition) {
        do_this
      } else {
        do_that
      }
    
      match (condition) {
        case True: {
          do_this
        }
        case False: {
          do that
        }
      }
    Пример рекурсии:
      def gcd(a, b) = {
        if (b = 0)  return a
        else        return gcd(b, a % b)  // Хвостовая рекурсия
      }
    


    § 3.4. Заключение
    По всей видимости, архитектура центральных процессоров останется фон-неймановской. Увеличение производительности будет обеспечиваться за счёт лучшей параллелизации инструкций и перехода на асинхронную схемотехнику. Для обеспечения наилучшей параллелизуемости потребуется переход на более совершенные наборы инструкций — в частности, пригодные для одноразового использования регистров.

    Современные процессоры используют от 1 до 16 управляющих блоков и от 4 до 64 операционных блоков. При переходе к асинхронной схемотехнике будет оправдано использование нескольких десятков управляющих блоков и нескольких сотен операционных блоков. Такой переход вместе с соответствующим увеличением числа блоков обеспечит увеличение пиковой производительности более чем на два порядка и средней производительности более чем на порядок.

    Часть 4. ↁⅠⅩ wanted!

    В 1962 году Дональд Кнут начал написание знаменитой серии книг «Искусство программирования», в которой описываются эффективные алгоритмы и анализируется их скорость. Чтобы сохранить возможность описывать низкоуровневые алгоритмы и точно оценивать время их выполнения, он принял решение не использовать высокоуровневых языков программирования, а писать на ассемблере. Однако архитектуры и ассемблеры реальных процессоров переполнены причудливыми техническими особенностями, отвлекающими от сути — в те времена они были результатами необходимых инженерных компромиссов и технических ухищрений, сегодня их основным источником является требование обратной совместимости со старыми моделями. Чтобы не перегружать читателя ненужными и быстро устаревающими деталями и сохранить универсальность изложения, Кнут решил разработать собственную архитектуру компьютера, предназначенную специально для обучения. Эта архитектура получила название MIX.

    В течение последующих трёх десятилетий в области компьютерных технологий произошли серьёзные изменения, и MIX во многом устарел. Чтобы «Искусство программирования» продолжало оставаться актуальным источником, автор решил разработать вместе с ведущими промышленными разработчиками процессоров MMIX — новый вымышленный компьютер, который является идеализированным и улучшенным аналогом компьютеров второй половины 1990-х годов. MMIX является глубоко продуманной архитектурой, пригодной для немедленной аппаратной реализации и заметно более развитой, чем все широко распространённые на сегодняшний день процессорные архитектуры.

    Стремление сделать машину, которую можно эффективно реализовать «в железе» средствами конца 1990-х годов, помешало сделать достаточный задел на будущее — к большому сожалению, набор инструкций MMIX практически непригоден для реализации потенциала асинхронных суперскалярных процессоров. Дело в том, что организация вызовов в MMIX базируется на использовании традиционных переходов и требует перезаписи регистров. Для практического исследования перспективных техник программирования необходимо переработать этот набор инструкций в соответствии с описанными выше неизбежными тенденциями развития центральных процессоров — к счастью, это не такая уж сложная задача.

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 63

      +2
      Весьма доходчиво и интересно.

      Смущает только: «MMIX является глубоко продуманной архитектурой,… заметно более развитой, чем все широко распространённые на сегодняшний день процессорные архитектуры», хотя в Вики написано: «автор принял решение разработать новый компьютер — MMIX, который является аналогом компьютеров, завоевавших большую часть рынка в 90-х годах XX века.»
        +7
        В общих чертах — именно аналог. Но в деталях гораздо более развит. Характерный пример — наличие операций Иверсона — матричных OR и XOR. Эти операции очень просто реализуются в железе, однако ни в одной распространённой на сегодняшний день архитектуре не задействованы. При этом у них забубенный потенциал, см. //www-cs-faculty.stanford.edu/~uno/mmix-doc.ps.gz. Таких мелочей там уйма.
          –2
          Это какая такая бабушка сказала, что в x86 нет XOR?
          • UFO just landed and posted this here
        +1
        Так всё же, почему производители процессоров не реализуют те же инструкции OR и XOR, но всякие 3DNow! добавляют?
          0
          Не знаю, вот честно не знаю. Я бы очень приветствовал такое нововведение.
          +2
          Спасибо автору за замечательный текст. Прочитал с удовольствием.
            0
            Мне кажется что будет что-то среднее асинхронно-синхронное. Они друг друга будут дополнять.
              0
              IBM на счет графена не согласна.
                +4
                Я, конечно же, читал этот пресс-релиз IBM — они пишет о графене, как о полупроводниковом материале для транзисторов. Это относится к классической электронике. А я пишу о применении графена в спинтронике, и их рассуждения о полупроводниковых недостатках графена не имеют никакого отношения к тому, о чём пишу я.
                +1
                Вот интересно, а от разделения чисел на знаковые/беззнаковые, со всеми вытекающими, когда-нибудь откажутся?
                  +3
                  Высокоровневые языки программирования могут запросто отказаться. Некоторые уже и отказались. А вот на уровне ассемблера такое разделение очень и очень удобно. Дело в том, что есть практическая необходимость работать с целыми числами произвольной длины, а алгоритмы для работы с такими числами реализуются значительно эффективнее, если у нас есть набор ассемблерных команд как для целых, так и для беззнаковых чисел. За деталями, опять же, советую обратиться к книжкам Дональда Кнута. Я на вскидку не помню, первый это том или второй, но где-то он детально описывает, как реализовывать BigInt-библиотеку наиболее эффективно.
                    0
                    В 64-битных системах практически нет смысла использовать беззнаковые числа именно как числа.
                    То есть в полностью 64-битных языках будут отдельно «целые числа» (знаковые) с арифметическими операциями, отдельно «действительные числа» (один тип, то что сейчас double), и отдельно, без возможности конверсии — типы данных «набор из 16/32/64 бит» с булевыми операциями. То есть кесарю кесарево, слесарю слесарево, а все попытки их смешать ошибочны по своей сути.
                    Ну может конверсию и оставят, но явно не автоматическую. Как сейчас есть Math.round() для конверсии из действительных в целые.
                      0
                      Ээ, да при чем тут числа с точкой/без? Я о unsigned/signed числах говорю, на уровне ассемблера. Все эти заморочки с флагами, дополнительные проверки, отдельные операции вроде mul/imul — все это последствия экономии памяти, которая сейчас не так актуальна. Вполне можно просто сделать все числа знаковыми, вопрос в том, как совершить такой переход.
                        0
                        отдельные операции вроде mul/imul — все это последствия экономии памяти, которая сейчас не так актуальна.
                        В том-то и дела, что не памяти, а времени. Нам нужно беззнаковое умножение, чтобы реализовать бысторое умножение BigInt'ов. В плане схемотехники это минимальный overhead, знаковые и беззнаковые операции сложения, вычитания и умножения выполняются одними и теми же операционными блоками, причём если мы откажемся от беззнакового варианта, мы выиграем всего 3-4% в количестве транзисторов в этих блоках. А выигрыш в скорости работы BigInt'ов за счёт существования этих операций — в некоторых случаях двукратное ускориение.
                      0
                      Утопичненько.
                        +7
                        Спасибо за замечательный топик!
                        Вот только кажется мне, что С и x86 всё больше становятся гигантскими якорями. х86 — потому что легаси и современные процессоры крайне слабо похожи на 8086. С (и С++, как продолжатель традиций) — потому что не имеют средств для выражения того, что по-настоящему нужно, как то вывод типов (без BDSM в стиле хаскеля, скорее, что-то вроде ML), различные стратегии выделения памяти (линейные/стековые аллокаторы, например -возможность и необходимость их использования вытекает из семантики кода), паттерн матчинг (который выглядит на порядок красивее пачки ифов и может быть оптимизирован компилятором). Основная проблема, думается мне — гигантское количество человеколет, потраченных на оптимизацию компиляторов С и С++ под процессоры и процессоров под них. Ну и отсутствие вменяемой альтернативы прямо сейчас, да (хаскель слишком исследовательский, окамл слишком медленно развивается, млтон вообще тихо гниёт, да и все они не позволяют спуститься достаточно низко).
                          +2
                          Подпишусь под каждым словом. Вместо Си, кстати, разработан язык аналогичной направленности, но лишённый сишных недостатков. Он называется С-- и разработан как своего рода универсальный ассемблер специально в качестве бекенда для компиляторов функциональных языков (GHC, если быть точным). Это прекрасный язык, я на нём писал и я его всячески рекоммендую.

                          Очень советую почитать его спецификацию и статьи по нему на сайте www.cminusminus.org/. Мои рассуждения на эту тему, правда ещё в несколько неоформленном виде, я записал на kuklev.com/blog/ctt/. Планировал со временем оформить это в полноценную статью и тоже поделиться. Я там пишу кроме прочего про Cyclone, использующий превосходную модель аллокации памяти.

                          Кстати, про вменяемую альтернативу С++. Есть Scala. Она не чисто функциональная, но умеючи на ней можно писать в чисто-функциональном стиле. Сейчас она работает под JVM, но в перспективе её можно и нужно транслировать, например, в тот же C--.
                            +1
                            Scala тут не в тему, потому как слишком высокоуровневая (я не про JVM говорю сейчас, а про отсутствие каких-либо конструкций для работы напрямую с регистрами или указателями, например). Да и ML я скорее как пример привёл.
                            Cyclone интересен, но, насколько я знаю, немного подзаброшен. Голый вывод регионов тоже имеет свои недостатки. Впрочем, как и все модели работы с памятью. Наверное, нужны какие-то средства для выделения блоков переменных, работающих с разными моделями памяти, чтобы часть данных, например, выделялась динамически и собиралась сборщиком (например, частицы в системе частиц); часть — работала со стековым аллокатором (например, уровень в игре — он должен быть загружен при входе в ветку кода и выгружен после выхода); часть использовала подход со статическим выведением регионов (какое-нибудь IO, например), ну и так далее.
                            Про С-- почитал официальный сайт и не совсем понял, к чему он. Почитаю ещё ваш блог, посмотрю, спасибо.
                              +1
                              Таки почитал ваш блог и вчитался в официальный сайт. Действительно, выглядит как С с некоторыми улучшениями, но всё-таки это не то. Это именно intermediate language, компилятор которого авторы не хотят делать сложным. А значит, никакого паттерн-матчинга, фвп с замыканиями и сложных оптимизаций. Это грустно.
                              0
                              И да, мы при этом ещё и абсолютно не трогаем вопросы многозадачности, добавляющий в этот и так сложнейший компот ещё огромную кучу проблем. Впрочем, возможно, эти вопросы стоит отдать на откуп более высоким уровням и писать на подобных языках только однопоточный код, полагаясь на share-nothing и message-passing между отдельными процессами внешним кодом (эрланговские С-ноды, если угодно).
                          • UFO just landed and posted this here
                              +1
                              Электронная реализация симметрического переключателя затратна, потому я и написал выше «к сожалению, симметрические переключатели становятся привлекательными лишь при использовании спинтроники или фотонной логики. Электроника обречена использовать обычные транзисторы.»

                              Однако есть основания полагать, что в случае спинтроники их можно будет сделать очень компактными. Представте себе следующую картинку: есть две входящие дорожки, они смыкаются как буква V. Есть две выходящие дорожки, они расходятся как перевёрнутая буква V. Теперь представьте себе, что бы повернули одну из них относительно вертикальной оси на девяносто градусов. V осталась как была, а перевёрнутую её копию мы повернули боком, она выглядит как I. Если их сомкнуть через одну специальную хиральную молекулу, то можно достигнуть того, чтобы входящие потоки электронов этой молекулой поворачивались по часовой стрелки на девяносто градусов и выходили в выходящие дорожки так, что левая входящая выходит в левую выходящую, а правая входящая выходит в правую входящую. Если же взять левовращающий вариант той же хиральной молекулы, потоки будут поворачиваться в против часовой и соединение будет обратным: левая входящая в правую выходящую, правая входящая в левую выходящую. Так вот, выходит что существуют такие молекулы, киральность которых мы можем контролировать спином проходящего через них тока. Если удастся собрать такое устройство на практике, это будет одномолекулярный симметрический переключатель.

                              Информация у меня от одного из участников группы профессора Мюнценберга, они занимаются спинтроникой у нас в университете: www.uni-goettingen.de/de/202244.html.
                              0
                              Прямо как Эльбрус 2000.
                              Все классно и гладко, только вот рабочих образцов все никак не дождемся :(
                                +1
                                Даже интересно: а вы ожидали увидеть эльбрус в МОБИЛЬНИЧКАХ и НОУТБУЧИКАХ?
                                  0
                                  Я ожидал услышать, что Бабаян наконец-то выпустил свой супер-процессор и он работает хоть в каком-нибудь НИИ.
                                  А пока я вижу только как он пилит выделяемое государством бабло на высокотехнологичную утопию, называемую «Эльбрус 2000».
                                    –1
                                    www.intel.com/cd/corporate/pressroom/emea/rus/371034.htm

                                    Это тот Бабаян который 1000 лет работает в Интел? Мы о нём говорим? Если да, то он работает в НИИ :)
                                      0
                                      Интересно — за какие же такие заслуги он в Интел попал? Вы можете дать ссылку на публикации, показывающие его вклад в процессоры Intel?
                                        0
                                        Смешно. Анонимный тролль с отрицательной кармой и без единой статьи критикует членкора РАН, Intel Fellow. «Ай, Моська! знать она сильна, Что лает на Слона!»
                                        www.intel.com/pressroom/kits/bios/bbabayan.htm
                                        www.intel.com/pressroom/kits/bios/bbabayan_bkgd.htm
                                        Можете что-нибудь подобное про себя показать?
                                          0
                                          Как любят «не тролли» бряцать даже не своими регалиями… Однако, даже тов. Сталину регалии не помогли — разоблачили культ личности…
                                          Кстати, Барин, объясните смерду откуда у Вас такое самомнение о себе, что Вы можете позволить себе навешивать ярлыки?
                                            +1
                                            Вот вы сейчас — отличный пример того, о чём говорил в этой речи А.А. Зализняк. Я позволю себе привести цитату:
                                            Мне хотелось бы высказаться в защиту двух простейших идей, которые прежде считались очевидными и даже просто банальными, а теперь звучат очень немодно:

                                            1) Истина существует, и целью науки является ее поиск.

                                            2) В любом обсуждаемом вопросе профессионал (если он действительно профессионал, а не просто носитель казенных титулов) в нормальном случае более прав, чем дилетант.

                                            Им противостоят положения, ныне гораздо более модные:

                                            1) Истины не существует, существует лишь множество мнений (или, говоря языком постмодернизма, множество текстов).

                                            2) По любому вопросу ничье мнение не весит больше, чем мнение кого-то иного. Девочка-пятиклассница имеет мнение, что Дарвин неправ, и хороший тон состоит в том, чтобы подавать этот факт как серьезный вызов биологической науке.

                                            Это поветрие — уже не чисто российское, оно ощущается и во всём западном мире. Но в России оно заметно усилено ситуацией постсоветского идеологического вакуума.

                                            Источники этих ныне модных положений ясны:

                                            действительно, существуют аспекты мироустройства, где истина скрыта и, быть может, недостижима;

                                            действительно, бывают случаи, когда непрофессионал оказывается прав, а все профессионалы заблуждаются.

                                            Капитальный сдвиг состоит в том, что эти ситуации воспринимаются не как редкие и исключительные, каковы они в действительности, а как всеобщие и обычные.

                                            И огромной силы стимулом к их принятию и уверованию в них служит их психологическая выгодность. Если все мнения равноправны, то я могу сесть и немедленно отправить и мое мнение в Интернет, не затрудняя себя многолетним учением и трудоемким знакомством с тем, что уже знают по данному поводу те, кто посвятил этому долгие годы исследования.

                                            Психологическая выгодность здесь не только для пишущего, но в не меньшей степени для значительной части читающих: сенсационное опровержение того, что еще вчера считалось общепринятой истиной, освобождает их от ощущения собственной недостаточной образованности, в один ход ставит их выше тех, кто корпел над изучением соответствующей традиционной премудрости, которая, как они теперь узнали, ничего не стоит.

                                            От признания того, что не существует истины в некоем глубоком философском вопросе, совершается переход к тому, что не существует истины ни в чём, скажем, в том, что в 1914 году началась Первая мировая война. И вот мы уже читаем, например, что никогда не было Ивана Грозного или что Батый — это Иван Калита. И что много страшнее, прискорбно большое количество людей принимает подобные новости охотно.

                                            А нынешние средства массовой информации, увы, оказываются первыми союзниками в распространении подобной дилетантской чепухи, потому что они говорят и пишут в первую очередь то, что должно производить впечатление на массового зрителя и слушателя и импонировать ему, — следовательно, самое броское и сенсационное, а отнюдь не самое серьезное и надежное.

                                            Я не испытываю особого оптимизма относительно того, что вектор этого движения каким-то образом переменится и положение само собой исправится. По-видимому, те, кто осознаёт ценность истины и разлагающую силу дилетантства и шарлатанства и пытается этой силе сопротивляться, будут и дальше оказываться в трудном положении плывущих против течения. Но надежда на то, что всегда будут находиться и те, кто все-таки будет это делать.
                                              0
                                              Какие мы с Вами разные:
                                              Абзац:

                                              2) В любом обсуждаемом вопросе профессионал (если он действительно профессионал, а не просто носитель казенных титулов) в нормальном случае более прав, чем дилетант.

                                              Вы читаете «профессионал… более прав, чем дилетант», а я читаю «если он действительно профессионал, а не просто носитель казенных титулов». Вы смотрите на титулы и принимаете на веру все, что Вам доносит «профессионал», а я задаю себе вопрос: а кто это — профессионал или титулы?
                                                0
                                                Угу. Вот только вот эту вот www.intel.com/pressroom/kits/bios/bbabayan_bkgd.htm ссылку вы, видимо, не видели, точно так же как не задавали себе вопрос «а кто такой Виктор Картунов ака matik», принимая его слова на веру. В результате получается, что я больше доверяю человеку с кучей титулов (у вас, кстати, есть знакомые членкоры РАН? Поспрашивайте у них, легко ли получить подобный «казённый титул». Если же у вас таких знакомых нет, то это само по себе показательно), а вы — неизвестной Моське из Интернета. Интересно, да?
                                                  0
                                                  Уважаемый, «не Моська» — не хамите.
                                      0
                                      Вы бы хотя бы удосужились ту же вики почитать, что ли.
                                      >По обещаниям разработчиков, в 2008 году должна была начаться поставка вычислительных комплексов на базе Эльбруса-3M для нужд ПВО и ПРО
                                      Более новую информацию я не нашёл, однако вот этот список публикаций как бы намекает нам, что работа идёт очень активно и используется всё это у военных (например, публикация «Радиационная стойкость микропроцессора семейства „МЦСТ-4R“ явно не относится к рынку потребительской электроники).
                                      И это не говоря уже о том, что Бабаян работает в интеле и далеко не простым исследователем. Вы же вместо того чтобы разобраться просто начали поливать фекалиями известного и уважаемого человека. Это что, помогает самоутвердиться?
                                        0
                                        Эльбрус-3M — это не Эльбрус-2000. Как минимум 6 символов не совпадает.

                                        Вот здесь описаны различия: www.fcenter.ru/online.shtml?articles/hardware/processors/15730
                                          +1
                                          Статейка, кстати, на удивление мерзотная, полная передёргиваний и хамства. Ну да ладно, сейчас это модно стало. Тем не менее:
                                          >Вместо «чемпиона-Е2К» частотой 1.2ГГц (о как!) с кэшем третьего уровня решили выпустить упрощенную модель Эльбрус-3М. Он отличался тем, что, «имея передовую архитектуру Е2К», не имел кэша третьего уровня и работать должен был на частоте 300МГц.
                                          Напомню, что работают эти чипы в системах ПВО. Данные там очень своеобразные, как и требования. Высокие частоты и мелкие техпроцессы — откровенно вредны, поскольку первое означает повышенное тепловыделение и требовательность к точности тактования, а второе — неустойчивость к радиации. Поэтому грубые, медленные, но эффективные (см. VLIW) процессоры там очень в тему, не вижу причин хоть в чём-то обвинять Бабаяна и его архитектуру (тем более что, я думаю, интелу виднее, чем вам, дурак Бабаян и распильщик или нет), даже если в итоге налажен выпуск более простых процессоров, чем планировалось изначально. Вы же опять всё меряете с позиции «а у меня в айфончике мегагерц больше», не желая задумываться.
                                            0
                                            Вот я обыватель — к процессорам не имею отношения. Я знаю только то, что это «круто». И я много слышу от президента Медведева про коррупцию в гос. аппарате.
                                            И есть 2 статьи про E2K и Бабаяна:
                                            www.fcenter.ru/online.shtml?articles/hardware/processors/15730
                                            ru.wikipedia.org/wiki/Эльбрус_2000
                                            Какой статье я поверю?
                                            Я вижу, что никакого нетбука или смартфона на нашенском процессоре не выпускается, ВВП по телеку не нажимает кнопку «ПУСК» нашей Супер-ЭВМ.
                                            Поэтому я знаю, что E2K не существует в реальном мире. И я очень разочарован тем, что этот проект так загнулся. Я очень хотел гордиться за свою высокотехнологичную страну, а получается, что нужно валить отсюда :( А кто виноват в крахе моих надежд?
                                              +1
                                              >Вот я обыватель — к процессорам не имею отношения.
                                              Спасибо, я заметил.
                                              >Какой статье я поверю?
                                              Никакой. У вас нет своей головы? Вы не умеете пользоваться гуглом? Вики это исключительно удобная начальная точка, из которой можно начинать ходить по ссылкам. Посмотрите на список публикаций МЦСТ за один только последний год, посмотрите на достижения лично Бабаяна (список выше), сравните это с очень эмоциональным, но весьма безграмотным высером неизвестного анонима (я понимаю ещё, если бы это была обоснованная критика известного аналитика или учёного) на фцентре и подумайте сами, что больше свидетельствует о реальной работе.
                                              >Я вижу, что никакого нетбука или смартфона на нашенском процессоре не выпускается
                                              >Поэтому я знаю, что E2K не существует в реальном мире.
                                              Т.е. всё, что выходит за рамки потребительского сектора, не существует, я правильно понял? Телескоп Хаббла он как — существует? Хотя да, с него же ПРИКОЛЬНЫЕ КАРТИНАЧКИ показывают. А вот какой-нибудь Чандра дял вас уже не существует, видимо.
                                              >я очень разочарован тем, что этот проект так загнулся
                                              >получается, что нужно валить отсюда :(
                                              Да кто вам сказал? Кому вы верите — неизвестному с фцентра? Т.е. слов абсолютно неизвестного вам человека достаточно, чтобы принять решение о том, что «нужно валить отсюда»? Пиндык какой-то. В России сейчас есть куча исследований, если вам интересно, вам ничто не мешает ими интересоваться или даже участвовать в них. Но проще просто поливать помоями в интернете, правда?
                                                0
                                                Вы уже про помои 2 раза сказали.
                                                Отвечу — не надо давать повода. Раз Бабаян устроил рекламу начала своего проекта, так он должен был устроить не меньшую рекламу окончания своего проекта. Иначе его дело осталось не доделанным в мозгах обывателей. И пожалуйста относитесь к обывателям с бОльшим уважением — именно они платят налоги (олигархи «оптимизируют» налоги).
                                                  +1
                                                  Я отношусь с уважением к людям, которые используют свой мозг, а не ставят вопрос как «а кому бы мне поверить, А или Б».
                                                  Пиар исследований и проектов — да, согласен, большая проблема в России сейчас. Ничто не мешает вам исправить это, могу подсказать пару мест, куда можно придти, взять интервью, поделать фотографии и потом всё это опубликовать, например, на Хабре.
                                  +1
                                  параллелизации
                                    +2
                                    Спасибо, исправил. Если ещё что заметите, незамедлительно сообщайте!
                                    0
                                    остановка или, наоборот, разгон огромного количества электронов в проводнике

                                    1) скорость электронов в проводнике очень низкая
                                    2) кол-во электронов особой роли не играет, т.к. это квантовый эффект и все электроны начинают двигаться почти одновременно (ограничиваясь только скоростью света), т.е. не совсем ясно в чем выигрыш у «постоянного потока электронов».
                                      +6
                                      скорость электронов в проводнике очень низкая
                                      Дело не в том, какая там скорость. Дело в том, что когда заряды начинают двигаться ускоренно (ускоряются или замедляются), они начинают излучать. Суммарный эффект этого являения выражается в т.н. индуктивных и ёмкостных потерях. См. //ru.wikipedia.org/Реактивное сопротивление. Эти потери составляют > 95% энергопотребления современных процессоров. Остальные < 5% это обычные омические потери W = U²/R. На процессоре, в котором течёт только постоянный ток, а информацию несёт поляризация тока, остаются только ти потеи. В графене, где подвижность электронов огромна, напряжение это может быть очень мало, а соответственно очень низким может быть энергопотребление.

                                      кол-во электронов особой роли не играет
                                      Я вас не понял. Количество электронов, которые разгоняются и останавливаются, зависит от свойств проводника, это в точности те электроны, которые пребывают в зоне проводимости. Их количество безусловно играет роль в потерях. Потери в точности пропорциональны их количеству по формуле Друде.

                                      это квантовый эффект и все электроны начинают двигаться почти одновременно
                                      Так-так-так. Что они начинают двигаться почти одновременно с точностью до скорости света — это действительно так и вытекает из классической электродинамики. Где именно тут квантовый эффект? Мне в самом деле интересно, потому что квантовая теория поля — область моей профессиональной деятельности. :-)
                                        +1
                                        Возможно я что-то путаю из университетского курса, но сам эффект «одновременного» движения электронов, т.е. передачи сигнала с максимальной скоростью, и есть квантовый эффект. Или я действительно путаю?

                                        А за разъяснение о потерях спасибо, так яснее преимущества «графеновой схемы».
                                          +2
                                          сам эффект «одновременного» движения электронов, т.е. передачи сигнала с максимальной скоростью, и есть квантовый эффект. Или я действительно путаю?

                                          Скорее всего путаете. Смотрите, электроны это такие точечные заряды q = e. Электрическое поле действует на них с силой F = qE. Это самое поле это градиент потенциала. Если на проводник не подано напряжения, то разность потенциалов у его концов ноль, градиент потенциала всюду нулевой, на электроны не действует сила поля.

                                          Теперь возьмём батарейку и замкнём один её контакт на заземление. Что такое батарейка? Это насос, который качает электроны. Батарейка создаёт разность потенциалов в пять вольт, значит на заземлённом контакте остался потенциал ноль, а на втором возник потенциал в плюс или минус пять вольт, в зависимости от того какой контакт мы заземлили. Удобнее заземлить положительный. Тогда получится, что батарейка накачала из земли в отрицательный контакт определённый излишек электронов.
                                          Если провести аналогию с водным насосом, то батарейка на пять вольт это насос, который может создать разницу столба воды в пять метров. Один шланг насоса мы поместили в колодец (заземление), другой в вертикальный резервуар (выходная клемма батарейки). В ней собралось пять метров воды в высоту, насос работает, но уровень выше не поднимается.

                                          Теперь возьмём и соединим с этими контактами наш проводник. С того конца, где ноль, ничего не изменилось. А вот как только мы соединим отрицательный контакт с проводником, по проводнику (от тамошнего излишка электронов) начнёт распространятся электрическое поле, отгоняющее электроны в проводнике подальше от излишка электронов на выходной клемме батарейки. Поле распространяется со скоростью света. Соответственно, как только до электрона в проводнике дойдёт «волна» изменения электромагнитного поля, он начнёт двигаться.
                                      0
                                      Второй абзац в Заключении — это 1 в 1 описание GPGPU и Larrabee?
                                        0
                                        Вы про какой абзац? Про этот:
                                        При переходе к асинхронной схемотехнике будет оправдано использование нескольких десятков управляющих блоков и нескольких сотен операционных блоков. Такой переход вместе с соответствующим увеличением числа блоков обеспечит увеличение пиковой производительности более чем на два порядка и средней производительности более чем на порядок.
                                        Если так, то где же тут описание Larrabee? Larrabee это конкретная архитектура с весьма специфическими свойствами, навроде кешекогерентности, совершенно определённого подхода к организации конвейера и т.д. У меня об этом ничего н сказано (какое может быть один в один описание?), а написаны общие вещи про большое число операционных ядер и блоков. Larrabee далеко не единственная и далеко не первая разработка, направленных в эту сторону. Кроме того, в этом абзаце упомянута асинхронность, которой Larrabee ну никак не планирует обладать.

                                        А про GPGPU в духе CUDA и OpenCL у меня написано отдельно. Впрочем я по GPGPU совсем не эксперт, я пользуюсь университетскими Nvidia Tesla только через Matlab для отдельных численных расчётов, а непосредственно на CUDA пока ничего серьёзного не писал.
                                          0
                                          у GPU сотни и тысячи независимых вычислительных блоков, так что речь про них.
                                        +1
                                        Интересный такой у вас факториал. Одно название от оного :)
                                          0
                                          Ой! Поправил. Удивительно, что вы первый заметили. Фантастика. Это проглядел не только я сам и несколько друзей, которых я просил просмотреть статью перед публикацией, но и ещё несколько сотен людей…
                                            +1
                                            Но рекурсия теперь не хвостовая получается же.
                                              0
                                              Ну я и тормоз, однако. А хвостовой факториал работает неочевидным образом. Напишу туда алгоритм Эвклида, что ли.
                                                0
                                                Теперь всё ОК? У меня нынче тяжелый день и поздний час, мог ещё чего-нибудь напортачить. :(
                                                  +1
                                                  Да, теперь хорошо.
                                                    0
                                                    Ой, не, теперь туплю уже я. Опять не ок, вызов не хвостовой. Хвостовой это если:
                                                    def func():

                                                    func()
                                                    Может быть стоит показать хвостовую реализацию какого-нибудь цикла, или что-то вроде того. Например:
                                                    func(n):
                                                    if n > 0:
                                                    print n
                                                    func(n — 1)
                                                      0
                                                      Парсер, скотина, пробелы пожрал:
                                                      def func():
                                                         …
                                                         func()
                                                      и
                                                      func(n):
                                                         if n > 0:
                                                           print n
                                                           func(n - 1)
                                                        +1
                                                        Хвостовой он там в gcd. Реализуется goto, значит хвостовой. А он реализуется.
                                                        0
                                                        Ааа. Теперь я уже дважды туплю. Всё ок, вызов хвостовой. Что-то у меня всё перемешалось, извините.
                                                          +1
                                                          Да просто два часа ночи. Спать надо. :-)
                                                +1
                                                Кстати, с предшественником упомянутого асинхронного процессора GA144 (144-ядерный форт-процессор производства GreenArrays) — 40-ядерным вариантом — отечественные программеры успели плотно поработать (американцы нанимали наших форт-программистов для разработки базового софта), интересная штука.
                                                  0
                                                  хабр торт!
                                                  спасибо автору за статью.

                                                  Only users with full accounts can post comments. Log in, please.