Задать вопрос
@SergeySerge11

X86 intel, Почему если идет запись в текущию исполняемую кеш-линию Машиного кода, скорость падает в 100 раз?

Почему я загуглить вообще не могу причину. Это же наверное должна быть известная проблема. (либо у меня ошибка не в этом)

Как работает кеш-линия исполняемого кода, есть ли тонкости, вообще загуглить не могу, Но упал перфоманс в 100 раз в легчайшем примере. В 100, не в2,не в 3, а 100, раз из-за ОДНОГО или двух трех лишних nop?

Пока проверял 100 гипотез, на 123 гипотезе обнаружил, или догадка еще, что если данные для записи находятся в той же кеш линии, что и исполняемый код, то в 100 раз скорость падает.(или 100 нс добавляется на бенмаркинге)

допустим есть такая функция, ее размер 0x36=54 байта
int nativePrefixSum(int n)
   {
       var arr1 = _arr1;
       var arr2 = _arr2;
       int sum = 0;
       for (int i = 0; i < n; i++)
       {
           sum += arr1[i];
           arr2[i] = sum;
       } 
       return sum;
   }

ее размер машиного кода допустим 0x36=54 байта. Размер кеш линии процессора 64 вроде.
Теперь главное. представление кода Будет такое, Что Код И данные идут сразу после друг друга, код, массив для чтения, массив для записи(массив записи влезает в 2-6 байтами 64 границы).(изначально было выравние по 16 байт, но добалвением x-nop оказалось оно не работает, а вот по 64 исправляет полностью все, но это я с 123 раза обнаружил)
Если создать эту функцию для массива длинной 1-2, к примеру, то есть массив чтения будет 56-62 байт, массив записи 62-70 байт, и запустить ее от 1-2 аргумента(то есть фактически 1 итерация цикла) То перфоменс в 100 раз падает, при этом если создать массивы длинной допустим 1000, и запустить от аргумента 2, то скорость выполнения нормальная. так же если подальше разместить массив для записи, то все норм.

Отсюда вывод, что если происходит запись в исполняемую кеш-линию, то добавляется 100 наносекунд, и под 50-100 раз падает скорость . И я не могу загуглить почему так.
  • Вопрос задан
  • 173 просмотра
Подписаться 1 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Фотограф
    10 месяцев
    Далее
  • Академия Eduson
    Нейросети для изображений и видео
    2 месяца
    Далее
  • Нетология
    Режиссёр монтажа
    8 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Отсюда вывод, что если происходит запись в исполняемую кеш-линию, то добавляется 100 наносекунд, и под 50-100 раз падает скорость .И я не могу загуглить почему так.

Открываешь intel developer's manual, третий том, "System programming guide", раздел 13.6 "Self-modifying code". Там ровно об этом и написано.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы