Отношение между CPI и количеством исполнительных устройств при взгляде на встроенные функции SIMD
Я понимаю, что термин « цикл на инструкцию» тесно связан с суперскалярностью процессора, термин, который я не полностью понял. Согласно Википедии, «... суперскалярный процессор может выполнять более одной инструкции в течение тактового цикла, одновременно отправляя несколько инструкций на разные исполнительные блоки процессора». В той же статье есть намек на то, что суперскалярность не обязательно связана с конвейерной обработкой команд — концепцией, с которой я хорошо знаком.
Теперь давайте конкретизируем на примере , который, согласно https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#avxnewtechs=AVX,AVX2,FMA , имеет CPI 0,5 для микроархитектуры Alder Lake .
Вопросы:
- Могу ли я предположить, что во всех чипах Alder Lake исполняются ровно 2 одинаковых исполнительных блока ?
- Как программист может узнать, какие отдельные инструкции включают одни и те же единицы выполнения?
- Если имеется разное количество исполнительных блоков для разных инструкций (например,
_mm256_shuffle_ps
), какой смысл имеет утверждение «X является 4-процессорным суперскалярным процессором», учитывая, что ни одно число не может описать различные множественности каждого исполнительного блока?
Заранее спасибо за передачу знаний.
1 ответ
Термин суперскаляр обычно применяется к старым процессорам, например, к оригинальному Pentium. В те дни у вас было два отдельных канала, U (первичный) и V (вторичный), которые потенциально позволяли вам отправлять две инструкции одновременно (т.е. у него было 2 исполнительных блока) . По сути, это был способ получить немного лучшую производительность от ядра процессора в порядке (хотя это сопровождалось оговорками — например, проблемой могли быть пузыри конвейера)
В наши дни процессоры, как правило, используют внеочередное выполнение (OOOE), поддерживаемое большим количеством исполнительных блоков. ЦП Alder Lake имеет 12 исполнительных блоков, однако эти исполнительные блоки, как правило, в некоторой степени специализированы — например, загрузка/сохранение, арифметика указателей, модули SIMD FPU и т. д. Вот почему вы не увидите 12 исполнительных блоков, способных выполнять тасование. Он может отправлять 12 микроопераций за цикл, но все эти операции не могут быть одной и той же инструкцией.
Могу ли я предположить, что во всех чипах Alder Lake есть ровно 2 одинаковых исполнительных блока, выполняющих _mm256_shuffle_ps?
Нет, ты не можешь этого предположить. Можно предположить, что есть два исполнительных блока , способных выполнять
Как программист может узнать, какие отдельные инструкции включают одни и те же единицы выполнения?
Если производитель явно не указывает возможности каждого исполнительного порта (иногда вы найдете эту информацию в техническом руководстве для ЦП) , вы в значительной степени ограничены в том, чтобы делать обоснованные предположения (например, Apple M1)
Если для разных инструкций (таких как _mm256_shuffle_ps) имеется разное количество исполнительных блоков, то какой смысл имеет утверждение «X — четырехпроцессорный суперскалярный процессор», если ни одно число не может описать различные множественности каждого исполнительного блока?
Современные процессоры Intel не являются суперскалярами, поэтому описывать их как таковые вообще не имеет смысла.
Alder Lake может отправлять 12 инструкций за такт, используя Out-Of-Order-Execution. Типы инструкций, которые могут обрабатывать исполнительные блоки, обычно ориентированы на ряд распространенных случаев. Например, рассмотрим этот код:
void func(float* r, float* a, float* b) {
// basic integer ops: increment and less-than
for(int i = 0; i < 128; ++i) {
// 2 address manipulation instructions
float* addr_a = a + i * 4;
float* addr_b = b + i * 4;
// 2 load instructions
__m128 A = _mm_load_ps(addr_a);
__m128 B = _mm_load_ps(addr_b);
// an addition
__m128 R = _mm_add_ps(A, B);
// another address manipulation op
float* addr_r = r + i * 4;
// a store instruction
_mm_store_ps(addr_r, R);
}
}
Предоставление 12 исполнительных блоков, каждый из которых способен выполнять