Важная информация

User Tag List

Показано с 1 по 10 из 10

Тема: memcpy|быстрая пересылка данных

  1. #1
    Veteran
    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Question memcpy|быстрая пересылка данных

    Допустим нам надо перебросить данные (несколько кб) из одной области памяти(их несколько) в другую(а вот назначение постоянно или,если уж совсем идеально, пара-тройка адресов) и сделать это побыстрее, а памяти потратить на процедуру поменьше(килов до 4х отсилы).
    Какие у нас пути?..
    1) Если хранить данные внутри блоков ld rr,NN : push rr, получим наибыстрейшую загрузку(так ли это?) в 10.5 тактов на байт и эпический жор памяти. Врядли применимо в реальных проектах.
    2) портянка из
    Код:
        ld sp,#src
        pop af
        pop bc
        pop de
        pop hl
        exx
        pop bc
        pop de
        pop hl
        ld sp,#dest
        push hl
        push de
        push bc
        exx
        push hl
        push de
        push bc
        push af
    даст 12.5 тактов на байт, но сожрёт много памяти, а источник выбрать не получится. =\
    3) портянка из pop hl:ld hl,(NN). Удовлетворяет и скоростью и выбором источника, но память жрёт тоже неприемлемо.
    4) красивая макра - хорошая замена LDIR'у, стек не трогает - почти 16t/b и немного памяти, но я хочу быстрее =(
    Код:
        macro ldirf
            xor a
            sub c
            and 128-1
            add a,a
            ld ($+4),a
            jp 1f
            align 256
    1
            dup 128
                ldi
            edup
            jp pe,1b
        endm
    На основе варианта №2 накодил самомодифицирующийся цикл с ~15t/b размером даже меньше варианта №4, можно ли ЕЩЁ быстрее? (Да, пока есть память, можно часть переслать по №3, часть ещё как-то, но вопрос не в этом =))

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Veteran Аватар для Hacker VBI
    Регистрация
    05.03.2013
    Адрес
    г. Канев, Украина
    Сообщений
    1,596
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    второй вариант в цикле
    "наличие готового программного обеспечения для нового компьютера в наши дни имеет мало смысла."
    "Еще вопрос - почему на Спектруме большинство звуков на AY булькающие ? Как это исправить ?"
    (c) zst

  4. #3
    Veteran
    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Hacker VBI, у тебя ведь хватило терпения дочитать до конца? =)
    Я так и сделал, но вышло ~15t/b, может я это сделал криво и есть лучшая реализация?

  5. #4
    Master
    Регистрация
    25.03.2013
    Адрес
    г. Лондон, Великобритания
    Сообщений
    948
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    NovaStorm, буквально этот вопрос разжевали неделю назад на WoS: http://www.worldofspectrum.org/forum...ad.php?t=45321
    HackerVBI совершенно прав.
    "introspec" читается как "интроспек". некоторые читают как "интроспец", но я никакой не спец. я спек.

  6. #5
    Veteran
    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    it takes about 13,9 tstates for a byte copy
    Во, вот этото что надо.
    Я пролетел на INC IXH, INC IYH.
    А так этот вопрос-то и у нас обсуждали, но до таких результатов дело не дошло.

  7. #6
    Veteran Аватар для Hacker VBI
    Регистрация
    05.03.2013
    Адрес
    г. Канев, Украина
    Сообщений
    1,596
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    NovaStorm, приходится колебаться между скоростью и обьёмом занимаемой памяти. поэтому рекомендую таки тратить капельку тактов на отработку обвязки djnz
    "наличие готового программного обеспечения для нового компьютера в наши дни имеет мало смысла."
    "Еще вопрос - почему на Спектруме большинство звуков на AY булькающие ? Как это исправить ?"
    (c) zst

  8. #7
    Guru
    Регистрация
    03.01.2006
    Адрес
    Рязань
    Сообщений
    2,935
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NovaStorm Посмотреть сообщение
    Если хранить данные внутри блоков ld rr,NN : push rr, получим наибыстрейшую загрузку(так ли это?) в 10.5 тактов на байт
    Зависит от самих данных. Не все ld в ld: push нужны. А какая задача? В текстовых листалках ld: push вполне юзабельно.
    Взносы в призовой фонд конкурса "Твоя игра 5" принимаются с помощью PaуPal, ЯндексДенег или перевода на карту Сбербанка (см. http://ti5.retropc.ru)

  9. #8
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,533
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    264
    Спасибо Благодарностей получено 
    208
    Поблагодарили
    166 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NovaStorm Посмотреть сообщение
    3) портянка из pop hl:ld hl,(NN). Удовлетворяет и скоростью и выбором источника, но память жрёт тоже неприемлемо.
    смотря где и для чего неприемлемо - емнип так в кустарной переделке под 128K игры Thanatos размотали сразу на весь экран
    Прихожу без разрешения, сею смерть и разрушение...

  10. #9
    Master Аватар для GM BIT
    Регистрация
    27.11.2008
    Адрес
    Красноярск
    Сообщений
    747
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от NovaStorm Посмотреть сообщение
    3) портянка из pop hl:ld hl,(NN).
    улыбнуло

    Откуда - источник, куда - приемник
    Если источники разные а приемник один:
    pop hl: ld (NN),hl

    Если источник один а приемники разные:
    ld hl,(NN): push hl

    Если источник один, и приемник один:
    ld hl,nn: push hl
    либо
    ld sp,nn1
    pop hl,de,bc,af
    ld sp,nn2
    push af,bc,de,hl

    Использовать дополнительно exx, ix, iy - это вата, не такой уж и выигрыш в скорости

    В последнем случае возможна нехилая оптимизация если используются повторяющиеся байты
    Быстрее наверное не получится, если не знаешь какие байты ты переносишь

    Если короче то наверное последний вариант в цикле либо куча ldi (тоже как вариант)
    Последний раз редактировалось GM BIT; 02.11.2013 в 16:30.

  11. #10
    Veteran
    Регистрация
    06.05.2006
    Адрес
    Ливны, Орловская обл
    Сообщений
    1,169
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    0
    Поблагодарили
    0 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    >улыбнуло
    Ах, ну да...
    Это чтобы вражьи агенты не пронюхали. А тут все свои всё поняли. =)
    exx использовать стоит, тк организация цикла жрёт много, а тут за 4+4 такта получаем ещё немного регистров.
    Уже заюзал процедурку, вроде всё пашет, щястя!

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Мега быстрая загрузка с кассеты???
    от ALEXEY.GORDEEV в разделе Софт
    Ответов: 48
    Последнее: 12.05.2021, 01:48
  2. Быстрая буферизация/восстановление в области линии.
    от drbars в разделе Программирование
    Ответов: 12
    Последнее: 14.08.2013, 14:19
  3. Быстрая и медленная память 128к
    от Hacker VBI в разделе Программирование
    Ответов: 21
    Последнее: 27.04.2013, 16:43
  4. Быстрая тригонометрия...
    от ALKO в разделе Программирование
    Ответов: 8
    Последнее: 25.01.2011, 00:29
  5. Ответов: 4
    Последнее: 16.06.2010, 20:37

Ваши права

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