arkashashev
Дата: 21.05.2018 16:15:48
Современная концепция архитектуры компьютеров сформировалась в середине прошлого века и с тех пор применяется практически повсеместно. Действительно, сейчас считается само собой разумеющимся, что любая вычислительная система - это ни что иное, как комбинация активного вычислительного модуля (процессора, контроллера) и пассивной памяти, в которой обычно в одной куче навалены и программы и данные. К этому нерушимому единству контролера и памяти добавляются различные внешние устройства, с помощью которых система общается с внешним миром. По такому принципу сегодня устроено практически все - от контролера кофеварки до системы управления космическими кораблями. Подобная архитектура кажется абсолютно естественной и даже трудно помыслить, что она могла бы быть совершенно другой.
Однако, если вдуматься, становится понятно, что это - самая противоестественная архитектура, какую только можно было придумать. Например, почему процессор должен быть именно один? Собственно, очень быстро человечество пришло к тому, что он и не должен быть один - стали появляться системы с несколькими процессорами. Однако, тут и начались проблемы. Дело в том, что эта архитектура принципиально однопоточная - один процессор - одна память. Попытки сначала запустить несколько потоков на одном процессоре, а потом еще и на нескольких процессорах одновременно, но с общей памятью, быстро стали приводить к сильному усложнению всей вычислительной системы - и железа и программного обеспечения - тут и механизмы переключения потоков и процессов, и необходимость обеспечения согласованного доступа к общей памяти и другим ресурсам. Однако, никто и не подумал, что основная проблема здесь именно в принципиальном ограничении архитектуры. Но сложившаяся концепция к тому времени уже завладела умами и ломать ее никто не решился.
На мой взгляд, большинство описанных могут быть решены созданием новой архитектуры вычислительной системы, изначально параллельной. Набросок такой архитектуры я сейчас и покажу.
Главным элементом новой системы является вычислительная матрица - многомерная решетка, состоящая из огромного количества, десятков и сотен миллионов, соединенных друг с другом примитивных элементов. Каждый из этих элементов состоит из двух частей: элементарной ячейки памяти, способной хранить одно число и элементарного логического модуля (сумматора, мультипликатора, инвертора и т.д.). Каждый примитивный элемент может читать число из ячейки памяти соседних элементов - эти числа являются входами элемента. Один из входов - управляющий, другие - входы данных. На каждом шаге элемент может выполнить одно из двух действий в зависимости от состояния управляющего входа - он может либо выполнить свою логическую операцию над операндами, полученными с входов данных и сохранить результат в своей ячейке памяти. Либо может ничего не делать.
Программа для такой вычислительной системы представляет состоит из нескольких частей. Во первых она задает конфигурацию подграфа вычислительной матрицы, требуемой для выполнения программы. Во вторых - начальные значения ячейка памяти всех примитивных элементов выбранного подграфа. В третьих - для каждой ячейки задает внешние условия модификации - например, для конкретной выбранной ячейки может быть указано, что ей следует присвоить нулевое значение, как только она достигнет определенного значения. При загрузке программы в матрицу загрузчик должен будет найти изоморфный требуемому программой графу свободный подграф матрицы, проинициализировать значения элементов и запустить подграф на выполнение.
Легко видеть, что такая система изначально параллельна - даже само понятие шага программы для нее не настолько очевидно, как для традиционной архитектуры. Кроме того, понятие потока исполнения для нее бессмысленно - появляется новое понятие активного подграфа матрицы, ассоциированного с программой. А раз нет никаких потоков и процессов, то нет и проблемы синхронизации и других проблем многопоточности.
Dima T
Дата: 21.05.2018 16:30:33
Я к тому что проблемы с синхронизацией возникают не из-за особенностей устройства процов, а из-за особенностей решаемых задач, т.е. алгоритм задачи требует синхронизации, а не проц.
hVostt
Дата: 21.05.2018 17:42:21
arkashashev |
---|
А раз нет никаких потоков и процессов, то нет и проблемы синхронизации и других проблем многопоточности. |
«Проблема многопоточности» никак не связана именно с компьютерами. Эта проблема окружает нас везде и повсюду. Попытки устранить эту «проблему» в корне, типа полностью сменив архитектуру, подход и прочие галлюциногенные идеи, всегда меня смешили. Решать надо саму задачу, а не бороться с ветряными мельницами.
arkashashev |
---|
Во первых она задает конфигурацию подграфа |
arkashashev |
---|
начальные значения ячейка памяти всех примитивных элементов |
arkashashev |
---|
для каждой ячейки задает внешние условия модификации |
arkashashev |
---|
загрузчик должен будет найти изоморфный требуемому программой графу свободный подграф матрицы |
Легко видеть, что все эти операции и процессы сами себя сделают за один такт. Нужно просто знать нужное заклинание, освящённый бубен и кровь младенца. А дальше, как-то всё само собой...
arkashashev |
---|
А раз нет никаких потоков и процессов, то нет и проблемы синхронизации и других проблем многопоточности. |
Навыдумывали всяких потоков и процессов. Вот дурачки ))
hVostt
Дата: 21.05.2018 20:20:57
Вообще, идеальных универсальных визуальных средств для проектирования логики я не видел. Обычно под каждый процесс, если вообще требуется, нужен свой UI.
Dima T
Дата: 21.05.2018 20:29:26
Смешались в кучу кони, люди ... (с)
ТС про железо, а тут какие-то фото бизнес-логики. ViPRos, ваш интим с hVostt понятен только вам. Или расшифровывай или занимайтесь этим в другом месте.