Идея сабжа пришла на днях, не уверен, что тема не затрагивалась ранее. Поэтому, извиняюсь, если не достаточно погуглил, и топик тянет на бородатый баян.
В двух словах: создаем процессор с программируемой логикой, как в ПЛИСах, но с динамической конфигурацией. Программа будет представлять из себя не последовательность команд, а последовательность конфигураций.
Сейчас все процессоры имеют определенный набор команд. Любая программа, на любом языке программирования превращается именно в последовательность этих команд (естественно не считая виртуальные платформы, например Java). Например, на C++ будет всего один оператор для вычисления синуса, но компилятор реализует это вычисление из множества последовательных элементарных команд процессора.
Есть ПЛИС, сконфигурировав логику которой, можно вычислять синус за один! такт. Но так, как логическая структура задается при старте, а иногда и жестко прошивается в ПЛИС, то в итоге мы кроме вычисления синуса больше ничего не сможем.
Создать процессор с ядром из достаточного количества (сколько именно надо даже не представляю) элементарных логических элементов – «И», «НЕ», «ИЛИ»… Но при этом без заранее заданных связей между ними. Связи будут осуществляться динамически, причем в любом виде – т.е. любой элемент может быть связан с любым другим. Что получаем. Нужно вычислить синус – загружаем соответствующую конфигурацию. Причем можно вычислять не только математические функции, а что угодно, например, работать с регулярными выражениями. Компилятор просто должен будет превратить высокоуровневую команду/набор команд в оптимальную конфигурацию. В итоге программа превращается не в набор процессорных команд, а в набор конфигураций ядра.
На практике можно добавлять такое ядро к классическим, и выполнять «жидкие» вычисления по необходимости.
Создавать не алгоритм решения на конкретной вычислительной машине, а создавать вычислительную машину для решения конкретной задачи.
В общем, идею изложил. С удовольствием выслушаю мнение хабра-сообщества.
З.Ы. Liquid core, liquid computing – звучит то как!
В двух словах: создаем процессор с программируемой логикой, как в ПЛИСах, но с динамической конфигурацией. Программа будет представлять из себя не последовательность команд, а последовательность конфигураций.
Что имеем
Сейчас все процессоры имеют определенный набор команд. Любая программа, на любом языке программирования превращается именно в последовательность этих команд (естественно не считая виртуальные платформы, например Java). Например, на C++ будет всего один оператор для вычисления синуса, но компилятор реализует это вычисление из множества последовательных элементарных команд процессора.
Есть ПЛИС, сконфигурировав логику которой, можно вычислять синус за один! такт. Но так, как логическая структура задается при старте, а иногда и жестко прошивается в ПЛИС, то в итоге мы кроме вычисления синуса больше ничего не сможем.
Что предлагаю
Создать процессор с ядром из достаточного количества (сколько именно надо даже не представляю) элементарных логических элементов – «И», «НЕ», «ИЛИ»… Но при этом без заранее заданных связей между ними. Связи будут осуществляться динамически, причем в любом виде – т.е. любой элемент может быть связан с любым другим. Что получаем. Нужно вычислить синус – загружаем соответствующую конфигурацию. Причем можно вычислять не только математические функции, а что угодно, например, работать с регулярными выражениями. Компилятор просто должен будет превратить высокоуровневую команду/набор команд в оптимальную конфигурацию. В итоге программа превращается не в набор процессорных команд, а в набор конфигураций ядра.
На практике можно добавлять такое ядро к классическим, и выполнять «жидкие» вычисления по необходимости.
Общая суть «жидких вычислений»
Создавать не алгоритм решения на конкретной вычислительной машине, а создавать вычислительную машину для решения конкретной задачи.
В общем, идею изложил. С удовольствием выслушаю мнение хабра-сообщества.
З.Ы. Liquid core, liquid computing – звучит то как!