- •6. Приложения с плавающей точкой
- •6.1. Краткий обзор
- •6.2. Ограничения эффективности приложений с плавающей точкой.
- •6.2.1. Время ожидания выполнения
- •6.2.2. Пропускная способность выполнения
- •6.2.3. Время задержки при обращении к памяти
- •6.2.4. Пропускная способность памяти
- •6.3. Особенности с плавающей точкой в архитектуре IntelItanium
- •6.3.1. Большой и широкий набор регистров с плавающей точкой
- •6.3.1.1. Примечания относительно точности с плавающей точкой.
- •6.3.2. Инструкции умножения со сложением
- •6.3.3 Программная последовательность деление/вычисление квадратного корня
- •6.3.3.1. Удвоенная точность – деление
- •6.3.3.2. Удвоенная точность – вычисление квадратного корня
- •6.3.4. Вычислительные модели
- •6.3.5. Множество полей состояния.
- •6.3.6. Другие свойства
- •6.3.6.1. Поддержка экранирования операнда.
- •6.3.6.2. Min/Max/Amin/aMax
- •6.3.6.3. Преобразования между целыми и плавающими числами
- •6.3.6.4. Обработка подполей с плавающей точкой
- •6.3.7. Управление доступом к памяти
- •6.3.7.1. Инструкции парной загрузки
- •6.3.7.2. Предвыборка данных
- •6.3.7.3. Управление распределением
- •6.4. Итоги
6.3.7.2. Предвыборка данных
Инструкция lfetchпозволяет предварительную предвыборку (advancedprefetching), строки данных (заданной как 32 байта или более), из кэша в память. Для указания характера местоположения последующих обращений к данным, и для указания до какого уровня кэша следует продвинуть данные,– могут использоваться подсказки распределения.
Хотя, для достижения эффекта предвыборки данных могут использоваться и обыкновенные загрузки (если приемник загрузки нигде не используется), но инструкции lfetchмогут более эффективно уменьшать время ожидания памяти, без использования регистров с плавающей точкой в качестве приемников данных предвыборки. Кроме того,lfetchпозволяет предварительно выбирать данные для различных уровней кэшей.
6.3.7.3. Управление распределением
Так как обращения к данным имеют различные локальные атрибуты (временный/не временный, пространственный/не пространственный), то для отражения этих атрибутов, архитектура Itaniumпозволяет давать примечания (аннотировать -annotating) обращениям к данным (загрузкам и сохранениям). Выполнение, основанное на этих аннотациях, может лучше управлять хранением данных в кэшах.
Определены временныеине временныеподсказки. Эти атрибуты применимы к различным уровням кэшей. (Правда, пока, определены только два уровня кэшей). Не временные подсказки лучше всего использовать для данных, которые обычно не имеют повторного использования на этом уровне кэша. Временная подсказка используется для всех других данных (которые используются повторно).
6.4. Итоги
Эта глава описывает ограничивающие факторы для многих научных приложений и приложений с плавающей точкой: ожидание памяти и пропускная способность, время выполнения функциональных устройств и количество доступных функциональных устройств. Здесь также описываются важные свойства поддержки плавающей точки в архитектуре Itanium, выходящие за рамки поддержки программной конвейерной обработки описанной в главе 5 «Поддержка программной конвейерной обработки и циклов», которые помогают преодолевать некоторые из этих ограничений эффективности. Также описана архитектурная поддержка для спекуляции, округления и управления точностью.
Примеры в главе показывают, как осуществить деление и вычисление квадратного корня с плавающей запятой, обычные научные вычисления, такие как редукция, использование особенностей типа инструкции fma, и различных Ливерморских ядер.