Я хочу проверить влияние предварительной выборки на априори известные шаблоны доступа.В качестве первого шага я попытался использовать инструкции предварительной выборки с использованием инструкций встроенного ассемблера в моем исполняемом файле с соответствующим синтаксисом, как показано здесь: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0802b/PRFM_imm.html
Созданная сборка, полученная дампом объекта, является ожидаемой для обеих целей:L1:
0: 340000c1 cbz w1, 18 <_Z8prefetchPhj+0x18>
4: 52800002 mov w2, #0x0 // #0
8: f8a26800 prfm pldl1keep, [x0, x2]
c: 11010042 add w2, w2, #0x40
10: 6b02003f cmp w1, w2
14: 54ffffa8 b.hi 8 <_Z8prefetchPhj+0x8> // b.pmore
и L2:
0: 340000c1 cbz w1, 18 <_Z8prefetchPhj+0x18>
4: 52800002 mov w2, #0x0 // #0
8: f8a26802 prfm pldl2keep, [x0, x2]
c: 11010042 add w2, w2, #0x40
10: 6b02003f cmp w1, w2
14: 54ffffa8 b.hi 8 <_Z8prefetchPhj+0x8> // b.pmore
Несмотря на то, что предварительная выборка действительно сокращает время выполнения (в режиме эмуляции системы использовалась модель с небольшим ЦП), в обоих случаяхвыходная статистика идентична как по времени выполнения, так и по поведению в кеше.Были протестированы различные конфигурации кэша, и все они имели более чем достаточную емкость для размещения предварительно выбранных данных (разумеется, без предварительной выборки HW и после проверки того, что данные отсутствуют ни в одном из кэшей).Исходя из статистики кэша, кажется, что обе инструкции обрабатываются так, как если бы они обе предназначались для кэша L1.
Существуют ли разные реализации для разных целевых уровней или обе инструкции выполняются gem5 одинаково?Если это так, входит ли такое расширение в планы на будущее?