没有用于omp_set_num_threads()的特定子例程

时间:2019-03-14 00:18:54

标签: fortran openmp

我想通过以下操作将线程号设置为10:

CALL OMP_SET_NUM_THREADS(10)
!$OMP PARALLEL 
T=OMP_GET_NUM_THREADS()
!$OMP END PARALLEL
PRINT*, T

它打印出10,是正确的。但是,如果我定义了一个变量NUM_THREADS,并将其传递到获取线程号子例程中,如下所示:

INTEGER(KIND=16), PARAMETER :: NUM_THREADS=10
CALL OMP_SET_NUM_THREADS(NUM_THREADS)

运行它,它给了我错误:

Error: There is no specific subroutine for the generic ‘omp_set_num_threads’ at (1).

那是为什么?

1 个答案:

答案 0 :(得分:1)

我不知道您的编译器具有哪种KIND=16整数类型,但似乎这是非标准类型的,OpenMP没有相应的子例程。

确实没有理由使用非标准的Internet类型的数字来轻松地用标准的16位或32位整数表示。

将类型描述符从INTEGER声明中删除,它应该可以工作。