Запись после чтения в ОЗУ

Тема в разделе "WASM.BEGINNERS", создана пользователем Ruins007, 17 окт 2017.

Метки:
  1. Ruins007

    Ruins007 New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2017
    Сообщения:
    17
    Hello world
    как мне стало известно, запись сразу же после чтения происходит куда быстрее, чем это делает тот же самый кэш в порядке записи самого старого обращения. Есть ли в наборе x86 команда для чтения и последующей записи в эту же ячейку.
     
  2. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    Ruins007,

    А откуда известно, тоесть вы выполнили профайл тесты ?

    Есть запись-чтение как единое целое, это атомарные операции. xchg etc.
     
  3. Ruins007

    Ruins007 New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2017
    Сообщения:
    17
    Нет, я прочитал про наличие таймингов и принципы работы ddr 3.

    xchg насколько я понимаю всё так же будет прогружать кэш как и собственно mov.
     
  4. Ruins007

    Ruins007 New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2017
    Сообщения:
    17
    В общем опишу задумку: есть задержка на открытие строки и столбца. Когда ячейка открыта, можно читать и записывать. Потом идёт закрытие. Обычно кэш отдельно читает области и отдельно записывает.

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

    Тогда мне нужно: открыл-прочитал-записал-закрыл
    Но кэш работает по принципу: открыл-прочитал-закрыл-открыл-записал-закрыл.

    Более того, он ещё и выгрузит строку, с которой я работаю и которая мне больше не нужна, самой последней.
     
  5. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    631
    Адрес:
    Russia
    Такие трюки, насколько я знаю, стали возможны уже с 486 процессоров (гугл "invalidate cache 486"). Одно НО - это возможно только в реальном режиме. Под виндой вам никто с кэшем баловаться не даст.

    https://books.google.ru/books?id=_W...sc=y#v=onepage&q=invalidate cache 486&f=false

    Типы памяти здесь не причем. То, как работает ddr3, со стороны процессора, имхо, не доступно никак, это осуществляется чипсетом/контроллером памяти.
     
  6. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    Ошибаетесь. Точнее, то что запись быстрее, сразу после чтения, это да, но это вам ничего не даст. Кеш работает на порядки быстрее, чем физ память. Вы просто видимо берете какую-то гипотетическую cache-miss ситуацию.
    В общем , вы бы лучше написали, че вы хотите заоптимизировать.

    А по поводу инструкций, ну вот на вскидку:
    Есть инструкции, которые могут сделать предварительную загрузку данных из памяти в кеш. Например "prefetch\prefetchw"
    Так же есть например инструкция "movnti" - но это не гарантирует что запись будет сквозной (без кеша). Это только "Хинт", то есть подсказка. Ну и да - по факту, вы от этого выигрыша не получите (или он будет совсем мизерный в реальной задаче).
    И третий вариант - поиграться с PAGE TABLE. Там у страниц есть соответствующие биты (write through)
     
    Ruins007 нравится это.
  7. Ruins007

    Ruins007 New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2017
    Сообщения:
    17
    Спасибо большое за наводки. Но вот по поводу выигрыша не получу, эт вы зря. К примеру сдвиг пикселей с кэшируемым шагом, один пиксель прочитал и в кэш, а на его место уже другой, вот вам и профит в реальной задаче.
     
  8. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    Ruins007, ага, я так и знал, что вопрос в графике, как в воду глядел, но решил промолчать .
    В реальной задаче, современный контроллер памяти графической карты поддерживает режимы Tilling + USWC (uncached speculative write combine) + а так же специальные кеши TLB для хранения таблиц страниц. Там это все уже учтено. Или вы делаете свой графический контроллер?
     
  9. Ruins007

    Ruins007 New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2017
    Сообщения:
    17
    TermoSINteZ, ну графика это так, что первое в голову пришло. Сжатие к примеру почти тем же самым занимается или сортировка, криптография, отложенные вычисления. Можно к примеру при запуске приложения файл с настройками читать и тут же записывать по верх данные от устройства/любую полезную информацию заместо освобождения и по новой выделения памяти. Если приглядеться, то в любом приложении более не используемые области можно найти, а память как известно бутылочное горлышко производительности.

    p.s. не подскажите где можно про драйвер фс почитать, да свой написать? базовый уровень open()/read()/write()/close()?

    p.s.s. и таки да, я пытаюсь придумать велосипед для своего тайлового рендера на cuda кстати нашёл тут интересный, но не дописанный документик от исследователей открытого драйвера noveu для видеокарт nvidia. Может кому пригодится. https://media.readthedocs.org/pdf/envytools/latest/envytools.pdf
     
    _edge нравится это.
  10. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    631
    Адрес:
    Russia
    Ruins007, дайте еще информации по реверсу \ исследованиям драйверов для видеокарт, пжл.

    Драйвер ФС писать очень сложно, + вы же уже в многозадачной среде запускаетесь, со ее драйвером \ кэшем ФС, и механизмом виртуальной памяти.
     
  11. Ruins007

    Ruins007 New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2017
    Сообщения:
    17
    _edge, а у меня больше и нету, сам только начинаю пробовать. Дальше только linux устанавливать , а там у интела есть открытый драйвер https://01.org/linuxgraphics и как раз noveau работает. Только надо будет сначала разобраться как их смотреть.

    Драйвер ФС, насколько я знаю есть виртуальные диски работающие как раз на отдельных дровах и вроде как есть Dokan - оболочка ФС для winodows. Но мне бы на скорую руку, не столько саму ФС обслуживаемую ОС, сколько возможность самому управлять приходящим потоком байт, возможность без класстерно хранить информацию и начинать останавливать чтение. Ну это в идеале, а пока мне бы информацию как бы так запустить мой код в режиме ядра под windows и справочник по доступным функциям. Общее представление об особенностях работы в режиме ядра у меня есть, но постоянно пишут, что качай DDK там разберёшься как-нибудь.
     
  12. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    631
    Адрес:
    Russia
    Тут если нужен низкоуровневый доступ, либо работать вне ОС (как вариант, старт с загрузочной дискеты флешки, либо долго и болезненно штудировать DDK и соглашаться с ограничениями, которые будут при работе в ОС.
     
  13. _edge

    _edge Well-Known Member

    Публикаций:
    1
    Регистрация:
    29 окт 2004
    Сообщения:
    631
    Адрес:
    Russia
  14. TermoSINteZ

    TermoSINteZ Синоби даоса Команда форума

    Публикаций:
    2
    Регистрация:
    11 июн 2004
    Сообщения:
    3.546
    Адрес:
    Russia
    Ну как минимум AMD сорцы свои открывала (пусть и не для самых новых).
    + еще смотря что вас интересует - какая ОС.
    Если винда - курите WDDM