@igorsap13

Как управлять кэшем процессора?

Есть программа - она выполняет математические операции. ОЗУ занимает очень много. Больше 25 Гб. Но есть запас ОЗУ.
Когда в кэш процессора данные подгрузились - операции выполняются быстро. Но если некоторое время не выполнять операции (секунд 30), а потом опять начать - они начинают выполняться в 10 раз медленнее. (Потому что опять в кэш процессора грузит). Потом опять скорость возвращается к нормальной.

Вопрос - возможно, как-то управлять кэшем процессора?
Запретить ему самому чистить кэш? Как-то самим туда записывать и удалять если нужно?
Как рассчитывать какой объем кэша нужен процессору для такого массива (больше 25 Гб - данные хранятся в (float *a = new float[5 000 000 000];))?

Другие операции на сервере не выполняются.

Использую Windows Server 2012 R2. Visual Studio 2015 (c++). Intel Xeon e5-2660 v4 (35 Мб кэша у процессора).

P.S. Сами операции оптимизированы. Вопрос - что делать с кэшем?
  • Вопрос задан
  • 166 просмотров
Пригласить эксперта
Ответы на вопрос 3
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
Есть программа - она выполняет математические операции. ОЗУ занимает очень много. Больше 25 Гб. Но есть запас ОЗУ.
Когда в кэш процессора данные подгрузились - операции выполняются быстро.

Я тоже хочу кэш процессора больше 25ГБ, но в твоём случае кэш процессора точно ни при чём.

Вопрос - что делать с кэшем?

Для начала понять, что такое "кэш процессора", сколько его и как он работает. Потом понять, как выделяется физическая память приложению, откуда она берётся и куда она уходит, если ею не пользоваться.

Если хочется застолбить массив в физической памяти -- смотреть на VirtualLock.
Ответ написан
Но если некоторое время не выполнять операции (секунд 30), а потом опять начать - они начинают выполняться в 10 раз медленнее.
Вы уверены что речь идет о кэше процессора, если разговор о таких длительных сроках? 30секунд и кэш процессора? Может вы говорили про миллисекунды?
За секунду кэш поменяется миллион раз.

Другие операции на сервере не выполняются.
Если другие операции на сервере не выполняются, то кэш никуда не денется.

Использую Windows Server 2012 R2
Вы же сами сказали что другие операции не выполняются. И тут же заявляете что выполняете на этом же процессоре целую ОС.
Ответ написан
@res2001
Developer, ex-admin
Похоже ваши гигабайты успевают скидываться в своп во время паузы, отсюда и тормоза пока ОС достанет их оттуда.
Кэшем на прямую вы никак управлять не можете, можете только косвенно структурировав соответствующим образом код и данные. Увеличить объем кэша вы то же не можете, разве что поставить проц с бОльшим кэшем.
Пока попробуйте добавить памяти в комп, так что бы ваш массив целиком туда влазил (да еще и запас был под другие задачи и ОС).

Кстати, вы не привели объем ОЗУ вашего компа.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы