Интересно, достаточно ли хороши массивно-параллельные вычислительные блоки, предоставляемые в настоящее время в графических картах (например, программируемые в OpenCL ), чтобы эффективно моделировать одномерные клеточные автоматы (или, может быть, двумерные клеточные автоматы?).
Если мы выберем любую конечную сетку, которая поместится в памяти чипа, можем ли мы ожидать, что один переход сотового автомата, определенный на этой сетке, будет вычислен за (квази) постоянное время?
Я предполагаю, что двумерные сотовые автоматы будут требовать большей пропускной способности для связи между различными частями микросхем, чем одномерные автоматы.
Меня также интересует тот же вопрос в случае программирования на ПЛИС или пользовательских чипов.
computer-architecture
parallel-computing
cellular-automata
Стефан Хименес
источник
источник
Ответы:
Отличный вопрос. Я верю, что ответ - да.
Развитие клеточного автомата по существу эквивалентно выполнению трафаретных вычислений. На некоторой 1D, 2D или 3D сетке последовательные значения точек (или ячеек) вычисляются на основе последнего значения окрестности точки. В простом 1D CA эта окрестность может быть ячейкой и двумя ячейками слева и справа. Есть много примеров трафаретных вычислений, выполняемых на графических процессорах; Например, набор тестов ORNL для SHOC для OpenCL / CUDA содержит пример 2D-трафарета.
Основная идея состоит в том, чтобы каждый поток получал локальную копию окрестности для нескольких точек, а затем вычислял следующие значения для точек, определенных этой окрестностью. При надлежащем использовании иерархии памяти, например, в CUDA (регистры, общие, постоянные, текстурные и глобальные запоминающие устройства) и модели обработки SIMT (например, путем соответствующего вычисления функции перехода без чрезмерного расхождения деформации), может быть достигнута хорошая производительность.
Этот ответ был бы намного лучше, если бы я привел пример, но я слишком занят, чтобы писать какой-либо код прямо сейчас ... Но в теории, я думаю, должно быть целесообразно эффективно моделировать CA на графических процессорах, моделируя их после трафарета. вычисления. Однако при написании хороших трафаретных вычислений для графических процессоров необходимо учитывать множество факторов.
источник
Что бы вы ни делали, вычисление следующего состояния для клеточного автомата требует столько вычислений, сколько ячеек в автомате. Таким образом, чтобы получить постоянное время, вам нужно столько вычислительных ядер, сколько имеется ячеек.
Их в GPU в настоящее время не более нескольких тысяч, в то время как вычисление следующего состояния настолько просто, что я ожидаю, что результат будет привязан к вводу-выводу, т.е. вы можете получить очень хорошее приближение времени, которое нужно просто рассмотреть необходимо перемещение данных (и если это не очень хорошее приближение, либо реализация имеет неэффективность, либо архитектура не подходит, но это было бы очень удивительно).
Для FPGA этот вопрос является более сложным и, вероятно, будет зависеть от сочетания памяти и доступных вычислительных единиц. Если я не слишком далеко, у вас не будет достаточно памяти, чтобы держать все устройства занятыми, и если вы полагаетесь на внешнюю память, вы находитесь в одном месте с GPU, пропускная способность памяти будет ограничивающим фактором, и я бы не стал удивитесь, если придет к выводу, что нет никакого преимущества перед GPU. (Обратите внимание, что хотя я работал с FPGA, это было много лет назад, сейчас могут быть модели FPGA с правильным сочетанием).
ASIC предлагает больше гибкости. Вы можете легко иметь систолическую реализацию (но с двунаправленным потоком данных, некоторые систолические обычно ограничены однонаправленным потоком данных), каждая физическая ячейка является одной логической единицей: бит памяти и необходимая логика для вычисления ее следующего состояния и размещается так что это физический сосед, это логично. Вы, очевидно, находитесь в царстве постоянного времени. В зависимости от того, какие жесткие макросы у вас есть, вам может быть лучше быть немного менее очевидным и иметь физические ячейки, которые перегруппируют несколько логических ячеек. Цель состоит в том, чтобы максимизировать то, что делается в одной микросхеме, иными словами, минимизировать связь с внешней микросхемой, поскольку, как только ваши потребности в связи будут пропорциональны количеству ячеек, вы будете ограничены в пропускной способности. Да, это означает, что если вам нужно посмотреть на все ячейки для каждого шага, Вы, вероятно, не намного лучше, чем с GPU. (Полный кастом обеспечит только лучшую интеграцию, то есть больше ячеек на чип).
Резюме: - если вы хотите посмотреть на все промежуточные состояния, GPU является наиболее эффективным подходом - если вы этого не сделаете, вам нужен объем, чтобы оправдать ASIC, чтобы иметь что-то лучшее, FPGA, вероятно, не даст достаточно преимуществ, если они есть какой-либо.
источник
Интересно, достаточно ли массивно параллельных вычислительных блоков, представленных в графических картах, в настоящее время достаточно для эффективного моделирования одномерных клеточных автоматов (или, может быть, двумерных клеточных автоматов?).
В целом, да, вычисления на GPU - лучшая альтернатива стандартному оборудованию, доступному для всех.
со стороны FPGA и ASIC, я знаю, что есть исследования по построению физического CA в виде сетки логических элементов с состояниями, все связаны своими соседями; т.е. систолические массивы . Идея состояла бы в том, чтобы больше не использовать глобальную память, а вместо этого полагаться на состояния каждого узла в сетке. Машина такого типа была бы революционной с тех пор, как мы могли бы перестать говорить о компьютере, имитирующем ЦС, и начать говорить о ЦС, работающем как компьютер (некоторые ЦА завершаются).
источник