Я пытаюсь измерить задержку нескольких обращений к памяти, которые выполняются параллельно на вышедшем из строя процессоре.
Проблема в том, что любая попытка измерить задержку загрузки сериализует ее по отношению к другим нагрузкам.
Возьмем, к примеру, наивно написанный код, который измеряет задержку двух загрузок:
1. rdtscp
2. load-1
3. rdtscp
4. rdtscp
5. load-2
6. rdtscp
В приведенном выше коде свойство упорядочивания rdtscp в Intel x86 сериализует выполнение load-1 и load-2 в соответствии с моим тестированием (т.е. load-2 выдается в систему памяти только после загрузки -1 завершает выполнение). В результате приведенный выше код не использует доступную пропускную способность памяти. В идеале я хотел бы обеспечить максимальную пропускную способность для нагрузок, измеряя при этом задержку каждой загрузки независимо.
Есть ли способ измерить задержку load-1 и load-2, позволяя им выполняться параллельно?
В идеале мне нужна форма rdtscp, упорядоченная с учетом нагрузки, задержка которой измеряется, а не упорядоченная явно с какой-либо другой инструкцией. Мне было интересно, есть ли способ получить это с помощью rdtscp или rdtsc.