如何激活arm.little架构上的特定核心?

时间:2017-09-06 06:29:15

标签: c++ android-ndk arm core

我正在使用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系统调用激活特定核心?

1 个答案:

答案 0 :(得分:0)

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

android : PowerManager可让您查看是否存在持续的效果模式,可以通过调用setSustainedPerformanceMode

在Window上设置

这应该唤醒CPU供您使用。此外,WakeLocks看起来像他们警告Android你想要访问超过&#34;空闲&#34;资源。

相关问题