또는 운영 체제에서 제어합니까? Google의 새로운 Go 언어에는 프로그래머가 세분화 된 기능을 내장하거나 잘못 이해했는지 여부가 들었습니다.스레드가 실행해야하는 멀티 코어 CPU 코어를 프로그래밍 방식으로 선택하여 선택할 수 있습니까?
답변
Linux OS의 경우 sched_setaffinity이 답입니다. 리눅스 커널 2.5.8부터 지원됩니다.
이름
sched_setaffinity, sched_getaffinity은 - 설정하고 프로세스의 CPU 선호도가 선호도 마스크 실제로 는 각각 독립적으로 조절 될 수있는 스레드 별 속성입니다
#define _GNU_SOURCE
#include <sched.h>
int sched_setaffinity( pid_t pid,
size_t cpusetsize,
cpu_set_t *mask);
int sched_getaffinity( pid_t pid,
size_t cpusetsize,
cpu_set_t *mask);
마스크를 얻을 스레드 그룹의 스레드는 입니다. gettid (2) 호출에서 반환 된 값 은 을 인수 pid로 전달할 수 있습니다. 0뿐만 지정 PID는 호출 한 쓰레드의 특성을 설정하며, 스레드 그룹 메인 쓰레드에 대한 속성 를 설정한다 (2) GETPID를 호출 반환 된 값을 전달. (당신이 POSIX 스레드 API를 사용하는 경우, 대신 sched_setaffinity의) pthread_setaffinity_np (3()를 사용합니다.)
운영 체제에 따라 결정됩니다.
pthread_attr_setaffinity_np()
으로 힌트를 설정할 수 있습니다.
하지만 운영 체제가 사용자를 무시할 수 있습니다. 위의 호출은 프로그램이 OS에 제공하는 제안 일뿐입니다.
이동에 관해서는 아직 작업하지 않았거나 너무 깊이 훑어 보지 못했지만 Go에 대한 이해는 많은 병렬 처리가 다소 암묵적이라는 것입니다. 당신에게는 공동 루틴이 있습니다 (그들은 "장난"이라고 말합니다). 그것은 CPU 친 화성과 같으며 스레딩 자체의 개념은 분리되어 있습니다. 즉, 언어 런타임이 최선의 결정을 내리면 1 개의 CPU에서 모든 것을 수행하기로 결정할 수도 있습니다 ... 그러나 다시 한 번 강조하지만 너무 심하게 보지 않았으므로 잘못 될 수 있습니다. :-)
대답은 '예, 당신은 프로그래밍 프로세스가 실행되는 코어를 선택할 수 있습니다. 언급 된 arsane과 같이, 대답은 sched_set_affinity()와 pthread에 대한 pthread_setaffinity_np()에 있습니다. 여기
프로세스로이 작업을 수행하는 방법에 대한 nifty tutorial입니다 (this 질문에 대한 답변에서 유래한다.)
는 기본적으로,이 비트 마스크를 사용하여 수행됩니다. 즉 정수 (예 : 32 비트)가 있고 첫 번째 비트 == 1이면 해당 프로세스는 프로세서 1에서 실행될 수 있습니다. 두 번째 비트 == 1이면 해당 프로세스가 실행될 수 있습니다 프로세서 2 등.
기본적으로 선호도 비트 마스크 = 1 ... 111 (32 배). "프로세스가 프로세서 1, 2, 3, ..., 32에서 실행될 수 있습니다." 물론 코어가 2 개인 경우 추가 30 비트가 적용되지 않습니다.
그러나 비트 마스크를 0 ... 010으로 설정하면 "프로세서 2"만 해당 프로세스를 실행할 수 있습니다.
또한 리눅스에서 지원하는 프로세서가 maximum number 인 이유는 무엇입니까? (즉, x86 하드웨어를 사용하지 않고, 흔히 발견되는 하드웨어의 대부분, 클러스터링이없는 등).
- 1. VMWare 또는 다른 '가상화 소프트웨어'에서 CPU 코어를 설정할 수 있습니까?
- 2. AMD 멀티 코어 프로그래밍
- 3. memcached는 멀티 코어를 최대한 활용할 수 있습니까?
- 4. UITextView에서 프로그래밍 방식으로 텍스트를 선택할 수 있습니까?
- 5. 스레드가 실행되는 코어를 어떻게 알 수 있습니까? (Win XP에서)
- 6. Win32 : 멀티 코어/멀티 프로세서 시스템에서 스레드 CPU 사용률을 계산하십시오.
- 7. 멀티 코어, 하이퍼 스레딩 또는 멀티 프로세서에서 프로그래밍 방식으로 어떻게 결정할 수 있습니까?
- 8. 유닉스에서 C++로 멀티 코어 CPU 사용을위한 튜토리얼
- 9. 프로그래밍 방식으로 CPU 사용량을 어떻게 계산합니까?
- 10. 여기에 멀티 코어 이점이 있습니까?
- 11. 멀티 코어 프로그래밍 : 어려운 부분
- 12. 자바에서 멀티 코어를 달성하는 방법?
- 13. CPU 프로세스에 스레드가 하나 이상 있습니까?
- 14. 미래의 멀티 코어 컴퓨터에서 어떤 프로그래밍 패러다임이 가장 성공적일까요?
- 15. 멀티 코어를 리눅스에서 SIngle Core Processing으로 결합 할 수 있습니까?
- 16. 멀티 코어 코딩
- 17. wcf 및 멀티 코어
- 18. OpenCL에서 CPU 코어 수 선택
- 19. 코어 데이터로 테이블을 프로그래밍 방식으로 변경할 수 있습니까?
- 20. 멀티 코어 컴퓨터에서 그리기
- 21. SOLR 멀티 코어 공유 구성
- 22. 멀티 코어 프로세서의 멀티 스레드 응용 프로그램
- 23. SRFI-18의 멀티 코어 구현을 사용하여 구성표를 구현 하시겠습니까?
- 24. 멀티 스레드 Java 응용 프로그램이 멀티 코어 시스템을 잘 활용할 수 있습니까?
- 25. 멀티 코어 하드웨어의 numpy
- 26. 터미널 서버의 CPU 코어 사용량 모니터링
- 27. 멀티 코어 CPU 단일 스레드 동작, 달성 100 %
- 28. CPU 코어 스레딩 분류 기능
- 29. GNAT에서 작업을위한 특정 CPU 코어 설정
- 30. 얼랑 SMP 멀티 코어 서버
가능할 수도 있지만, 왜 그렇게하고 싶습니까? 일반적으로 운영 체제는 사용자 공간 응용 프로그램보다 코드를 실행할 CPU에 대해 훨씬 더 나은 결정을 내릴 수 있습니다. –
@ Zach 일부 알고리즘은 각 CPU의 기능을 잘 제어 할 수 있다면 실제로 더 잘 실행됩니다. 예를 들어, 롤 소유의 스핀 록을 사용하는 알고리즘은 스레드가 선점되면 매우 잘 수행되지 않으므로 각 스레드의 특정 코어에 바인딩하는 것이 가장 좋습니다. 아니면 매우 CPU 바인딩 된 물건에 대한 관련이 있다고 상상할 수 있습니다. 그건 ... 당신 말이 맞아요, 그건 종류의 틈새 물건입니다. – asveikau
@asveikau 물론, 어떤 CPU를 사용하고 있어도 선매 득점 여부에 영향을주지 않습니다. NUMA 아키텍처에서 중요한 부분을 생각할 수 있습니다. 그러나 사용자 공간 프로그램이 무작위로 선택하는 것보다 더 나은 이점을 얻을 수있는 결정을 내릴 수 있을지는 의문입니다. –