Факторы снижающие производительность:
1. Скалярная обработка
Если число векторных операций достигает 20%, то это колоссальная удача. Реальные задачи имеют очень малую долю векторных операций, а это означает, что основная нагрузка идет на скалярный процессор, поэтому скалярная обработка снижает производительность этой системы.
2. Стартовое время конвейера
Оно состоит из следующих частей: настройка конвейера( этим занимается командный процессор), подготовка данных и задержка до появление первого результата. То есть мы можем получать каждые 12.5нс очередные данные векторной операции, но длина конвейера у нас, предположим, 5 или 6 стадий. Значит первый результат мы получим через 5*12.5нс.
3. Зависимость по данным
Невозможно работать с векторами в рамках многофункционального конвейера или в рамках конвейера с плавающей точкой, если в процессе вычисления идет модификация этих векторов. И если получится так, что элемент не может вернутся назад, то он не может быть подан на вход. Поэтому получается зависимость по данным равна числу стадий.
4. Зависимость по управлению
У нас опережающая выборка команд. Фактически уже здесь, в 85-ом году, использовалась понятие тех принципов, которые заложены в суперскалярной архитектуре, когда подготовка последовательности команд компилятором должна быть такова, чтобы как можно больше загрузить функциональные устройства, в том числе и выполнить опережающее вычисление.
5. Ограничение на размер объема регистровой памяти
Это хорошо, что мы имеем вектор длиной не более 256 элементов, а если больше, например матрица 256×256, понятно, что не всю матрицу мы сможем поместить в векторную память. Поэтому приходиться декомпозировать эти сложные задачи на части.
6. Конфликты доступа к локальной памяти
Мы видим, что к локальной памяти имеется множество входов: для векторных, скалярных и адресных регистров, для масок, для команд. Эта память строится изначально по секционному принципу, то есть делится, как минимум, на 4 секции; каждая ячейка с нулевым адресом выходит на один выход с первым адресом на второй выход с вторым адресом на третий выход с третьим адресом на четвертый, а потом все это повторяется, то есть идет расслоение. Это приводит к тому, что иногда возникает выборка из локальной памяти не в такой последовательности как она расслоена, некоторые функциональные устройства простаивают – ожидают освобождение доступа к локальной памяти. Боролись с этим и придумали ввести промежуточную память Т и В регистры.
7. Наличие специализированных функциональных устройств
Допустим, не можем мы придумать задачу, где используется подсчет числа единиц. Вот что мы ни делали, но никак нельзя это устройство использовать. Значит, когда наша задача решается, то это устройство будет простаивать. А мы видим, что у нас имеются специализированные устройства и поэтому весь объем оборудования, при прочих равных условиях, как правило, не задействуется – это снижает общую производительность системы по отношению к той теоретической, которую мы, вроде бы, вначале подсчитали.
