Я считаю, что такой механизм должен существовать, поскольку современным процессорам необходимо эффективно переключать потоки, когда конвейер останавливается, и зная, статус кэша будет иметь решающее значение для таких операций.
Вот псевдокод того, чего я пытаюсь достичь:
Код: Выделить всё
#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();
// }
}
}
Альтернативно существует ли есть ли способ определить, остановлен ли конвейер, не останавливая выполнение? Я предполагаю, что отладчики и инструменты профилирования используют такие механизмы.
Может быть, есть какие-то встроенные функции C++ или другие низкоуровневые методы, которые могут помочь в этом?
Программное обеспечение для профилирования обычно имеет способы обнаружения промахов и попаданий в кэш. Есть ли способ переназначить эти механизмы для моего варианта использования?
Подробнее здесь: https://stackoverflow.com/questions/793 ... -in-the-l1
Мобильная версия