Войти
Эзотерический поискФорумСобрание фантазий

Сотни тысяч ядер

#0
18:53, 7 янв. 2013

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

Группа

+ Лирика

Немного теории
Чтобы не оперировать сейчас здесь огромными цифрами, возьму в качестве примера микросхему памяти КР565РУ7 ёмкостью 256кбит.
В ней мы имеем матрицу 512x512 бит. Там самым, можно сказать, что одномоментно в одной строке нам могло было быть доступно сразу 512 битов. А это - 64 байта. Вполне сносная величина для мелких расчётов. Это примерно 16 регистров в архитектуре IA32 и 8 регистров архитектуры IA64.

В современном компьютере большой проблемой является копирование огромных массивов информации. Так как, например, картинка объёмом в 4Мб может пройти обработку процессором лишь узким потоком в 4 или 8 байтов. Чтобы скопировать такую картинку из одного участка памяти в другой, центральному процессору потребуется порядка миллиона циклов чтения и записи данных. И это при том, что в самой микросхеме памяти одновременно доступно в одной строке около миллиона ячеек сразу, из которых к процессору отсеивается лишь несколько десятков единиц.
Конечно, сейчас разработано множество хитрых и умных технологий, вроде всяких кэшей, которые сохраняют часть внешних данных внутри процессора и обеспечивают довольно высокую скорость при правильном построении сложных вычислений.
Однако, эти технологии слишком сложны и дороги, так как на кристалле процессора занимают совсем не последнее место по площади, занимаемой на кристалле.

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

Суть идеи
Допустим, внутри самой микросхемы памяти мы встроим простой, но достаточно умный и производительный процессор.
А саму схему мультиплексирования строк организуем на базе универсальной схемы из ПЛИС.
Встроенный процессор нам внутри микросхемы памяти понадобится в основном для перепрограммирования схемы ПЛИС по командам от центрального процессора.

1. Допустим, нам нужно сдвинуть огромный массив данных на один байт. Как бы удалить этот байт и заместить его и все последующие ячейки соседними значениями.
Если стандартно в компьютере понадобится существенное количество тактов центральному процессору, кратное объёму смещаемой информации. То, следуя моей идее, можно обойтись считанными тактами, лишь построив внутри самой памяти на ПЛИС схему пассивного сдвига. Когда вход одной ячейки подключается к выходу следующей и так по всей цепочке. За один такт можно сдвинуть порядка миллионов бит.
При усложнённом подходе, можно сдвигать не только на байты, но и на считанные биты. Что обычно в компьютере может потребовать ещё более существенное время!

2. Допустим, нужно обработать огромный массив и сложить значения его ячеек с другим массивом.
Следуя моей идее, можно построить на ПЛИС теперь схему, которая будет копировать строку из второго массива в промежуточный буфер памяти. Затем переключится на строку первого целевого массива и сложит значения его ячеек с значениями ячеек промежуточного буфера. После чего, запишет новые значения  сумм обратно в строку первого массива. Тем самым, на одну строку будет уходить уже 2 такта. Но это ничто, по сравнению с обыкновенными приёмами.

3. Допустим, нужно обработать огромный массив изображения и сконвертировать пиксели из 32 битов в 24 бита. К тому же, одновременно выискивая пиксели с указанным цветом и замещая их пикселами другого изображения. Ясно, что интеграции ПЛИС может не хватить на обработку всей строки матрицы памяти (не строки изображения!) за один подход. Здесь можно разбить обработку на несколько тактов.


Общее положение
Довольно щекотливая идея. Так как в обычных домашних условиях исполнить нечто приближённое к подобной схеме памяти практически невозможно! Ведь понадобится несколько тысяч (не говорю про десятки и сотни тысяч) линеек памяти (чем дискретных РУ7 микросхем) и существенное число ПЛИС-микросхем Altera или Xilinx.
К тому же, предлагаемые ПЛИС, учитывая их ограниченное количество внешних выводов, имеют один существенный недостаток: Их программирование занимает значительное время в рамках работы программы.
Тем самым, если разрабатывать архитектуру подобной памяти, её нужно снабдить процессором, который не только будет разбирать шаблон, присланный центральным процессором. Но и перестраивая вентили ПЛИС все сразу за момент...
К тому же, центральный процессор и модули памяти должны работать по специальному протоколу, подобно сетевому. В рамках которого можно описать кратко логику производимых действий с памятью.

P.S.: Гуглю я медленнее, чем мечтаю. Оказывается про память мечты моей уже есть статья. Зря я здесь надрывался...


Эзотерический поискФорумСобрание фантазий

Тема в архиве.