Можно ли эффективно вычислять клеточные автоматы с произвольными вставками на GPU? - PullRequest
0 голосов
/ 06 декабря 2018

Сотовый автомат

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

111 -> 0
110 -> 0
101 -> 0
100 -> 1
011 -> 1
010 -> 1
001 -> 1
000 -> 0

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

rule 34

Сотовый автомат со вставками и удалениями

Теперь предположим, что у нас есть другой вид автоматов, где размер массива может динамически изменяться.изменить, и по каким определенным правилам вводится новый бит.Например:

111 -> 0
110 -> 00
101 -> 
100 -> 1
011 -> 00
010 -> 
001 -> 1
000 -> 0

Это похоже на предыдущее вычисление, за исключением того, что теперь, когда в массиве есть последовательность 110, должен переключаться не только средний бит, но и новый бит,0, должен быть вставлен прямо рядом с ним.Более того, когда у нас есть последовательность 101, средний бит должен быть удален.

Очевидно, что реализация этой новой задачи с использованием той же структуры данных, массива, была бы запретительной, поскольку вставка бита в середину массива требует сдвига всех задних элементов на 1 индекс вправо, что было бы чрезвычайно дорого.

Вопрос

Существует ли какая-нибудь умная структура данных или общий подход, позволяющий эффективно выполнять эти вычисления на графическом процессоре?

1 Ответ

0 голосов
/ 06 декабря 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...