Vnitřní funkce - Intrinsic function - Wikipedia
![]() | tento článek potřebuje další citace pro ověření.Prosince 2009) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
v počítačový software, v teorii překladače, an vnitřní funkce (nebo vestavěná funkce) je funkce (podprogram ) k dispozici pro použití v daném programovací jazyk jehož implementaci řeší speciálně překladač. Obvykle může nahradit posloupnost automaticky generovaných instrukce pro původní volání funkce, podobně jako inline funkce.[1] Na rozdíl od vložené funkce má kompilátor důkladnou znalost vnitřní funkce a může ji tak lépe integrovat a optimalizovat pro danou situaci.
Kompilátory, které implementují vnitřní funkce, je obecně umožňují pouze v případě, že o to program požádá optimalizace, jinak spadá zpět k výchozí implementaci poskytované jazykem runtime systém (životní prostředí).
Vnitřní funkce se často používají k explicitní implementaci vektorizace a paralelizace v jazycích, které tyto konstrukty neřeší. Nějaký aplikační programovací rozhraní (API), například AltiVec a OpenMP, použijte vnitřní funkce k deklaraci vektorizovatelných a multiprocesing -význam operací během kompilace. Kompilátor analyzuje vnitřní funkce a převádí je na vektorovou matematiku nebo více procesů kód objektu vhodné pro cíl plošina.Některé vnitřní vlastnosti se používají k poskytnutí dalších omezení optimalizátoru, například hodnot, které proměnná nemůže předpokládat.[2]
C a C ++
Překladače pro C a C ++ společnosti Microsoft,[3]Intel,[1] a Sbírka překladačů GNU (GCC)[4]implementovat vnitřní prvky, které se mapují přímo do x86 jedna instrukce, více dat (SIMD ) pokyny (MMX, Streamování rozšíření SIMD (SSE), SSE2, SSE3, SSSE3, SSE4, AVX, AVX2, AVX512, FMA, ...). The Microsoft Visual C ++ překladač Microsoft Visual Studio nepodporuje vložené shromáždění pro x86-64.[5][6][7][8] Aby to bylo možné kompenzovat, byly přidány nové vnitřní prvky, které mapují standardní pokyny pro sestavení, které nejsou běžně přístupné prostřednictvím C / C ++, např. Bitové skenování.
Některé kompilátory C a C ++ poskytují nepřenosné vnitřní vlastnosti specifické pro platformu. Další vnitřní vlastnosti (např GNU vestavěné jednotky) jsou o něco více abstrahovány, přibližují schopnosti několika současných platforem a jsou přenosné ustoupit implementace na platformách bez příslušných pokynů.[9] Je běžné pro knihovny C ++, jako například glm nebo Sony je vektorové matematické knihovny,[10] dosáhnout přenositelnosti prostřednictvím podmíněná kompilace (na základě příznaků kompilátoru specifických pro platformu), poskytující plně přenosná primitiva na vysoké úrovni (např. čtyřprvkový vektorový typ s plovoucí desetinnou čárkou) mapovaný na příslušný nízkoúrovňový programovací jazyk implementace a přitom stále těžit ze systému typu C ++ a inliningu; tedy výhoda oproti propojení s ručně psanými soubory objektů sestavy pomocí C binární rozhraní aplikace (ABI).
Příklady
uint64_t __rdtsc (); // vrátit interní počítadlo hodin CPU uint64_t __popcnt64 (uint64_t n); // počet bitů nastavených v n uint64_t _umul128 (uint64_t Faktor 1, uint64_t Faktor 2, uint64_t* HighProduct); // 64 bit * 64 bit => 128 bit multiplication __m512 _mm512_add_ps (__m512 A, __m512 b); // vypočítá a + b pro dva vektory 16 plováků __m512 _mm512_fmadd_ps(__m512 A, __m512 b, __m512 C); // vypočítá a * b + c pro tři vektory 16 plováků
- Odkazy
Jáva
The HotSpot Virtuální stroj Java (JVM) kompilátor just-in-time má také vnitřní vlastnosti pro konkrétní rozhraní API Java.[11] Hotspotové vnitřní prvky jsou standardní rozhraní Java API, která mohou mít jednu nebo více optimalizovaných implementací na některých platformách.
Reference
- ^ A b „Intel® C ++ Compiler 19.1 Developer Guide and Reference“. Dokumentace překladače Intel® C ++. 16. prosince 2019. Citováno 2020-01-17.
- ^ Clang Team (2020). „Clang Language Extensions“. Clang 11 dokumentace. Citováno 2020-01-17.
Integrované funkce
- ^ MSDN (VS2010). "Skládací podstata". Microsoft. Citováno 2012-06-20.
- ^ Dokumentace GCC. "Integrované funkce specifické pro konkrétní cílové stroje". Free Software Foundation. Citováno 2012-06-20.
- ^ MSDN (VS2012). „Vnitřní a přímé sestavení“. Microsoft. Archivovány od originál dne 01.01.2018. Citováno 2010-04-16.
- ^ MSDN (VS2010). „Vnitřní a přímé sestavení“. Microsoft. Citováno 2011-09-28.
- ^ MSDN (VS2008). „Vnitřní a přímé sestavení“. Microsoft. Citováno 2011-09-28.
- ^ MSDN (VS2005). „Vnitřní a přímé sestavení“. Microsoft. Citováno 2011-09-28.
- ^ „Vektorová rozšíření“. Používání GNU Compiler Collection (GCC). Citováno 2020-01-16.
- ^ „Sony open source Vector Math a SIMD math libraries (Cell PPU / SPU / other platform)“. Fórum Beyond3D. Citováno 2020-01-17.
- ^ Mok, Kris (25. února 2013). „Vnitřní metody v HotSpot VM“. Sdílení snímků. Citováno 2014-12-20.
externí odkazy
- Průvodce Intel Intrinsics
- Používání rutin milicode, Dokumentace k systému IBM AIX 6.1