Hello world как мне стало известно, запись сразу же после чтения происходит куда быстрее, чем это делает тот же самый кэш в порядке записи самого старого обращения. Есть ли в наборе x86 команда для чтения и последующей записи в эту же ячейку.
Ruins007, А откуда известно, тоесть вы выполнили профайл тесты ? Есть запись-чтение как единое целое, это атомарные операции. xchg etc.
Нет, я прочитал про наличие таймингов и принципы работы ddr 3. xchg насколько я понимаю всё так же будет прогружать кэш как и собственно mov.
В общем опишу задумку: есть задержка на открытие строки и столбца. Когда ячейка открыта, можно читать и записывать. Потом идёт закрытие. Обычно кэш отдельно читает области и отдельно записывает. Так вот, если мне нужно значение из памяти, при этом у меня уже есть нужное значение для этой ячейки Тогда мне нужно: открыл-прочитал-записал-закрыл Но кэш работает по принципу: открыл-прочитал-закрыл-открыл-записал-закрыл. Более того, он ещё и выгрузит строку, с которой я работаю и которая мне больше не нужна, самой последней.
Такие трюки, насколько я знаю, стали возможны уже с 486 процессоров (гугл "invalidate cache 486"). Одно НО - это возможно только в реальном режиме. Под виндой вам никто с кэшем баловаться не даст. https://books.google.ru/books?id=_W...sc=y#v=onepage&q=invalidate cache 486&f=false Типы памяти здесь не причем. То, как работает ddr3, со стороны процессора, имхо, не доступно никак, это осуществляется чипсетом/контроллером памяти.
Ошибаетесь. Точнее, то что запись быстрее, сразу после чтения, это да, но это вам ничего не даст. Кеш работает на порядки быстрее, чем физ память. Вы просто видимо берете какую-то гипотетическую cache-miss ситуацию. В общем , вы бы лучше написали, че вы хотите заоптимизировать. А по поводу инструкций, ну вот на вскидку: Есть инструкции, которые могут сделать предварительную загрузку данных из памяти в кеш. Например "prefetch\prefetchw" Так же есть например инструкция "movnti" - но это не гарантирует что запись будет сквозной (без кеша). Это только "Хинт", то есть подсказка. Ну и да - по факту, вы от этого выигрыша не получите (или он будет совсем мизерный в реальной задаче). И третий вариант - поиграться с PAGE TABLE. Там у страниц есть соответствующие биты (write through)
Спасибо большое за наводки. Но вот по поводу выигрыша не получу, эт вы зря. К примеру сдвиг пикселей с кэшируемым шагом, один пиксель прочитал и в кэш, а на его место уже другой, вот вам и профит в реальной задаче.
Ruins007, ага, я так и знал, что вопрос в графике, как в воду глядел, но решил промолчать . В реальной задаче, современный контроллер памяти графической карты поддерживает режимы Tilling + USWC (uncached speculative write combine) + а так же специальные кеши TLB для хранения таблиц страниц. Там это все уже учтено. Или вы делаете свой графический контроллер?
TermoSINteZ, ну графика это так, что первое в голову пришло. Сжатие к примеру почти тем же самым занимается или сортировка, криптография, отложенные вычисления. Можно к примеру при запуске приложения файл с настройками читать и тут же записывать по верх данные от устройства/любую полезную информацию заместо освобождения и по новой выделения памяти. Если приглядеться, то в любом приложении более не используемые области можно найти, а память как известно бутылочное горлышко производительности. p.s. не подскажите где можно про драйвер фс почитать, да свой написать? базовый уровень open()/read()/write()/close()? p.s.s. и таки да, я пытаюсь придумать велосипед для своего тайлового рендера на cuda кстати нашёл тут интересный, но не дописанный документик от исследователей открытого драйвера noveu для видеокарт nvidia. Может кому пригодится. https://media.readthedocs.org/pdf/envytools/latest/envytools.pdf
Ruins007, дайте еще информации по реверсу \ исследованиям драйверов для видеокарт, пжл. Драйвер ФС писать очень сложно, + вы же уже в многозадачной среде запускаетесь, со ее драйвером \ кэшем ФС, и механизмом виртуальной памяти.
_edge, а у меня больше и нету, сам только начинаю пробовать. Дальше только linux устанавливать , а там у интела есть открытый драйвер https://01.org/linuxgraphics и как раз noveau работает. Только надо будет сначала разобраться как их смотреть. Драйвер ФС, насколько я знаю есть виртуальные диски работающие как раз на отдельных дровах и вроде как есть Dokan - оболочка ФС для winodows. Но мне бы на скорую руку, не столько саму ФС обслуживаемую ОС, сколько возможность самому управлять приходящим потоком байт, возможность без класстерно хранить информацию и начинать останавливать чтение. Ну это в идеале, а пока мне бы информацию как бы так запустить мой код в режиме ядра под windows и справочник по доступным функциям. Общее представление об особенностях работы в режиме ядра у меня есть, но постоянно пишут, что качай DDK там разберёшься как-нибудь.
Тут если нужен низкоуровневый доступ, либо работать вне ОС (как вариант, старт с загрузочной дискеты флешки, либо долго и болезненно штудировать DDK и соглашаться с ограничениями, которые будут при работе в ОС.
По др-рам, случайно (если все в этой жизни не предопределено, кхм) нашел http://venom630.free.fr/pdf/Programming.the.Microsoft.Windows.Driver.Model.2nd.Edition.pdf
Ну как минимум AMD сорцы свои открывала (пусть и не для самых новых). + еще смотря что вас интересует - какая ОС. Если винда - курите WDDM