C++ 11에서 std :: thread를 사용하는 동안 코어 선호도 (스레드 1은 첫 번째 코어, 스레드 2는 두 번째 코어 ...)를 설정하려고합니다.스레드 얻기 C++ 11에서 pthreads를 통해 코어 선호도
저는 이미 다양한 주제와 인터넷에서 검색했으며 C++ 11 API는 그러한 저수준 기능을 제공하지 않습니다. 한편
는 pthreads의 내가 "가 pthread_t"내 표준의 값 : 스레드를 얻을 수 있다면이 인간의 합리적인 또는 적어도 합법적 묻는 경우 나도 몰라 (유용 할 것이다 pthread_setaffinity_np와 함께 그것을 위해).나는 결국 가지고 싶어하는 예를 보자 프로그램은 이것이다 :
#include <thread>
#include <pthread.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#define CORE_NO 8
using namespace std;
void run(int id) {
cout << "Hi! I'm thread " << id << endl;
// thread function goes here
}
int main() {
cpu_set_t cpu_set;
CPU_ZERO(&cpu_set);
for(int i=0; i<CORE_NO; i++)
CPU_SET(i, &cpu_set);
thread t1(run, 1);
// obtaining pthread_t from t1
/*
pthread_t this_tid = foo(t1);
pthread_setaffinity_np(this_tid, sizeof(cpu_set_t), &cpu_set);
*/
t1.join();
return 0;
}
난 정말 (같은 특성을 제공해야합니다) 내 프로젝트의 전체 구조를 변경하지 않으려는 것입니다. 지금은 std :: thread를 방대한 용도로 사용했지만 예제에서 보았 듯이 pthread API도 사용할 수 있습니다.
이 문제를 해결할 방법이 있습니까?
'이러한 특성을 제공해야합니다. - 스레드 선호도를 설정 한 후에 어떤 성능 향상을 보았습니까? 번호가 있으십니까? –
@ 마틴 제임스 - 두 번째. Rob013 - 내 경험상, OS가 자동으로 어쨌든 수행 할 핵심 어피 니티 (core affinity)를 어지럽히 기 전에 아주 특별한 상황을 만들어야합니다. 그리고 프로그램 실행중인 하드웨어에 관계없이 스레드에 대한 최적의 친화력을 런타임에 해결하려면 코드로드가 필요합니다. 이는 혼란 스럽습니다. 당신은 아마도 OS가 최선을 다하는 것이 더 낫다. 핵심 동질성이 정말로 필요하다면 어쨌든 아키텍처를 완전히 망칠 것입니다. – bazza
귀하의 조언에 감사드립니다. 나는 당신의 견해를 보았습니다. OS 스레드 관리가 며칠 전 핵심 동질성을 배웠던 학생보다 낫다고 확신합니다. 그건 그렇고, 내 질문은 포팅 프로젝트 내에서의 특정 문제에 관한 것이 었습니다. 그래서 나는 "우리는 * 핵심 동질성을 사용합니다. 당신은 그것을 구현합니다."라고 말했습니다. 그리고 요아킴의 해결책은 충분합니다. – Rob013