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

158
Vistas
¿Cómo funcionan los identificadores de subprocesos de OpenMP con la recursividad?

Aquí hay un programa recursivo simple que se divide en dos para cada llamada recursiva. Como era de esperar, el resultado es 2 + 4 + 8 llamadas a rec, pero el número de subprocesos es siempre el mismo: dos, y los identificadores rebotan entre 0 y uno. Esperaba que cada llamada recursiva retuviera la identificación, y que al final se hicieran 8 subprocesos. ¿Qué está pasando exactamente? ¿Hay algún problema con el código?

 #include <stdio.h> #include <omp.h> void rec(int n) { if (n == 0) return; #pragma omp parallel num_threads(2) { printf("Currently at %d -- total %d\n", omp_get_thread_num(), omp_get_num_threads()); rec(n - 1); } } int main() { omp_set_nested(1); rec(3); }
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Su código funciona como se esperaba según el estándar OpenMP. En la documentación de OpenMP puede encontrar lo siguiente sobre omp_get_num_threads :

Resumen: la rutina omp_get_num_threads devuelve el número de subprocesos en el equipo actual .

Enlace: la región de enlace para una región omp_get_num_threads es la región paralela envolvente más interna .

Efecto: la rutina omp_get_num_threads devuelve la cantidad de subprocesos en el equipo que está ejecutando la región paralela a la que se vincula la región de la rutina. Si se llama desde la parte secuencial de un programa, esta rutina devuelve 1.

omp_get_thread_num tiene la misma región de enlace:

La región de enlace para una región omp_get_thread_num es la región paralela envolvente más interna .

Significa que omp_get_num_threads y omp_get_thread_num se unen solo a la región paralela más interna, por lo que no importa cuántas regiones paralelas anidadas se utilicen. Cada una de sus regiones paralelas está definida por #pragma omp parallel num_threads(2) , por lo tanto, el valor de retorno de omp_get_num_threads es 2 (siempre que tenga suficientes subprocesos disponibles) y el valor de retorno de omp_get_thread_num es 0 o 1 .

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