Внутренняя функция

редактировать

В компьютерном программном обеспечении, в теории компиляторов, встроенная функция (или встроенная функция ) - это функция (подпрограмма ), доступная для использования на заданном языке программирования, реализация которой специально обрабатывается компилятором. Как правило, он может заменить последовательность автоматически сгенерированных инструкций для вызова исходной функции, аналогично встроенной функции . В отличие от встроенной функции, компилятор хорошо знает встроенную функцию и, таким образом, может лучше интегрировать и оптимизировать ее для данной ситуации.

Компиляторы, реализующие встроенные функции, обычно включают их только тогда, когда программа запрашивает оптимизацию, в противном случае возвращается к реализации по умолчанию, предоставляемой языком системой времени выполнения (среда).

Внутренние функции часто используются для явной реализации векторизации и распараллеливания на языках, которые не обращаются к таким конструкциям. Некоторые интерфейсы прикладного программирования (API), например, AltiVec и OpenMP, используют встроенные функции для объявления, соответственно, векторизуемых и многопроцессорных -сознательные операции при компиляции. Компилятор анализирует внутренние функции и преобразует их в векторную математику или многопроцессорный объектный код , соответствующий целевой платформе. Некоторые встроенные функции используются для предоставления дополнительных ограничений оптимизатору, таких как значения, которые переменная не может принимать.

Содержание
  • 1 C и C ++
    • 1.1 Примеры
  • 2 Java
  • 3 Ссылки
  • 4 Внешние ссылки
C и C ++

Компиляторы для C и C ++ от Microsoft, Intel и GNU Compiler Collection (GCC) реализуют встроенные функции, которые отображаются непосредственно на инструкции x86 с одной инструкцией, с несколькими данными (SIMD ) (MMX, Streaming SIMD Extensions (SSE), SSE2, SSE3, SSSE3, SSE4, AVX, AVX2, AVX512, FMA,...). Компилятор Microsoft Visual C ++ для Microsoft Visual Studio не поддерживает встроенную сборку для x86-64. Чтобы компенсировать это, были добавлены новые встроенные функции, которые соответствуют стандартным инструкциям сборки, которые обычно недоступны через C / C ++, например, битовое сканирование.

Некоторые компиляторы C и C ++ предоставляют непереносимые встроенные функции, специфичные для платформы. Другие встроенные функции (например, GNU ) немного более абстрактны, приближаясь к возможностям нескольких современных платформ, с переносимыми реализациями отката на платформах без соответствующих инструкций. Обычно библиотеки C ++, такие как glm или Sony библиотеки векторных математических вычислений, достигают переносимости с помощью условной компиляции (на основе флагов компилятора для конкретной платформы), предоставляя полностью переносимые примитивы высокого уровня (например, четырехэлементный векторный тип с плавающей запятой), отображаемые на соответствующие реализации языка программирования низкого уровня, в то же время используя преимущества системы типов C ++ и встраивания; отсюда преимущество перед связыванием с рукописными объектными файлами сборки с использованием двоичного интерфейса приложения C (ABI).

Примеры

uint64_t __rdtsc (); // возврат внутреннего счетчика тактовой частоты процессора uint64_t __popcnt64 (uint64_t n); // количество битов, установленных в n uint64_t _umul128 (uint64_t Factor1, uint64_t Factor2, uint64_t * HighProduct); // 64 бит * 64 бит =>128-битное умножение __m512 _mm512_add_ps (__m512 a, __m512 b); // вычисляет a + b для двух векторов из 16 чисел с плавающей запятой __m512 _mm512_fmadd_ps (__ m512 a, __m512 b, __m512 c); // вычисляет a * b + c для трех векторов из 16 чисел с плавающей запятой
Links
Java

The HotSpot виртуальная машина Java (JVM) оперативный компилятор также имеет встроенные функции для определенных API Java. Встроенные функции Hotspot - это стандартные API-интерфейсы Java, которые могут иметь одну или несколько оптимизированных реализаций на некоторых платформах.

Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-24 05:30:35
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте