¿Quieres saber qué significa #pragma intrinsic (_m_prefetchw)?¿Qué significa #pragma intrínseco?
Respuesta
Por lo que yo sé, parece que alguien tenía la intención de modificar alguna configuración específica de MSVC++. Sin embargo, esa configuración no es una opción válida para el intrinsic pragma. _m_prefetchw por otro lado es un 3D Ahora! función intrínseca
Como todas las funciones intrínsecas del compilador, se expone (posiblemente) instrucciones de montaje más rápidos soportados por el hardware subyacente a su aplicación C o C++ de una manera
A. más consistente con los optimizadores y
B. más consistente con el idioma, en comparación con el uso de ensamblaje en línea.
En MSVC en sistemas x86_64/x64/amd64, el ensamblaje en línea no es compatible, por lo que uno debe usar dichos intrínsecos para acceder a las características de whizzbang del hardware subyacente.
Finalmente, cabe señalar que _m_prefetchw es un 3D Ahora! ¡intrínseco y 3D ahora! solo es compatible con hardware AMD. Probablemente no sea algo que desee utilizar para el nuevo código (es decir, debería usar SSE, que funciona en hardware Intel y AMD, y tiene más características para arrancar).
El pragma intrínseco le dice al compilador que una función tiene un comportamiento conocido. El compilador puede llamar a la función y no reemplazar la llamada de función con instrucciones en línea, si se obtiene un mejor rendimiento.
Fuente: http://msdn.microsoft.com/en-us/library/tzkfha43(VS.80).aspx
En C
, que depende de si la aplicación reconoce (y define) de ella.
Si la implementación no reconoce el token de preprocesamiento "intrínseco", se ignora el pragma.
Si la implementación lo reconoce, todo lo que se define ocurrirá (y si otra implementación lo define de manera diferente, ocurre algo diferente en la otra implementación).
Por lo tanto, consulte la documentación para la implementación de la que está hablando (edit: y no la use si espera compilar su fuente en diferentes implementaciones).
no pude encontrar ninguna referencia a "#pragma intrínseca" en man gcc
, en mi sistema.
Bueno, eso tendría sentido, dado que no es una opción de GCC. No tengo '__declspec' en mi manual de GCC tampoco - No veo qué tiene que ver eso con la pregunta. Hay muchos compiladores en el mundo además de GCC. El resto de la respuesta está bien, sin embargo. –
Esos son realmente pragmas específicos de MSVC. –
El estándar C (la pregunta está etiquetada como C) define explícitamente lo que sucede para '#pragma WHATEVER'. Dado que el OP no dice cuál es su implementación actual, supuse que quería el significado del Estándar. – pmg
El significado de "#pragma intrinsic" (nota ortográfica), como en todas las directivas "#pragma", varía de un compilador a otro. En general, indica que una cosa particular que se parece sintácticamente a una llamada a una función externa debe reemplazarse por un código en línea. En algunos casos, esto puede mejorar mucho el rendimiento, especialmente si el compilador puede determinar valores constantes para algunos o todos los argumentos (en esta última situación, el compilador puede calcular el valor de la función y reemplazarla con una constante) .
Generalmente, tener funciones procesadas como intrínsecas no planteará ningún problema en particular. El mayor peligro es que si un usuario define en un módulo una función con el mismo nombre que una de la función intrínseca del compilador e intenta llamar a esa función desde otro módulo, el compilador podría reemplazar la llamada de función con su secuencia de instrucción esperada. Para evitar esto, algunos compiladores no habilitan las funciones intrínsecas por defecto (ya que hacerlo causaría la incompatibilidad anterior con algunos programas que cumplen con las normas) pero proporcionan las directivas #pragma para habilitarlas. Los compiladores también pueden usar la opción de línea de comandos para habilitar intrínsecos (ya que el estándar permite cualquier cosa allí), o pueden definir algunas funciones como __memcpy() como intrínsecas, y dentro de string.h, usan una directiva #define para convertir memcpy en __memcpy (ya que los programas que #include string.h no pueden usar memcpy para ningún otro propósito).
- 1. ¿Qué significa "#pragma comment"?
- 2. Usando pragma intrínseco (sqrt, pow) en C#?
- 3. ¿Qué significa #pragma en C?
- 4. ¿Qué significa el encabezado HTTP Pragma: público?
- 5. memcmp intrínseco
- 6. bloqueo intrínseco de hilo
- 7. ¿Para qué se utiliza #pragma?
- 8. ¿Qué significa "babosa" significa
- 9. ¿Qué significa ('../') significa?
- 10. ¿Qué significa Field.Index.NOT_ANALYZED_NO_NORMS significa
- 11. ¿Qué significa "?" significa en Java?
- 12. ¿Qué significa '??' significa en C#?
- 13. ¿Qué significa "ruptura BC" significa?
- 14. ¿qué significa "$ &" significa en Ruby
- 15. ¿Qué significa xmlns = "" significa exactamente
- 16. ¿Qué significan las declaraciones "#pragma administrado (push, off)" y "#pragma managed (pop)"?
- 17. ¿Cuál es el significado de #pragma marks? ¿Por qué necesitamos #pragma marks?
- 18. ¿Qué significa /([^.]*)\.(.*)/?
- 19. ¿Qué significa = *?
- 20. ¿Qué significa "==="?
- 21. ¿Qué significa "\\. \", "\ ?? \", "\\? \", "\\"?
- 22. ¿Qué significa || =?
- 23. #pragma pack effect
- 24. C++ # paquete de pragma
- 25. Xcode - Usando #pragma mark
- 26. ¿Debo usar "#pragma GCC ..." o "#pragma clang ..." en Xcode
- 27. ¿Qué significa "1"? significa en Perl?
- 28. ¿Qué significa "escalares filtrados: 1" significa?
- 29. ¿Qué significa "% .6d" significa en printf
- 30. ¿Qué significa @! significa en un De declaración
No significa nada, _m_prefetchw ya es intrínseco. –