Re: Оптимизация обращений
От: SergH Россия  
Дата: 02.10.06 14:25
Оценка: 4 (1)
Здравствуйте, WoldemaR, Вы писали:

WR>Ситуация следующая:


WR>есть большой массив(объём — мегабайты) из которого обрабатывается 1 строка (объём — килобайты).


WR>Обращения к этой строке происходят очень часто внутри больших циклов.


WR>адрес обращения вычисляется, но всегда остаётся в рамках строки.


WR>есть подозрение, что каждый раз происходит обращение к памяти, хотя (внимание) вся строка может поместиться в кеш процессора.


Это странно, вроде кеш для такой ситуации и разрабатывали: есть большая память, обращение происходит к небольшому кусочку, адрес вычисляется...

Такое может быть, если помимо этой строчки постоянно обращаешься ещё куда-то, тогда несколько областей памяти поочереди прописываются в кеш. Но, к счастью, обычно кеш многослойный — как минимум, двух, так что на стек и большой массив должно хватать.

WR>вопрос — можно ли сказать компилятору чтобы он поместил в кеш некий участок памяти,


Компилятор такими вопросами не занимается И даже линкер. Может и можно сделать что-то на этапе выполнения, но скорее всего стандартных прагм для этого нет. В x86 ассемблер позволяет как-то управлять кешем, но подробностей я не знаю, и вставлять в код ассемблерные команды не рекомендую, если это не критически необходимо.

WR>а если нельзя, то как можно оптимизировать такую ситуацию?


Наверное, сократить обращения к другим участкам памяти и выровнять по границе кеш-линии.
Делай что должно, и будь что будет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.