是否有一种编程方法可以为Linux操作系统在c/c ++中为进程设置CPU亲和性.
我在尝试着:
使用处理器固定同时运行16个副本(每个核心2个副本)
在处理器固定(每个核心2个副本)的同时运行8个副本,并在某个功能说功能1完成后将处理器核心翻转到最远的核心.
我面临的问题是如何选择最远的处理器.
有些朋友建议使用sched_getaffinity和sched_setaffinity,但我认为没有找到任何好的例子.
我如何知道在C程序中,我的代码运行在哪个物理处理器和核心上?我正在使用Linux和gcc 4.4.3.
我正在尝试为Android编写代码,它会给我一些处理器的信息(id?)和运行线程的核心.
我已经谷歌和grep'ed一些灵感的来源,但没有运气.我所知道的是,我很可能需要一些C/C++调用.
我的工作如下:
#include <jni.h>
int getCpuId() {
// missing code
return 0;
}
int getCoreId() {
// missing code
return 0;
}
JNIEXPORT int JNICALL Java_com_spendoptima_Utils_getCpuId(JNIEnv * env,
jobject obj) {
return getCpuId();
}
JNIEXPORT int JNICALL Java_com_spendoptima_Utils_getCoreId(JNIEnv * env,
jobject obj) {
return getCoreId();
}
Run Code Online (Sandbox Code Playgroud)
整个项目编译并运行得很好.我能够从Java中调用函数,并得到正确的响应.
在这里有谁可以填补空白?
concurrency java-native-interface multithreading android android-ndk
是否有一个函数或任何其他方式可以以编程方式知道我的程序(pid)的给定线程正在哪个处理器的哪个核心上运行?如果可能的话,OpenMP 或 Pthreads 解决方案都会对我有所帮助。谢谢。