Есть ли способ заставить переменную остаться кэшированной в x86 (/ _ 64)? - PullRequest
1 голос
/ 08 октября 2010

С процессорами Blackfin я могу объявить переменную с атрибутом "l1_data" в gcc, и эта переменная останется в SRAM данных L1.Есть ли способ сделать это на x86 или x86_64?

1 Ответ

2 голосов
/ 09 октября 2010

Нет, нет.Не имеет смысла разрешать что-то подобное по трем причинам:

  1. Учитывая размер (и ассоциативность) кэшей L2 / L3 современного x86, вполне вероятно, что переменная, в которой это будетв любом случае имеет смысл, в основном, оставаться в кеше.
  2. Разрешение такой опции сделает структуру кеша более сложной (поскольку она должна поддерживать «закрепленную» память.
  3. Она плохо взаимодействует сЧто произойдет, если поток будет изменен, что более или менее приведет к переполнению кэша. Если переменные останутся в кэше, это позволит одной программе полностью заблокировать кэш, который не будет работать хорошо. В противном случае, что бысмысл такой опции будет?

Хотя я не знаю о процессоре Blackfin, быстрый поиск показывает, что L1 не полностью организован как кеш, а состоит из одной части кеша и одной частиЯвная адресуемая память. Таким образом, в этом случае атрибут, скорее всего, создаст переменную в явномадресуемое зелье, которое имеет гораздо больше смысла, чем закрепление некоторой переменной в кэше.Эти процессоры, вероятно, не будут иметь столько же запущенных потоков, сколько типичный процессор fesktop, так что это имеет смысл.

...