Скорость рассеянной записи по сравнению со скоростью рассеянного чтения на современных процессорах Intel или AMD? - PullRequest
2 голосов
/ 23 июня 2010

Я думаю об оптимизации программы, используя линейный массив и запись каждого элемента в произвольное место (случайное с точки зрения процессора) в другом массиве. Я делаю только простые записи и не читаю элементы обратно.

Я понимаю, что чтение с разбросом для классического ЦП может быть довольно медленным, поскольку каждый доступ приведет к потере кеша и, следовательно, к ожиданию процессора. Но я думал, что технически разрозненная запись может быть быстрой, потому что процессор не ждет результата, поэтому, возможно, ему не придется ждать завершения транзакции.

Я, к сожалению, не знаком со всеми деталями классической архитектуры памяти процессора, и поэтому могут быть некоторые сложности, которые могут привести к тому, что это также будет довольно медленным.

Кто-нибудь пробовал это?

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

Ответы [ 2 ]

3 голосов
/ 23 июня 2010

Как правило, вы платите высокий штраф за разрозненные записи по адресам, которые еще не находятся в кеше, так как вы должны загружать и хранить целую строку кэша для каждой записи, поэтому требования к пропускной способности FSB и DRAM будут намного выше, чем для последовательнойпишет.И, конечно, вы будете сталкиваться с отсутствием кэша при каждой записи (несколько сотен циклов, как правило, на современных процессорах), и не будет никакой помощи от механизма автоматической предварительной выборки.

2 голосов
/ 23 июня 2010

Должен признать, это звучит как хардкор.Но я рискну и все равно отвечу.

Можно ли разделить входной массив на страницы, и читать / сканировать каждую страницу несколько раз.Каждый проход по странице, вы обрабатываете (или выводите) только те данные, которые принадлежат ограниченному количеству страниц.Таким образом, вы пропускаете кеш только в начале каждого входного цикла страницы.

...