2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5
 
 Re: Четыре оттенка нуля или 5-ти битное кодирование в ЭКА
Сообщение15.11.2019, 21:13 
Заслуженный участник
Аватара пользователя


01/09/13
4656
Dmitriy40 в сообщении #1426170 писал(а):
Если известно что запрошено будет не более скажем миллиона чисел

Вы шутите? Всего лишь миллион? Колоду из скольки карт можно перетасовать таким "генератором"?

-- 15.11.2019, 21:17 --

Dmitriy40 в сообщении #1426170 писал(а):
Вычисление одной итерации требует одного чтения памяти, одной записи памяти, двух сдвигов, двух логических операций - итого в потоке в среднем по такту (все указанные операции могут выполниться параллельно) на каждое слово процессора.

Можно подробнее, пожалуйста?
А лучше бы, прямо работающий пример.

 Профиль  
                  
 
 Re: Четыре оттенка нуля или 5-ти битное кодирование в ЭКА
Сообщение15.11.2019, 23:23 
Заслуженный участник


20/08/14
11766
Россия, Москва
Geen в сообщении #1426176 писал(а):
Dmitriy40 в сообщении #1426170 писал(а):
Если известно что запрошено будет не более скажем миллиона чисел
Вы шутите? Всего лишь миллион? Колоду из скольки карт можно перетасовать таким "генератором"?
Не шучу, Вы спросили, я прикинул, мало ли какие задачи есть. В общем случае генератор выходит слишком требовательным, в основном к памяти (линейно по номеру итерации). Можно ли требования уменьшить более чем вдвое я не вижу как, но тут математики могут подсказать, всё же эти автоматы хорошо исследованы.

(Вопрос про исходник)

Geen в сообщении #1426176 писал(а):
Dmitriy40 в сообщении #1426170 писал(а):
Вычисление одной итерации требует одного чтения памяти, одной записи памяти, двух сдвигов, двух логических операций - итого в потоке в среднем по такту (все указанные операции могут выполниться параллельно) на каждое слово процессора.
Можно подробнее, пожалуйста?
А лучше бы, прямо работающий пример.
Прямо сразу работающий и сразу за такт процессора на слово? Тяжеловато, из-за учёта граничных эффектов между словами и запуска-останова процесса. Внутренний цикл должен выглядеть примерно так (пишу из головы, без проверки):
код: [ скачать ] [ спрятать ]
Используется синтаксис ASM
        mov     EDI,0           ;Предыдущее число справа
        mov     ECX,8000        ;Сколько чисел обрабатывать
        mov     ESI,offset buf  ;Буфер состояния, выравнивание на правый единичный бит
                                ;Порты     Такты (Latency/Throughput)
.iter:  mov     EAX,[ESI]       ;23     3/0.5
        mov     EDX,EAX         ;0156   1/0.25  Часто =0
        mov     EBX,EAX         ;0156   1/0.25  Часто =0
        shld    EAX,EDI,2       ;1      3/1
        shld    EDX,EDI,1       ;1      3/1
        or      EAX,EDX         ;0156   1/0.25
        xor     EAX,EBX         ;0156   1/0.25
        mov     [ESI],EAX       ;4      -/1
        mov     EDI,EBX         ;0156   1/0.25  Часто =0
        add     ESI,4           ;0156   1/0.25
        sub     ECX,1           ;0156   1/0.25
        jnz     .iter           ;06     1/0.5   Часто склеивается с предыдущей командой
Итого если mov и jnz не считать, то получается 1 операция в 2+3 и 4 порты, 2 операции в 1 порт, 4 операции в любой из 0156 портов. В сумме самое долгое по 1 порту, два такта, тогда 4-5 (с jnz) операций в порты 056 вполне раскладываются в два такта.
Итого: два такта на слово, 16 битов на такт. Для x64 будет ровно то же, но 64 битные регистры и соответственно 32 бита на такт.
В один такт не уложился, оказалось забыл что shld не параллелится, да ещё и про add/sub для цикла не подумал. Ну два такта тоже неплохо.
На AVX переписывать лень, там добавится перестановка 64-бит слов (3/1 тактов, но в параллель), плюс нет двойных сдвигов, придётся добавлять два сдвига и пару-тройку and/or, ну и портов запуска меньше, лишь три. Ориентировочно 4-5 тактов, но уже на слово 256 битов.
PS. Все цифры для имеющегося у меня Haswell. Для более старых цифры могут быть хуже (и мне не интересны), для более новых лучше (но мне не на чем проверить и использовать), надо смотреть конкретно.

 Профиль  
                  
 
 Re: Четыре оттенка нуля или 5-ти битное кодирование в ЭКА
Сообщение16.11.2019, 09:09 
Аватара пользователя


12/10/16
637
Almaty, Kazakhstan
Вот здесь частично реализована декомкозиция, есть четыре оттенка (цвета) единицы, но нет четырёхцветности нуля:
https://sciencevsmagic.net/eca/#30

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 63 ]  На страницу Пред.  1, 2, 3, 4, 5

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group