gpt4 book ai didi

multithreading - omp_get_num_threads() 和 omp_get_thread_num() 返回废话

转载 作者:行者123 更新时间:2023-12-04 06:41:29 24 4
gpt4 key购买 nike

我刚开始使用英特尔 Fortran 编译器和 Visual Studio 2015 在 Fortran 中使用 OpenMP。在项目属性中,我将“Fortran -> 语言 -> 处理 OpenMP 指令”设置为“生成并行代码 (/Qopenmp)”

我有一个简单的程序,如下所示:

program hellothreads
integer threads, id
call omp_set_num_threads(3)
threads = omp_get_num_threads()

print *,"there are", threads, "threads"

这产生

there are -2147483648 threads



当然没有。不过,设置线程数似乎可以正常工作,因为:
   !$OMP Parallel private(id) shared(threads)
threads = omp_get_num_threads()
id = omp_get_thread_num()
print *, "hello from thread", id, "out of", threads
!$OMP end Parallel

输出

hello from thread -2147483648 out of -2147483648

hello from thread -2147483648 out of -2147483648

hello from thread -2147483648 out of -2147483648



并继续:
   !$OMP Parallel private(id) shared(threads)
threads = omp_get_num_threads()
id = omp_get_thread_num()
print *, "this is thread", id, "of", threads
!$OMP end Parallel

输出

this is thread -2147483648 of -2147483648

this is thread -2147483648 of -2147483648



最后,如果我在“打印”中调用 OpenMP 函数,则会出现不同的奇怪行为:例如:
   !$OMP Parallel private(id) shared(threads)
print *, "this is thread", omp_get_num_threads(), "of", omp_get_thread_num()
!$OMP end Parallel
stop
end

输出

this is thread NaN of NaN

this is thread NaN of NaN



我的配置和/或代码有什么问题?

最佳答案

使用implicit none在你所有的 Fortran 程序中!!!

这样做之后,您将意识到这些函数没有被声明并假定为 real .然后将无意义的实际值转换为 integer值并存储在您打印的变量中。

正如@francescalus 在评论中建议的那样,use omp_lib您使用的模块包含正确的函数声明,并将帮助您检查是否正确使用它们。

关于multithreading - omp_get_num_threads() 和 omp_get_thread_num() 返回废话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37023806/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com