Jump to content

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

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

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

Векторизация и распараллеливание

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

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

По языку программирования

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

Компиляторы для C и C++ от Microsoft, [3] Интел, [1] и Коллекция компиляторов GNU (GCC). [4] реализовать встроенные функции, которые напрямую сопоставляются с одной инструкцией x86 , инструкциями с несколькими данными ( SIMD ) ( MMX , потоковые расширения SIMD (SSE), SSE2 , SSE3 , SSSE3 , SSE4 , AVX , AVX2 , AVX512 , FMA , ...). Компилятор Microsoft Visual C++ Microsoft Visual Studio не поддерживает встроенную сборку для x86-64 . [5] [6] [7] [8] Чтобы компенсировать это, были добавлены новые встроенные функции, которые соответствуют стандартным инструкциям ассемблера, которые обычно недоступны через C/C++, например, побитовое сканирование.

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

 uint64_t __rdtsc        ();                                                          // return internal CPU clock counter
 uint64_t __popcnt64     (uint64_t n);                                                // count of bits set in n
 uint64_t _umul128       (uint64_t Factor1, uint64_t Factor2, uint64_t* HighProduct); // 64 bit * 64 bit => 128 bit multiplication
 __m512   _mm512_add_ps  (__m512 a, __m512 b);                                        // calculates a + b for two vectors of 16 floats
 __m512   _mm512_fmadd_ps(__m512 a, __m512 b, __m512 c);                              // calculates a*b + c for three vectors of 16 floats

[11]

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

ANSI/ISO PL/I определяет около 90 встроенных функций. [13] Условно их группируют следующим образом: [14] : 337–338 

  • Встроенные функции обработки строк, такие как INDEX, LENGTH.
  • Встроенные арифметические функции, такие как ABS, CEIL, ROUND.
  • Математические встроенные функции, такие как SIN, COS, LOG, ERF.
  • Встроенные функции обработки массивов, например ANY, ALL, PROD.
  • Встроенные функции обработки условий, такие как ONCODE, ONFILE.
  • Встроенные функции управления хранилищем, например ADDR, POINTER
  • Встроенные функции ввода-вывода: LINENO
  • Различные встроенные функции, такие как ДАТА и ВРЕМЯ.

Отдельные компиляторы добавили дополнительные встроенные функции, специфичные для машинной архитектуры или операционной системы.

Встроенная функция идентифицируется, оставляя ее имя необъявленным и разрешая использовать значение по умолчанию, или объявляя ее. BUILTIN. Пользовательскую функцию с тем же именем можно заменить, объявив ее как ENTRY.

  1. ^ Jump up to: а б «Руководство и справочник по компилятору Intel® C++ 19.1 для разработчиков» . Документация по компилятору Intel® C++ . 16 декабря 2019 года . Проверено 17 января 2020 г.
  2. ^ Команда Clang (2020). «Расширения языка Clang» . Документация Clang 11 . Проверено 17 января 2020 г. Встроенные функции
  3. ^ MSDN . «Внутренности компилятора» . Майкрософт . Проверено 20 июня 2012 г.
  4. ^ Документация GCC. «Встроенные функции, специфичные для конкретных целевых машин» . Фонд свободного программного обеспечения . Проверено 20 июня 2012 г.
  5. ^ MSDN . «Внутренности и встроенная сборка» . Майкрософт . Архивировано из оригинала 2 января 2018 г. Проверено 16 апреля 2010 г.
  6. ^ MSDN . «Внутренности и встроенная сборка» . Майкрософт . Проверено 28 сентября 2011 г.
  7. ^ MSDN . «Внутренности и встроенная сборка» . Майкрософт . Проверено 28 сентября 2011 г.
  8. ^ MSDN . «Внутренности и встроенная сборка» . Майкрософт . Проверено 28 сентября 2011 г.
  9. ^ «Векторные расширения» . Использование коллекции компиляторов GNU (GCC) . Проверено 16 января 2020 г.
  10. ^ «Математические библиотеки Vector Math и SIMD с открытым исходным кодом Sony (Cell PPU/SPU/другие платформы)» . Форум Beyond3D . Проверено 17 января 2020 г.
  11. ^ Внутренние структуры Intel
  12. ^ Мок, Крис (25 февраля 2013 г.). «Внутренние методы в HotSpot VM» . Слайдшер . Проверено 20 декабря 2014 г.
  13. ^ Комитет ANSI X3 (1976). Американский национальный стандартный язык программирования PL/I . {{cite book}}: CS1 maint: числовые имена: список авторов ( ссылка )
  14. ^ Корпорация IBM (1995). Справочник по языку IBM PL/I для MVS и VM .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2d1407bd0f1ef851190ec773e5dc912c__1713160920
URL1:https://arc.ask3.ru/arc/aa/2d/2c/2d1407bd0f1ef851190ec773e5dc912c.html
Заголовок, (Title) документа по адресу, URL1:
Intrinsic function - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)