Fonction intrinsèque
Une fonction intrinsèque est, dans la théorie des compilateurs, une fonction disponible dans un langage de programmation donné dont l'implémentation est assurée par le compilateur même. Typiquement, une séquence d'instructions générées automatiquement remplace l'appel de fonction original, un peu à la manière d'une fonction inline. Par contre, à la différence d'une fonction inline, le compilateur a une connaissance approfondie de la fonction intrinsèque, et par conséquent peut mieux intégrer celle-ci et l'optimiser pour la situation donnée. Ceci est aussi appelé built-in function dans de nombreux langages.
En général, les compilateurs qui implémentent les fonctions intrinsèques n'activent celles-ci que si l'utilisateur a demandé explicitement cette optimisation, et emploient dans le cas contraire l'implémentation par défaut fournie par le moteur d'exécution du langage.
Les fonctions intrinsèques sont souvent utilisées pour explicitement mettre en œuvre de la vectorisation et du parallélisme dans les langages qui ne décrivent pas de telles constructions. AltiVec et OpenMP sont des exemples d'API qui utilisent des fonctions intrinsèques pour déclarer durant la compilation, respectivement, des opérations pouvant être effectuées de manière vectorisée ou parallélisée. Le compilateur analyse ces fonctions intrinsèques et les convertit en éléments de code vectorisés ou parallélisés appropriés à la plate-forme cible.
C et C++
Les compilateurs Microsoft[1] et Intel C/C++ ainsi que GCC[2] implémentent les fonctions intrinsèques correspondant directement aux instructions x86 SIMD (MMX, SSE, SSE2, SSE3, SSSE3, SSE4).
Notes et références
- (en) MSDN (VS2010), « Compiler Intrinsics », Microsoft (consulté le )
- (en) GCC documentation, « Built-in Functions Specific to Particular Target Machines », Free Software Foundation (consulté le )