首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统一减少了可用的OpenMP线程数。

统一减少了可用的OpenMP线程数。
EN

Stack Overflow用户
提问于 2021-08-11 17:16:53
回答 2查看 74关注 0票数 1

我在共享的安卓库中使用OpenMP。有一个示例方法,它只检查CPU数量和最大线程数。

代码语言:javascript
复制
int maxThreads = omp_get_max_threads();
int numProcs = omp_get_num_procs();

当我从一个基本的安卓应用程序(AppCompatActivity)中调用这个方法时,这两个值都会在高通855 CPU (8个核心)的设备上设置为8。

代码语言:javascript
复制
maxThreads = 8;
numProc = 8;

当我试图从一个统一应用程序调用此方法时,返回的最大线程数和procs数为2。

代码语言:javascript
复制
maxThreads = 2;
numProc = 2;

为什么联合应用程序中的最大线程数小于基本应用程序中的最大线程数?是否有办法增加实际使用的并行线程的数量?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-12 08:02:03

您没有说您使用的是哪个OpenMP实现,这肯定会很有用。

但是,假设Android在这个级别上的行为类似于Linux,那么可能会发生的是,联合正在设置进程的亲和力掩码(参见sched_{get,set}affinity(...),它反映了进程应该使用的logicalCPU)。OpenMP运行时几乎肯定会参考这一点,以确定创建线程的数量。

在Linux上,进程可以将线程关联到logicalCPU,该线程位于传入的亲和性掩码之外,但这肯定是不好的行为,可能导致性能较差,因为从根本上说,您的进程处于堆的底部,应该接受上级调度程序所要求的操作。

要确保您可以编写一个函数来打印关联掩码,那么您就可以看到正在发生的事情。或者,OpenMP实现可能有一个可预见的,这将使它告诉您它正在做什么。(例如,如果使用Intel或LLVM运行时,请尝试使用KMP_AFFINITY=verbose。)

票数 1
EN

Stack Overflow用户

发布于 2021-08-16 14:20:28

事实上,团结组织试图设置亲和力面具。它支持所有需要电源的CPU(大)。在我测试过的设备上有四个这样的核心。但实际上,该系统只允许启用其中的两个。因此,我只能使用两个OpenMP线程。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68746373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档