У меня проблема .... Я записываю данные в массив в цикле while. И дело в том, что я делаю это очень часто. Похоже, что это написание теперь является узким местом в коде. Так что, как я полагаю, это вызвано записью в память. Этот массив не очень большой (что-то вроде 300 элементов). Вопрос в том, возможно ли это сделать таким образом: сохранить его в кеше и обновить в памяти только после завершения цикла while?
Тебе не нужно. Единственная причина, по которой он может вытолкнуть из кэша, заключается в том, что некоторые другие данные считаются более срочными для помещения в кеш.
Кроме того, массив из 300 элементов должен помещаться в кэш без проблем (при условии, что размер элемента не слишком сумасшедший), поэтому, скорее всего, ваши данные уже в кэше.
В любом случае, наиболее эффективным решением, вероятно, является настройка вашего кода. Используйте много временных файлов (чтобы указать компилятору, что адрес памяти не важен) вместо постоянной записи / чтения в массив. Измените порядок кода, чтобы загрузки выполнялись один раз, в начале цикла, и максимально разбивайте цепочки зависимостей.
Ручное развертывание петли дает вам больше гибкости для достижения этих целей.
И, наконец, два очевидных инструмента, которые вы должны использовать, а не гадать о поведении кэша:
- Профилировщик и cachegrind, если доступно. Хороший профилировщик может рассказать вам много статистики о промахах кэша, а cachegrind также даст вам много информации.
- Мы здесь, в StackOverflow. Если вы опубликуете свой код цикла и спросите, как можно улучшить его производительность, я уверен, что многие из нас сочтут это интересным испытанием.
Но, как уже упоминали другие, при работе с производительностью не угадывайте. Вам нужны точные данные и измерения, а не интуиция и интуиция.