Pull to refresh

Comments 24

Замечательная игрушка. С реальным ассемблером практически не работал, но играю с удовольствием. Здорово сделан запуск игры и завершение — загрузка TIS-100 и отключение соответственно.
Радует и кросплатформенность. Кроме Steam, можно приобрести на GOG DRM-free версию (сейчас скидка, обойдётся в 159р).
UFO just landed and posted this here
А как потратить меньше циклов в тестовом задании? Там же нельзя за раз сразу два числа читать?
сразу нет, но данные приходят постоянно и их можно роутить на разные блоки для параллельных вычислений.
Например, у нас сверху идут числа :1,2,3,4
А в принимающем блоке код вроде:

mov up left
mov up right

то число 1 уйдет налево а 2 направо, 3 — снова налево и так далее.
А ядра синхронные? То есть, если написать
mov up, left
mov up, down
А дальше снова объединить потоки данных, они придут синхронно?
Это от многого зависит: числа блоков, которые проходят данные, числа выполняемых над ними операций, синхронизацией между блоками. Вроде как любая инструкция выполняется один такт.

То есть, если вы из одного блока разделяете поток данных на два, затем каждый из двух выполняет одну и ту же операцию и затем потоки объединяются в том же порядке — то да, придут синхронно. Если нет — надо ставить для синхронизации NOP или ещё что-то придумывать.
Все ядра одновременно выполняют очередную команду, на которой находится курсор (у каждого процессора курсор может быть в своей, отличной от всех других процессоров, строке) и затем перемещают курсор на следующую строку, если сама команда не подразумевает перехода (JMP). Если команда последняя в блоке — курсор перескакивает на первую строку. Если команда подразумевает чтение данных из любого порта (верхнего, нижнего, левого, правого), то курсор остаётся на команде чтения пока чтение не станет возможно, то есть пока соответствующий соседний процессор не запишет что-то в порт.

В данном случае, пробрасывая в цикле сначала налево, затем направо, мы добьёмся того, что у нас с отставанием на один такт будут удваиваться числа. Сначала по левой цепочке ядер, затем по правой. И если цепочки одинаковой длины, то и к выходу они будут приходить сначала из левой цепочки, потом из правой. И, если я правильно понял ваш вопрос, то ответ — да, порядок входных данных и соответствующих результатов будет сохранён, а скорость обработки увеличится.
UFO just landed and posted this here
Просто посмотрите все игры этого парня (http://www.zachtronics.com)
Spacechem только одна из них, есть еще из интересных Infinifactory, Codex (тоже на алгоритмизацию) и Kohctpyktop (там нужно полупроводниковые схемы делать)
[offtop] Всегда было интересно, как иностранцы читают название Конструктора — «кохцтпайктоп»...? :)
Есть, IBM BlueGene называется. Только там хардкорнее: сетка трёхмерная и противоположные грани замкнуты. И до кучи, вместо одной системы передачи сообщений сделано три: в соседние ячейки, fat tree и широковещательная сигнальная. Ну и каждая ячейка — это 4х ядерный процессор, поэтому в ней можно распараллелиться более эффективно.
Ctrl+Z — отменить действие
Ctrl+Y — повторить действие

Если не ошибаюсь.
Вообще, очень долго не мог привыкнуть писать в команде MOV в качестве параметров ЧТО, КУДА. Руки упорно набирали в обратном порядке. Тяжкое наследие TASM.
UFO just landed and posted this here
Надо же, угадал создателя игры по скриншоту.
Слегка не работает.
«Congratulations on your first Django-powered page.»
Отличная игра. С удовольствием потратил на неё четверть выходных.

Теперь хочется поработать с настоящим ассемблером на многоядерной машине.
Sign up to leave a comment.

Articles