如何在arm的big.Little架构上激活特定核心?

问题描述 投票:0回答:1

我正在使用 android-ndk-15c 开发 C++ 代码,并尝试在具有 10 个 ARM 核心的处理器上可用的特定核心上运行线程(并非所有核心都相同;Big.little 架构)。然而,并非所有核心始终处于活动状态。如果我尝试使用不活动的 cpu 调用 sched_setaffinity,该调用将返回错误消息。这是示例代码。

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/syscall.h>

void getCpus() {
  cpu_set_t my_set;
  int syscallres = sched_getaffinity(0, sizeof(cpu_set_t), &my_set);
  if( syscallres ) {
        int err = errno;
        printf("Error in the syscall getaffinity: err=%d\n", err);
  }
  for(unsigned cpu = 0; cpu < 10; cpu++ ) {
    if( CPU_ISSET(cpu, &my_set) ) {
      printf( "cpu %d available!!\n", cpu );
    }
  }
}

void setCpu( int cpu ) {
  cpu_set_t my_set;
  CPU_ZERO(&my_set);
  CPU_SET( cpu, &my_set);
  int syscallres = sched_setaffinity(0, sizeof(cpu_set_t), &my_set);
  if( syscallres ) {
        int err = errno;
        printf("Error in the syscall setaffinity: cpu=%d err=%d\n", cpu, err);
  }
}


int main () {
  getCpus();
  setCpu(3);
}

输出示例:

cpu 0 available!!
cpu 1 available!!
Error in the syscall setaffinity: cpu=3 err=22

cpu 3 处于活动状态时的另一个输出(不是由于我的代码;android 可能会根据负载激活一些核心)。

cpu 0 available!!
cpu 1 available!!
cpu 2 available!!
cpu 3 available!!
cpu 4 available!!

如何通过ndk系统调用激活特定核心?

c++ android-ndk arm cpu-cores
1个回答
0
投票

我不认为单个核心可以被激活,但看起来......

android:PowerManager允许您查看是否存在持续性能模式,可以通过调用

setSustainedPerformanceMode

在Window上设置该模式

这应该会唤醒 CPU 供您使用。另外,WakeLocks 看起来像是警告 Android 您想要访问的不仅仅是“空闲”资源。

© www.soinside.com 2019 - 2024. All rights reserved.