В году где-то 1993 (учился я тогда во 2-ом классе) после просмотра на видеомагнитофоне с «подпольным» переводом фильма «Терминатор 2: Судный день», у меня появилась детская мечта сделать такого робота, который смог бы не только воевать, но и делать домашние задания по русскому языку за меня моим почерком, чтобы учительница не заметила (дико не любил я тогда этот предмет).
Прошло время, но даже сейчас, без преувеличения можно сказать, что возможности искусственного интеллекта, заложенные в, так называемом, нейропроцессоре робота-терминатора, роль которого исполнял Арнольд Шварценеггер, до сих пор остаются фантастическими. Ведь очевидно, что для того, чтобы какая-либо задача была решена при помощи средств вычислительной техники, она, прежде всего, должна быть формализована. А так как по состоянию на сегодняшний день в Мире не существует единого и полного формального описания искусственного интеллекта, этот вопрос остаётся не решённым. И пока что, само выражение «искусственный интеллект» носит больше некий субъективный характер, применимый лишь к отдельным задачам (ну, это лично моё мнение, может быть я и не прав). Но, даже если всё-таки и удастся процессы, происходящие в головном мозге человека, описать при помощи математических формул, то есть, как раз найти тот самый способ формализации искусственного интеллекта, то вряд ли возможности современной вычислительной техники позволят его реализовать. Дело тут в том, что все формализованные алгоритмы, по состоянию на сегодняшний день, могут быть реализованы двумя способами:
  • программной реализацией (на микропроцессорной технике);
  • аппаратной реализацией (как правило, на программируемой логике).
Сами по себе микропроцессоры и микросхемы с программируемой логикой (ПЛИС) — два, принципиально разных способа реализации алгоритмов. Есть ещё и третий вариант — использование систем на кристалле, но это не более чем размещение на одной подложке ядер микропроцессоров (как аппаратных ядер, так и soft-ядер) и программируемой логики, с последующим распределением задач между ними, то есть смесь первых двух вариантов.
В наше время, конечно, уже появились и те самые (хотя нет, не те самые) нейронные процессоры (про один из них написано здесь), хотя, по сути искусственный нейрон — не более чем математическая модель, или как раз та самая попытка формализовать работу биологического нейрона, которая, опять же, реализуется либо программно с применением процессоров, либо аппаратно с применение программируемой логики, ну или с применением ASIC (грубо говоря, то же самое, что и ПЛИС, только в ПЛИС связи между логическими вентилями задаются программно, а в ASIC — аппаратно), как видите ничего принципиально нового.
Микропроцессоры и ПЛИС — две абсолютно разные темы, и далее здесь пойдёт речь о микропроцессорах.

Я думаю, ни для кого не секрет, что практически все современные процессоры представляют собой, тот или иной способ реализации (это, конечно весьма условно, но тем не менее) машины Тьюринга. Их особенность в том, что очередная, для выполнения, команда выбирается из памяти последовательно, её адрес, при этом, генерируется подряд счётчиком команд, либо содержится в определённых полях предыдущей команды. И очевидно, что процессорам работающим по таким принципам до возможностей того самого терминатора ещё дальше чем медному котелку до Китая пешком. И тут же возникает вопрос: «А существует ли альтернатива такому способу реализации программных алгоритмов, которые смогли вывести бы машинные вычисления на принципиально новый уровень, не выходя за рамки возможностей современной электроники?». В ВУЗах, на специальностях, тем или иным образом, связанных с вычислительной техникой, читают курс лекций, в котором рассказывается об организации ЭВМ и систем, и, среди прочего, в этом курсе рассказывается, что все, существующие на сегодняшний день, механизмы программной реализации алгоритмов исполняются так:
  • очередная команда или набор независимых команд последовательности, считывается из памяти и выполняется тогда, когда выполнена предыдущая команда (набор независимых команд), как было сказано выше, так работает большинство современных процессоров, реализуя принципы машины Тьюринга;
  • команда считывается из памяти и выполняется тогда, когда доступны все её операнды (потоковые вычисления);
  • команды объединяются в процедуры, внутренне, каждая из которых выполняется как в первом случае (то есть, внутри каждой из таких процедур команды исполняются последовательно по принципам машины Тьюринга), при этом, внешне, сами процедуры исполняются как во втором случае, то есть по мере готовности и доступности всех необходимых операндов (макропотоковые вычисления, представляющие смесь первых двух вариантов);
  • команда считывается из памяти и выполняется тогда, когда другим командам требуются результаты её выполнения (редукционные вычисления).

Как было сказано в одной из публикаций, размещённых на сайте habrahabr.ru, более подробная ссылка на которую будет представлена далее по тексту, любой вычислительный алгоритм представляет собой набор математических формул, по средствам вычисления которых он реализуется. Всё с той же публикации возьмём, представленную в ней для примера формулу: g = e*(a+b) + (a-c)*f, и составим блок-схему алгоритма для классического процессора со следующей структурой (упрощённой и очень условной (для примера подойдёт)):
image
«Наш» процессор имеет гарвардскую архитектуру и состоит из двух регистров общего назначения, арифметико-логического устройства, регистра — аккумулятора, счётчика и дешифратора команд. Причём, на входной порт «А» АЛУ, может быть подано значение либо с регистра общего назначения, либо с регистра — аккумулятора. Это реализуется при помощи мультиплексора. Итак, блок-схема алгоритма для данного процессора будет выглядеть так:
image
Каждый операционный блок на блок-схеме — это аналог ячейки на ленте в машине Тьюринга, а счётчик адреса команд — аналог считывающей головки. Итого, для вычисления, взятой для примера формулы, понадобится считать 13 ячеек (выполнить 13 действий).
Что же касается потоковых вычислений, то вот здесь рассказывается, что это за вычисления и как они реализуются. Для нашего случая (взятой для примера формулы), граф потоковых вычислений (аналог блок-схемы алгоритма) будет иметь следующий вид:
image
Для потокового процессора со следующей структурой:
image

вычисления с распределением команд, будут выглядеть следующим образом:

image
Сравнительно, не так давно, одна из отечественных компаний заявила об окончании разработки процессора с такой архитектурой. Эта компания называется ОАО «Мультиклет». В их разработке, каждый процессорный элемент называется клеткой, отсюда и название — мультиклеточный процессор. На habrahabr.ru есть множество публикаций, посвящённых этому процессору, например вот эта. Эта публикация и есть та самая, ссылку на которую я, ранее, обещал дать, и с которой для примера взял формулу и граф потоковых вычислений.
Вообще, когда ОАО «Мультиклет» заявил о разработке такой архитектуры, эта новость была преподнесена так, что я, было, подумал, что теперь на рынке вычислительных систем произойдёт революция, но ничего не случилось. Вместо этого в интернете стали появляться публикации о недостатках мультиклеточной архитектуры. Вот одна из них. Но, при всём при том, разработка получилась рабочей и конкурентоспособной.
Ещё один интересный способ организации вычислений, отличный от машины Тьюринга — редукционные вычисления. В предыдущем случае каждая команда выполняется тогда, когда доступны все её операнды, но при таком подходе может сложиться ситуация, когда результаты выполненной команды далее могут не понадобится, тогда окажется, что временные и аппаратные ресурсы были потрачены впустую. В редукционных вычислениях данный недостаток был преодолён тем, что исполнение команды инициируется запросом на её результаты. В математической основе таких вычислений лежат ?-исчисления. Для вычисления нашей формулы весь процесс начинается с запроса на результат g, который, в свою очередь, сформирует запросы на выполнение операций e*(a+b) и (a-c)*f, а эти операции сформируют запросы на вычисление значений a+b и a-c и т. д.:
image
Сами по себе, редукционные вычисления состоят из процессов распознавания редексов с последующей заменой их результатами выполненных, запрошенных ранее, команд. В итоге, все вычисления редуцируются до требуемого результата. Нигде, ни в литературе, ни в интернете я не нашёл описания реальных процессоров с такой архитектурой, может плохо искал…
В настоящее время, уже ведутся исследования по созданию вычислительных систем, работающих на принципиально новых принципах, таких как квантовые вычисления, фотонные вычисления и т. д. Очевидно, что компьютеры, созданные по таким технологиям превзойдут все современные и приблизят школьников к тому моменту, когда можно будет заставить «железяку» делать за себя домашнюю работу по русскому языку. Но вопрос о создании принципиально нового способа реализации машинных вычислений, не выходя за рамки современной электроники, до сих пор остаётся актуальным.

Комментарии (14)


  1. kahi4
    27.09.2015 18:14
    +1

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


    1. rPman
      27.09.2015 20:16

      А работает ли это с мультипроцессорными или хотя бы многоядерными архитектурами? Или еще круче, с GPU?


      1. kahi4
        27.09.2015 20:50
        +1

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

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

        P.S. Суперскалярность работает с многоядерными архитектурами в том смысле, что у каждого ядра по своему конвейеру, а не что общий конвейер раскидывает по разным ядрам. Впрочем, наверное, если сильно постараться, такое тоже можно найти, но не понятно зачем выносить это на хардварный уровень, когда программно делается в разы проще, а результат такой же.


        1. rPman
          28.09.2015 12:28

          в теории оно понятно, меня больше текущая практическая возможность интересует :)

          p.s. мое мнение — синхронизация это упрощение, огрубление технологии. в теории возможна синхронизация доступа на уровне компилятора! а это на порядок быстрее.


    1. leshabirukov
      27.09.2015 22:48

      … успешно используются
      Векторизация и суперскалярность к редукционной модели вычислений не относятся. Если же вы имели в виду оптимизации на основе редукции при компиляции, то при чём тут аппаратная редукционная машина?
      … сам процессор будет гораздо сложнее, а выигрыша по сравнению с текущим положением будет не много.
      До сих пор данное направление не блистало, но давайте не будем так будем его так безапелляционно отправлять в корзину. Попыток было не так много, и до сих пор альтернативные подходы имели мало шансов на фоне бурного развития традиционной архитектуры. Я надеюсь, что редукционные машины ещё найдут свою нишу, и даже сам пилю свой проект на эту тему.


      1. kahi4
        28.09.2015 11:15
        +1

        Давай те порассуждаем. Сразу оговорюсь: вполне возможно я просто не проникся идеей, либо не улавливаю какую-то суть, но тут лишь прикидки.

        Первое, что приходит в голову — как программы под такие решения будут храниться в памяти? Как процессор будет понимать, как он должен посчитать то или иное? И если с точки зрения схемотехники в общем то такое реализовать не самое сложное, то с точки зрения микроархитектуры, организации памяти (а именно хранения программ) и собственно написание самих программ становится сложнее и в большинстве случаев будет скатываться к тому, что мы используем сейчас.

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

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

        Что касается искусственного интеллекта и нейронных сетей — я бы тут вообще начал с того, что называть и как реализовывать искусственный интеллект, а нейронная сеть, ИМХО, будет иметь самую эффективную структуру как раз в виде нейронной сети, которая даже близко не напоминает ни фон-неймовскую, ни гарвардскую, ни редукционную.


        1. leshabirukov
          28.09.2015 18:40

          Первое, что приходит в голову — как программы под такие решения будут храниться в памяти?
          Это может быть обычная память, содержимое которой последовательно сканируется на предмет поиска редексов, может быть что-то более специальное, интеллектуальная память способная к простой обработке содержимого.
          Как процессор будет понимать, как он должен посчитать то или иное?

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


  1. 32bit_me
    27.09.2015 19:35
    +8

    > Очевидно, что компьютеры, созданные по таким технологиям превзойдут все современные
    Кому очевидно, если не секрет? Мне лично — нет.


    1. vmn
      28.09.2015 05:22

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


      1. 32bit_me
        28.09.2015 07:50
        +2

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


        1. vmn
          28.09.2015 11:10

          Вот ссылка на видео: www.youtube.com/watch?v=MRuhy3QFOIA — но это больше для обывателя. Вот ещё ссылки: www.lookatme.ru/mag/how-to/inspiration-howitworks/212579-quantum-computers-explained, или вот: compress.ru/article.aspx?id=17653.
          Что же касается фотонных компьютеров, то первое упоминание о них я встретил на страницах журнала «Техника молодёжи»: Понкратов Б. Фотонный мозг. Техника молодёжи, 1990 №10, стр. 10 — 12. С того момента технологии шагнули вперёд и уже появились реальные оптические сигнальные процессоры: www.eplast1.ru/forum/63/1976, dkws.narod.ru/linux/etc/optical/cpu.html.


          1. 32bit_me
            28.09.2015 14:58

            ОК, вот на compress.ru очень грамотная и подробная статья. В ней упоминается только вышеупомянутый алгоритм Шора, факторизация чисел, и больше ничего. В компьютерре тоже когда-то были хорошие статьи про квантовые компьютеры.

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

            А в журнале «Техника-Молодёжи» и про НЛО писали, и про всякий прочий оккультизм, это весьма недостоверный источник информации.


        1. Sychuan
          28.09.2015 12:22

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


  1. fivehouse
    28.09.2015 10:08
    +3

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