2011-12-13 3 views
4

Мне было интересно, есть ли способ хранить данные в кеше данных процессора напрямую, а не в основной памяти. Я понимаю, что способ работы кэшей состоит в том, чтобы хранить наиболее часто используемые данные, однако имеет смысл иметь директиву сборки, чтобы сообщить процессору, это будет часто используемые данные. Я использую язык ассемблера IA-32.Могу ли я хранить данные в кеше процессора напрямую?

Спасибо!

+1

На самом деле, да, это можно сделать, но это не то, что вы хотели бы сделать. Бумага: http://rere.qmqm.pl/~mirq/cache_as_ram_lb_09142006.pdf, Слайды: https://www.coreboot.org/images/6/6c/LBCar.pdf. Связанный вопрос о SO: http://stackoverflow.com/questions/27699197/cache-as-ram-no-fill-mode-executable-code – jmiserez

ответ

2

В зависимости от архитектуры есть предварительные подсказки для перемещения данных непосредственно в кеш. Для ia32 это инструкция prefetch, которая может перемещать данные в L1, L2.

С другой стороны, есть инструкции, которые говорят процессору, чтобы избежать использования кеша, например moventdq, который перемещает данные непосредственно из/в память.

Редактировать: Кроме того, есть инструкции по настройке диапазонов памяти для определенных типов алгоритмов кеширования, таких как запись, запись, запись или объединение. См. http://en.wikipedia.org/wiki/Memory_type_range_register.

+0

Я не уверен, содержит ли IA-32 SSE. А также, насколько я знаю, не гарантируется, что после инструкции предварительной выборки данные хранятся в кеше. Но я могу ошибаться. – n0p

+1

SSE был задолго до того, как существовал x86_64. Pentium III еще в 1999 году был первым, кто содержал SSE, которому принадлежит команда prefetch, и это был чистый 32-битный процессор. Да, 'prefetch' - это всего лишь подсказка, но вот что было задано:« Было бы разумно иметь директиву сборки, чтобы рассказать процессору, это будет часто используемая информация ». Для чего нужна предварительная выборка. – hirschhornsalz

+0

'prefetch' на самом деле является инструкцией MMX. Таким образом, это относится к 1995 году. – hirschhornsalz

2

Нет, вы не можете получить доступ к кешу непосредственно на уровне сборки. Поскольку кеш «скрыт» (L1 и L2) в процессоре и, возможно, нет кеша вообще.

+1

Кэш (в основном) прозрачен для программного обеспечения, поэтому нет инструкций для доступ к кешу отдельно. Это потому, что каждая стандартная команда чтения или записи напрямую обращается к кешу. В другом случае доступ к памяти непосредственно в обход кеша требует специальных инструкций, но они существуют. – hirschhornsalz