tutorial punto producto paralelo español ejemplos calculo c++ openmp

c++ - punto - ¿Por qué no se permiten variables de índice OpenMP sin firmar?



openmp tutorial español (2)

De acuerdo con la especificación OpenMP 2.0 C / C ++ API (pdf), sección 2.4.1, esa es una de las restricciones del bucle for . No se da ninguna razón para ello, pero sospecho que es solo para simplificar las suposiciones que el código y el compilador tienen que hacer, ya que hay un código especial para garantizar que el rango no supere el valor máximo del tipo.

OpenMP 3.0 aparentemente también permite tipos sin firma, pero todavía no lo he visto en acción.

Tengo un bucle en mi código C ++ / OpenMP que se ve así:

#pragma omp parallel for for(unsigned int i=0; i<count; i++) { // do stuff }

Cuando lo compilo (con Visual Studio 2005) obtengo el siguiente error:

error C3016: ''i'' : index variable in OpenMP ''for'' statement must have signed integral type

Entiendo que el error se produce porque i no está firmado en lugar de firmado, y al cambiarlo para que se firme, se elimina este error. Lo que quiero saber es por qué esto es un error? ¿Por qué no se permiten variables de índice sin firmar? Mirar la página de MSDN para este error no me da pistas.


El compilador 12.0 de Microsoft C / C ++ integrado con Visual Studio 2013 aún es compatible con OpenMP 2.5 y no permite unsigned int para el contador de bucles.

GCC admite OpenMP 3.0 desde su versión 4.4 y permite unsigned int para el contador de bucles.