Funcția intrinsecă

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

Funcția intrinsecă [1] [2] (din latinescul intrinsĕcus ) în software-ul computerului , în teoria compilatorului, o funcție intrinsecă (sau funcție încorporată ) este o funcție ( subrutină ) disponibilă pentru utilizare într-un anumit limbaj de programare care este gestionat de implementare în mod specific de către compilator . De obicei, poate înlocui o secvență generată automat de instrucțiuni pentru apelul de funcție original, similar cu o funcție în linie. Spre deosebire de o funcție inline , compilatorul are cunoștințe intime despre o funcție intrinsecă și, prin urmare, o poate integra și optimiza mai bine pentru o anumită situație.

Compilatoarele care implementează funcții intrinseci le permit în general numai atunci când un program necesită optimizare, altfel revine la o implementare implicită furnizată de sistemul de rulare a limbajului (mediu).

Funcțiile intrinseci sunt adesea utilizate pentru a implementa în mod explicit vectorizarea și paralelizarea în limbaje care nu abordează astfel de constructe. Unele interfețe de programare a aplicațiilor (API), cum ar fi AltiVec și OpenMP , utilizează funcții intrinseci pentru a declara operațiuni vectorizabile și, respectiv, multiprocesare -aware , în timpul compilării. Compilatorul analizează funcțiile intrinseci și le convertește în cod matematic vector sau cod multiprocesare adecvat pentru platforma țintă.

C și C ++

Compilatoare pentru C și C ++ , de la Microsoft [3] , Intel și GNU Compiler Collection (GCC) [4] implementează elemente intrinseci care se leagă direct de instrucțiuni unice x86 , date multiple (SIMD) (MMX, Streaming SIMD Extensions (SSE) ), SSE2 , SSE3 , SSSE3 , SSE4 ). Compilatorul Microsoft Visual Studio Microsoft Visual C ++ nu acceptă asamblarea inline pentru x86-64. Pentru a compensa acest lucru, au fost adăugate noi intrinseci care mapează instrucțiunile de asamblare standard care nu sunt în mod normal accesibile prin C / C ++, de exemplu, scanarea biților.

Unele compilatoare C și C ++ nu oferă elemente intrinseci specifice platformei portabile. Alte elemente intrinseci (cum ar fi încorporate GNU ) sunt puțin mai abstracte, aproximând capacitățile multor platforme contemporane, cu implementări portabile de rezervă pe platforme fără instrucțiuni adecvate. Este obișnuit ca bibliotecile C ++, cum ar fi glm sau bibliotecile matematice vectoriale ale Sony [5] , să atingă portabilitatea prin compilare condițională (bazată pe semnalizatoarele de compilare specifice platformei), oferind primitive de nivel înalt complet portabile (de exemplu, un tipul elementului de vector în virgulă mobilă) mapat la implementările adecvate ale limbajului de programare de nivel scăzut, în timp ce continuă să beneficieze de sistemul și înclinația de tip C ++; de aici avantajul față de legarea la fișiere de obiecte de asamblare scrise de mână, utilizând interfața binară de aplicație C (ABI).

În chimie

În chimie , coloidii intrinseci sunt numiți toate acele substanțe (de exemplu, proteine , amidon , cauciuc ) care, atunci când sunt puse în contact cu anumite lichide , trec spontan în starea dispersată formând o soluție coloidală .

Java

Compilatorul mașinii virtuale Java HotSpot (JVM) just-in-time are, de asemenea, caracteristici inerente API-urilor Java specifice [6] . Intrinsecele hotspot-urilor sunt API-uri Java standard care pot avea una sau mai multe implementări optimizate pe unele platforme.

Notă

  1. ^ Enrico Pedemonte, Fundamentals of structure, properties and technology of polymers , New Culture Editions, 2011, ISBN 9788861347229 . Adus pe 19 mai 2018 .
  2. ^ Ce este o funcție intrinsecă în informatică? , pe www.math.unipd.it . Adus pe 19 mai 2018 .
  3. ^ msdn.microsoft.com , https://msdn.microsoft.com/en-us/library/26td21ds .
  4. ^ gcc.gnu.org , https://gcc.gnu.org/onlinedocs/gcc/Target-Builtins.html .
  5. ^ forum.beyond3d.com , https://forum.beyond3d.com/threads/sony-open-sources-vector-math-and-simd-math-libraries-cell-ppu-spu-other-platforms.38677/ .
  6. ^ slideshare.net , https://www.slideshare.net/RednaxelaFX/green-teajug-hotspotintrinsics02232013 .

linkuri externe

  • Ghidul Intel Intrinsics [1]
  • Folosind rutine milicode [2] , documentația IBM AIX 6.1