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

271
Vistas
¿Por qué recibo este error de compilación con GCC 5 y cilk-plus?

Por alguna razón, cilk_spawn no funciona con intrínsecos x86. Recibo un error cada vez que intento combinar los dos en el cuerpo de la misma función. (Tenga en cuenta que cilk_for funciona bien). Si elimino todas las instrucciones SIMD, compila y funciona bien.

 #include <stdio.h> #include <x86intrin.h> #include <math.h> #include <cilk/cilk.h> int main() { int w = cilk_spawn sqrt(10); __m128i x = _mm_set_epi64x(1, 1); x = _mm_add_epi64(x, x); cilk_sync; printf("%d\n", w); return 0; }

aquí está la salida de gcc:

 gcc-4.9 -std=c99 -march=native -fcilkplus -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o "main.o" "../main.c" In file included from /usr/lib/gcc/x86_64-linux-gnu/4.9/include/xmmintrin.h:1258:0, from /usr/lib/gcc/x86_64-linux-gnu/4.9/include/x86intrin.h:31, from ../main.c:2: ../main.c: In function 'main': /usr/lib/gcc/x86_64-linux-gnu/4.9/include/emmintrin.h:581:1: error: inlining failed in call to always_inline '_mm_set_epi64x': function not inlinable _mm_set_epi64x (long long __q1, long long __q0) ^ ../main.c:9:10: error: called from here __m128i x = _mm_set_epi64x(1, 1); ^ In file included from /usr/lib/gcc/x86_64-linux-gnu/4.9/include/xmmintrin.h:1258:0, from /usr/lib/gcc/x86_64-linux-gnu/4.9/include/x86intrin.h:31, from ../main.c:2: /usr/lib/gcc/x86_64-linux-gnu/4.9/include/emmintrin.h:1025:1: error: inlining failed in call to always_inline '_mm_add_epi64': function not inlinable _mm_add_epi64 (__m128i __A, __m128i __B) ^ subdir.mk:18: recipe for target 'main.o' failed ../main.c:10:4: error: called from here x = _mm_add_epi64(x, x); ^ make: *** [main.o] Error 1

Acabo de notar que eso fue con GCC 4.9 pero el mensaje de error es el mismo con GCC 5.

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

0

Supongo que cilk crea dos funciones (envoltura sobre sqrt y su principal) para programarlas en diferentes subprocesos, si es necesario/posible. El problema es que, en estas condiciones, la función mm * ahora se llama indirectamente y, por lo tanto, no se puede insertar, al menos no sin información adicional de las etapas de análisis de optimización que ha desactivado.

Noté que compilas con -O0. Sospecho que si compila -O2, podría funcionar, ya que los pases de optimización adicionales proporcionarán al compilador más información necesaria para alinear estas funciones.

over 4 years ago · Santiago Trujillo Denunciar

0

Pude compilar el código que fallaba con el mismo error especificando los indicadores -msse y -msse2 .

https://www.mail-archive.com/blfs-dev@lists.linuxfromscratch.org/msg00033.html


Enlace de Godbolt al que se hace referencia en el siguiente comentario , requerido por las "mejores prácticas" actuales de SO .

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