Могу ли я прочитать флаг процессора x86, чтобы определить, поступили ли предварительно выбранные данные в кэш L1?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Могу ли я прочитать флаг процессора x86, чтобы определить, поступили ли предварительно выбранные данные в кэш L1?

Сообщение Anonymous »

Я хочу предварительно загрузить данные в кэш L1 и выполнить другую работу, ожидая прибытия данных, чтобы избежать остановки цикла. Есть ли способ определить, поступили ли предварительно выбранные данные в кэш L1? Это позволило бы мне продолжать основную обработку до тех пор, пока данные не станут доступны.
Я считаю, что такой механизм должен существовать, поскольку современным процессорам необходимо эффективно переключать потоки, когда конвейер останавливается, и зная, статус кэша будет иметь решающее значение для таких операций.
Вот псевдокод того, чего я пытаюсь достичь:

Код: Выделить всё

#include 

void processData(int* data, size_t size) {
// Prefetch the next data chunk
_mm_prefetch(someData);

for (size_t i = 0; i < size; ++i) {
// Check if the prefetched data has arrived in the L1 cache
// if (data_arrived_in_L1_cache()) {
//     // Process the data
//     process(data[i]);
// } else {
//     // Do other work
//     doOtherWork();
// }
}
}
Существует ли специальный флаг или инструкция, которую можно использовать для проверки того, поступили ли предварительно выбранные данные в кэш L1?
Альтернативно существует ли есть ли способ определить, остановлен ли конвейер, не останавливая выполнение? Я предполагаю, что отладчики и инструменты профилирования используют такие механизмы.
Может быть, есть какие-то встроенные функции C++ или другие низкоуровневые методы, которые могут помочь в этом?
Программное обеспечение для профилирования обычно имеет способы обнаружения промахов и попаданий в кэш. Есть ли способ переназначить эти механизмы для моего варианта использования?

Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-the-l1
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»