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

 Есть программа - она выполняет математические операции. ОЗУ занимает очень много. Больше 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. Сами операции оптимизированы. Вопрос - что делать с кэшем? 

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

  

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

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

  

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

Если хочется застолбить массив в физической памяти -- смотреть на [VirtualLock](https://msdn.microsoft.com/en-us/library/windows/desktop/aa366895(v=vs.85).aspx). 

>  Но если некоторое время не выполнять операции (секунд 30), а потом опять начать - они начинают выполняться в 10 раз медленнее. 

Вы уверены что речь идет о кэше процессора, если разговор о таких длительных сроках? 30секунд и кэш процессора? Может вы говорили про миллисекунды?  

За секунду кэш поменяется миллион раз.  
  

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

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

> Использую Windows Server 2012 R2

Вы же сами сказали что **другие операции не выполняются**. И тут же заявляете что выполняете на этом же процессоре целую ОС. 

 Похоже ваши гигабайты успевают скидываться в своп во время паузы, отсюда и тормоза пока ОС достанет их оттуда.  

Кэшем на прямую вы никак управлять не можете, можете только косвенно структурировав соответствующим образом код и данные. Увеличить объем кэша вы то же не можете, разве что поставить проц с бОльшим кэшем.  

Пока попробуйте добавить памяти в комп, так что бы ваш массив целиком туда влазил (да еще и запас был под другие задачи и ОС).  
  

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