Технологическая сингулярность

Что это значит?

Обратимься к Википедии:

Технологи́ческая сингуля́рность — гипотетический момент, по прошествии которого, по мнению сторонников данной концепции, технический прогресс станет настолько быстрым и сложным, что окажется недоступным пониманию[1][2][3], предположительно следующий после создания искусственного интеллекта и самовоспроизводящихся машин, интеграции человека с вычислительными машинами, либо значительного скачкообразного увеличения возможностей человеческого мозга за счёт биотехнологий.

По некоторым прогнозам, технологическая сингулярность может наступить уже около 2030 года[4][5]. Сторонники теории технологической сингулярности считают, что если возникнет принципиально отличный от человеческого разум (постчеловек), дальнейшую судьбу цивилизации невозможно предсказать, опираясь на человеческое (социальное) поведение.

http://ru.wikipedia.org/wiki/Технологическая_сингулярность

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

Мне относительно легко было отказаться от хорошего багажа знаний и опыта MS-Windows технологий, хотя сам переход на Linux оказался не таким уж и простым. Мне так же не сложно было удержать себя от изучения XMega и STM8. Но мне намного сложнее оказалось выкинуть на помойку AVR.-хлам

Ну, не возможно все знать досконально!

Я остановился на знаниях двух технологий — MSP430 и Cortex. Попробую объяснить почему именно этих. Для этого мне придется откатиться назад примерно на полвека.

Вот, мы говорим, Internet и UNIX — это два брата близнеца, которые выросли в одно время в одних яслях. Мы так же говорим, что Майкрософт только к версии Windows 3.11 поняла мощь сетевых технологий и наспех начала с помощью скотча и жвачки прикручивать к Венде то, что ей изначально было чуждым. Впрочем, оставим Венду в покое…

Мы говорим, что язык С и DEC-овская архитектура (PDP-7, 11 и их производные) — это тоже два брата-близнеца. Один из них хард, другой — софт. Их общая характерная черта, я бы даже сказал более сильно — родовая отметина, — это фон-Неймановский класс.

В свое время я очень ревностно доказывал на форумах, что AVR-архитектура была разработана с учетом особенностей языка С. По крайней мере я об этом читал где-то в книжках. Но конкретно что это за такие «особенности», там ничего про них сказано не было. И до сих пор я так и не знаю. Теперь, что называется — задним умом, понимаю, что был не прав в спорах с коллегами. Признаю. (Ну, вот, покаялся. И вроде как легче даже стало.)

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

И в самом деле, у AVR имеется три адресных пространства памяти:

  • flash
  • EEPROM
  • RAM

flash-память предназначена только для программ. В качестве исключения в ней могут быть записаны данные-константы. Я еще раз подчеркну, и это очень важно! — «в качестве исключения». Чуть позже я объясню этот момент более подробно.

EEPROM — ну, тут все предельно прозрачно. Это аналог внешней памяти. Что приятно отметить — памяти не с последовательным доступом, а со случайным. Как к оперативной, но только энергонезависимой.

RAM — оперативная память, предназначена для хранения изменяемых переменных, для реализации стека. Но выполнять отсюда программу — никак! Даже в виде исключения.

В общем, AVR — это типичный представитель Гарвардской архитектуры. Фон-Неймановская архитектура предполагает использование одних и тех же шин и для команд, и для данных. И как следствие — единое адресное пространство и для программ, и для данных.

Таким образом, для процессоров фон-Неймановской архитектуры не имеет никакого значения откуда выполнять программу — из flash или из RAM. Не имеет значения так же и то, где лежат данные — во flash или в RAM. Во всех случаях код (или точнее — способ написания программы) будет один и тот же.

Допустим, мы в своей программе объявляем несколько переменных константными. Константные переменные  — да, я знаю, что это звучит дико. Меня тоже это термин бесил. Что делать? Придется потерпеть.

  const int SoccerPlayers = 22;
  const int year = 365;
  const int leapyear = 366;

Что делает в этом случае компилятор MSP430? Он размещает эти константные переменные во flash-памяти. Поскольку, эти переменные не изменяются, а процу совершенно без разницы в каком типе памяти (flash или RAM) они будут размещены, то компилятор их позиционирует туда, где им самое место быть — во flash. И оно работает!

А в этом случае что делает AVR? Язык С предполагает только одно адресное пространство. Точнее, «ему даже в голову не приходит», что адресных пространств может быть несколько! Но ведь работать как-то надо. Поэтому у вас есть два пути.

Первый — использовать специальные библиотеки, функции которых позволят вам обращаться к иному адресному пространству.

Второй — позволить загрузчику (startup.s) переносить значения этих константных переменных в оперативную память каждый раз после сброса процессора.

На мой взгляд оба способа — это просто какие-то костыли!

Первый способ не позволит просто вот так взять и написать прозрачный код типа:

  teams = men_in_craud / SoccerPlayer;
  nextTime = now + year;

вам придется использовать что-то типа:

#include <avr/pgmspace.h>
...

  teams = men_in_craud / pgm_read_byte(SoccerPlayer);
  nextTime = now + pgm_read_word(year);

Но это все фигня! Подумаешь, пришлось добавить в код функцию!

Ягодки начинаются там, где вам предстоит обрабатывать массивы констант, например — константные строки сообщений об ошибках. А еще лучше того — массивы константных строк. Вот тут придется смотреть в оба, чтоб случайно чего-нибудь не накосячить! Попробуйте на досуге поиграться с массивом сообщений для пользователя, и вы сразу поймете глубину залегания этой проблемы. (Вот тут, я писал как бороться с этой проблемой http://forum.e-lug.ru/viewtopic.php?id=484)

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

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

Ведь этих демонов изначально нет в архитектуре MSP430. Там все просто и прозрачно — бери да, делай! MSP430 — это простая промышленная табуретка без наворотов и финтиплюшек.

Иначе говоря, для себя я твердо убедился, что из двух архитектур лучшими параметрами обладает MSP430. AVR — тоже неплохая архитектура. Но до определенного момента, после которого начинаются хождения по граблям.

Есть классика: Internet + Unix/Linux, фон-Неймановская архитектура и язык С. Изучайте классику, и не отвлекайтесь на сладкие речи лукавых Шindows-ов и AVR-ов. И тогда у вас будет все органично срастаться само собой, вам не понадобятся костыли и бубны.

Я ничего не сказал про вторую архитектуру, которую я решил оставить в своем арсенале. Это — Cortex.

Считается, что Cortex принадлежит к Гарвардской архитектуре. Но это не совсем так. Да, у Кортекса раздельные шины для команд и данных. А точнее даже не просто две шины, как это принято считать в классической Гарвардской модели, а целая матрица из шести шин!

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

На самом деле, такая архитектура не считается ни Гарвардской, и ни фон-Неймановской, а — гибридной. Иначе говоря, хардверное исполнение Кортексов — выполненно по Гарвардски, а программная модель у них — фон-Неймановская. Таким образом, гибридная архитектура обладает достоинствами и той, и другой архитектур, что есть очень даже хорошо!

Ну и надо отметить, что ядро Кортекса сейчас очень интенсивно развивается. Намного интенсивнее, чем другие ядра (XMEGA, STM8, AVR32) А это значит, что было бы глупо упускать это из вида.

Что же касается того факта, что AVR-ки способны работать при 5В, а STM32 и MSP430 — только при 3.3В, ну так это ж не проблема сейчас! Это раньше внешние (периферийные) микросхемы и источники питания были почти все 5-вольтовые, а 3-вольтовых было сложно найти. И это тоже склоняло чашу весов в сторону AVR. Но сейчас этого нет! Пять вольт — это совсем необязательное требование к микропроцессору!

Мне еще могут возразить то, что иметь три разных вида памяти в одном чипе — это очень хорошо как с точки зрения защиты от копирования, так и с точки зрения хранения всяких-там уставок.Но с появлением у Texas Instruments микроконтроллеров с памятью FRAM этот вопрос разбивает вообще в дребезги! FRAM работает так же быстро, как оперативная память, не теряет своих данных при отключении питания и совсем не изнашивается как EEPROM. И все это благополучие в едином адресном пространстве — никаких костылей и бубнов! Чего еще большего желать!

Более того, у этих процов вы сами регулируете размер оперативной и размер постоянной памяти. Вам дан общий объем FRAM-памяти, и вы сами определяете сколько памяти будет работать как RAM, а сколько как ROM.  Если вам нужен аналог EEPROM — откройте нужную область FRAM-памяти, измените значения, и снова сделайте ее read-only.

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

http://ru.wikipedia.org/wiki/Гарвардская_архитектура
http://ru.wikipedia.org/wiki/Архитектура_фон_Неймана

 

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

http://magov.net/blog/8061.html

Большая статья (или книга?) про сингулярность (еще не читал):
http://transhumanism.org/languages/russian/dawnofsingularity/Deering.htm

Практический совет, как можно отодвинуть срыв в сингулярность:
http://habrahabr.ru/post/111998/

2 responses to “Технологическая сингулярность

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

    Описываемая Вами хорошая архитектура микроконтроллеров вряд-ли победит, чаще всего побеждает не лучшее, а наиболее приспособленное под какие-либо условия. Я вот хотел делать контроллер клавиатуры на MSP430, да в итоге делаю на AT90USB, это наиболее подходящая платформа для этого, для этих микроконтроллеров даже программатор не нужен, в них еще на заводе прошивают загрузчик, для них есть изумительная библиотека LUFA. А LaunchPad MSP430 покупают только потому, что их продают ниже себестоимости, просто халява.

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

    Хотя общая тенденция показывает, что развитие есть, правда не такое быстрое, как нам обещают фантасты со своей технологической сингулярностью (а обещать что-либо на 20 лет вперед, это все равно что и на 100 и 1000 лет). По всему миру открываются FabLab-ы, продаются конструкторы для построения роботов и любых других устройств — Makeblock (кстати, основан он на Arduino), всё удешевляются 3D-принтеры, так глядишь, через несколько лет все будут покупать их домой, как сейчас обычные принтеры. Видимо стоит сделать виток назад, что бы потом пойти дальше уже на более высоком уровне. Так что не верю я, что сингулярность наступит в каком-то обозримом будущем, для этого нет предпосылок, люди не стали создавать что-то намного лучше, чем раньше, скорее наоборот.

    • >> Я вот хотел делать контроллер клавиатуры на MSP430, да в итоге делаю на AT90USB, это наиболее подходящая платформа для этого, для этих микроконтроллеров даже программатор не нужен, в них еще на заводе прошивают загрузчик…

      Не буду оспаривать выбор, уточню только, что в MSP430 тоже есть встроенный закгрузчик (BSL), работающий по последовательному каналу. В Кортексах — STM32F, LPC11/13/17xx тоже встроенный загрузчик имеется. Тоже ничего не нужно, кроме как подцепиться к компу по последовательному интерфейсу. Нужно только установить трехвольтовую микросхему, например, MAX3232. А для чипов, у которых есть встроенный USB, то и по USB можно. В этом случае вообще кроме разъема ничего не надо. Мир не стоит на месте.

      Вот, к стаи, сегодня на Хабре статья про такой программатор — http://habrahabr.ru/post/164381/

      >> А LaunchPad MSP430 покупают только потому, что их продают ниже себестоимости, просто халява.

      Да, так оно и есть. Для старта — самое то! А потом, когда попрет, можно самому что-нибудь собрать. Программаторы не сложнее чем для AVR-ок. Есть BSL-программаторы, есть JTAG-программаторы. Хочешь — на микроконтроллерах, хочешь — на 74HC244. Сейчас цены на MSP430 и AVR почти сравнялись. Для новичков в микроконтроллерах, TI выпускает DIP-овские корпуса. Поиграться, понять дух MSP430 — милое дело! А уж как приятно писать на языке С для MSP430… м-м! Пальчики оближешь! Только чтобы это прочувствовать, нужно собрать хотя бы пару-тройку проектов.

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

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

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

Оставьте комментарий