gpt4 book ai didi

fortran - GNU Fortran/OpenMP 程序如何设置和检索 stacksize-var ICV?

转载 作者:行者123 更新时间:2023-12-03 23:53:40 27 4
gpt4 key购买 nike

我正在尝试使用 gfortran/libgomp 构建第三方 OpenMP 程序,但是我在使用扩展来检索和设置 stacksize-var ICV 时遇到了麻烦。源代码带有 Intel Fortran( kmp_get_stacksize()kmp_set_stacksize() )和 Portland Group 编译器( omp_get_stack_size()omp_set_stack_size() )的替代方案,但是如何使用 GNU Fortran 和 libgomp 完成同样的事情?

我知道 OMP_STACKSIZEGOMP_STACKSIZE环境变量,但我的理解是实际的 ICV 是独立的,因此在程序启动后以编程方式设置其中之一不会影响 ICV,并且读取一个报告仅报告该环境变量,而不报告 ICV。

特定于 Linux 上运行的 gfortran 和/或 libgomp 的解决方案是可以接受的。

我正在使用 GCC 4.8.5 中的 gfortran 和 libgomp。

最佳答案

标准本身不提供修改或检索 stacksize-var ICV 的方法。因此,您注定要使用特定于实现的解决方案。

现在 libgomp 转发值 specified by environment variables directly to pthread .

所以你可以说 libgomp 将 stacksize-var 存储在 gomp_thread_attr 中。 .不幸的是,这似乎是 libgomp 中的本地符号我不相信你可以合理地访问这个。

libgomp的initialize_env已经在库初始化的时候调用了,不是在第一个并行区域,所以修改环境变量实际上是没有效果的。

对于非主线程,您至少可以读取实际值。尽管 pthread 可能使用对齐的堆栈大小,因此它可能与 libgomp 指定的值不同。

size_t stacksize;
pthread_attr_t attr;
// TODO check return values
pthread_getattr_np(pthread_self(), &attr);
pthread_attr_getstacksize(&attr, &stacksize);

关于fortran - GNU Fortran/OpenMP 程序如何设置和检索 stacksize-var ICV?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53378713/

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