Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

314
Vistas
¿Hay un __yield() intrínseco en Arm?

Estoy tratando de compilar un código para arm (v7a), que tenía un

 #if defined(__arm__) __yield(); #endif

agregado en esta solicitud de extracción

Las otras ramas tienen YieldProcessor() para MSC y _mm_pause() o __builtin_ia32_pause() para x86 y x86-64.

El compilador no encuentra el símbolo __yield , un arm-v7a-linux-gnueabihf-gcc 7.3.1 con -mcpu=cortex-a9 -mtune=cortex-a9 -march=armv7-a . ¿Este símbolo está definido en otras plataformas ARM, más tarde en Gcc o Clang?

En los encabezados que vienen con el compilador, todo lo que pude encontrar es __gnu_parallel::__yield siendo un contenedor en línea sobre sched_yield() , que supongo que es equivalente al std::this_thread::yield() que llama el código después de 100 iteraciones llamando __yield() . Entonces creo que no es eso. Pero tampoco vi __yield en la documentación de gcc.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

El intrínseco __yield se especifica como parte de las extensiones de lenguaje ARM C (consulte 8.4 "Sugerencias"). Emite la instrucción yield , que es el equivalente aproximado de la pause x86. Está pensado precisamente para situaciones como esperar en un spinlock; evita que la CPU golpee excesivamente la línea de caché (lo que perjudica el rendimiento), posiblemente ahorra algo de energía y, en el caso de una CPU con hiperprocesamiento, hace que más unidades computacionales estén disponibles para el otro procesador lógico.

(Tenga en cuenta que es puramente una función de la CPU, y no una llamada del sistema operativo o de la biblioteca; no proporciona un intervalo de tiempo de la CPU al sistema operativo como el llamado pause() o sched_yield() o std::this_thread::yield() las llamadas servirían.)

Aunque GCC es compatible con algunos de los intrínsecos de ACLE, parece que falta este. Debería poder sustituirlo por asm volatile("yield"); . La instrucción yield no tiene ningún efecto arquitectónico (se ejecuta como nop ), por lo que no se necesitan registros ni golpes de memoria.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda