Mac OS X에서 다수의 * 논리적 * 코어를 발견하는 방법은 무엇입니까?


381

Mac OS X를 실행할 때 컴퓨터에 몇 개의 코어가 있는지 명령 줄에서 어떻게 알 수 있습니까? Linux에서는 다음을 사용합니다.

x=$(awk '/^processor/ {++n} END {print n+1}' /proc/cpuinfo)

완벽하지는 않지만 가깝습니다. 이것은에 공급하기위한 것이므로 make결과가 실제 수보다 1 더 높습니다. 그리고 위의 코드는 Perl로 더 조밀하게 작성되거나 grep, wc 및 cut을 사용하여 작성할 수 있다는 것을 알고 있지만 위의 코드는 간결성과 가독성 사이의 좋은 균형이라고 판단했습니다.

매우 늦은 편집 : 명확히하기 위해 : 사용 가능한 논리 코어 수를 묻습니다 . 이는 동시에 make생성 하려는 동시 작업 수와 일치하기 때문 입니다. Chris Lloyd가 더 개선 한 jkp의 대답은 정확히 내가 필요한 것입니다. YMMV.


리눅스의 경우 다음을 사용하여 하나를 추가하지 않아도됩니다.grep ^processor /proc/cpuinfo | wc -l
courtlandj

3
stackoverflow.com/questions/6481005/…를 참조하십시오 nproc. 명령을 참고하십시오 .
Mike DeSimone

이것이 멍청한 질문이라면 미안하지만 논리 코어를 의미 할 때 물리 코어를 의미합니까? 용어는 어떻게 다릅니 까? 무엇을 더 잘하는지 이해하기 위해서입니다.
Charlie Parker

아니요, 물리적 코어를 의미하지는 않습니다. 물리 코어는 코어를 구현하는 칩의 트랜지스터 그룹입니다. 논리 코어는 운영 체제 및 사용자 프로그램의 핵심으로 보이는 것입니다. 많은 경우에, 이것들은 동일합니다. 그러나 인텔의 하이퍼 스레딩 기술 (및 기타)은 각 물리적 코어를 두 개의 논리적 코어로 표시합니다.
Mike DeSimone

답변:


796

sysctl 유틸리티를 사용하여이를 수행 할 수 있습니다 .

sysctl -n hw.ncpu

6
2011 년 중반 1.7GHz MacBook Air에서이 명령은 4라고 말합니다. 그러나 실제로 2 개의 코어 만있는 것으로 의심되어 system_profiler SPHardwareDataType이 동의하는 것 같습니다. 불일치를 설명 할 수 있습니까?
Joshua Flanagan

13
@JoshuaFlanagan 머신에는 몇 개의 물리적 코어가 있으며 어떤 칩입니까? 예를 들어 2 개의 물리적 코어가있는 코어 i7 인 경우 칩이 하이퍼 스레딩을 지원하고 4 개의 주소 지정 가능 코어가있는 것처럼 OS에 자체를 제공하므로 4로 표시됩니다.
jkp

142
당신이 정말로 걱정하는 경우, 시도 sysctl hw.physicalcpusysctl hw.logicalcpu, 그리고 일반적으로 sysctl hw모든 옵션에 대한.
가변 길이 코더

23
편집자 : 답변을 수락 한 후 수년을 변경하지 마십시오.
Mike DeSimone

2
El Capitan을 실행하는 2015 년 초 Mac에서는 작동하지 않습니다. "오류 :"hw.ncpu "는 알 수없는 키입니다"라는 메시지가 나타납니다. /etc/sysctl.conf에도 CPU 관련 항목이 없습니다. Frozen Flame의 답변이 효과가있었습니다.
TheGT

130

더 쉬운 방법 :

sysctl -n hw.ncpu

2
이로보고 된 수는 실제로 코어 수의 두 배입니다. 프로세서가 하이퍼 스레딩을 지원합니다.
mikeazo

3
이것은 나에게 4를 제공하지만 내가 system_profiler SPHardwareDataType믿을 수있는 것을 사용할 때 `모델 식별자 : MacBookPro9,2 프로세서 이름 : Intel Core i5 프로세서 속도 : 2.5 GHz 프로세서 수 : 1 총 코어 수 : 2`
Ciasto piekarz

31

이것은 크로스 플랫폼이어야합니다. 적어도 Linux 및 Mac OS X의 경우

python -c 'import multiprocessing as mp; print(mp.cpu_count())'

조금 느리지 만 작동합니다.


18

C에서이를 수행하려면 sysctl (3) 함수 계열을 사용할 수 있습니다.

int count;
size_t count_len = sizeof(count);
sysctlbyname("hw.logicalcpu", &count, &count_len, NULL, 0);
fprintf(stderr,"you have %i cpu cores", count);

코어를 세는 "hw.logicalcpu"대신 사용할 흥미로운 값은 다음과 같습니다.

hw.physicalcpu - The number of physical processors available in the current power management mode.

hw.physicalcpu_max - The maximum number of physical processors that could be available this boot.

hw.logicalcpu - The number of logical processors available in the current power management mode.

hw.logicalcpu_max - The maximum number of logical processors that could be available this boot.

Mike는 편집 해 주셔서 감사합니다. oldplen이 입력 매개 변수라는 것을 인식하지 못했습니다.
alfwatt

14

system_profiler SPHardwareDataType 프로세서 1 개와 코어 4 개가 있습니다.

[~] system_profiler SPHardwareDataType
Hardware:

    Hardware Overview:

      Model Name: MacBook Pro
      Model Identifier: MacBookPro9,1
      Processor Name: Intel Core i7
      Processor Speed: 2.6 GHz
      Number of Processors: 1
      Total Number of Cores: 4

      <snip>

[~] 

그러나 sysctl은 다음에 동의하지 않습니다.

[~] sysctl -n hw.logicalcpu
8
[~] sysctl -n hw.physicalcpu
4
[~] 

그러나 모든 CPU 슬롯을 차지 해야하는 프로그램을 실행할 때이 프로그램이 CPU 시간의 800 % (in top)에 걸리는 것처럼 sysctl이 올바르게 나타납니다 .

PID   COMMAND      %CPU  
4306  top          5.6   
4304  java         745.7 
4296  locationd    0.0  

3
직장에서 하이퍼 스레딩을보고 있습니다. 이를 통해 각 코어는 두 개의 실행 스레드 (pthread와 같은 OS 스레드와 동일 할 필요는 없음)를 처리 할 수 ​​있습니다. 결과적으로 MacOS는 각 물리적 코어를 두 개의 논리적 코어로 취급합니다.
Mike DeSimone 2016 년

안녕하세요 @MikeDeSimone CentOS의 경우 하이퍼 스레딩이 작동하는지 확인하는 방법을 보여줄 수 있습니까?
Ciasto piekarz


@Ciastopiekarz 저는 하이퍼 스레딩이 OS가 아닌 CPU 아키텍처 (인텔)의 기능이라고 확신합니다. 요점은 OS가 아무것도하지 않고도 물리적 CPU가 있다고 생각하게하는 것입니다. 그들에게 접근하는 것이 특별합니다. 따라서 CPU가 Intel이면 (모든 Mac에는 Intel이 제공됨) 그렇습니다. 하이퍼 스레딩이 있습니다. 그러나 PC에서 CentOS를 실행하는 경우 AMD 프로세서가있을 수 있습니다. 그들은 하이퍼 스레딩을 가지고 있지 않지만 일반적으로 동일한 (또는 더 낮은) 가격으로 두 배의 코어를 제공하기 때문에 실질적인 차이가 확실하지 않습니다.
Erk

@Erk OS는 차이점을 알고 있으며 실제로 CPU와 코어의 차이점뿐만 아니라 물리적에서 실행되는 여러 스레드를 알고 있습니다. sysctl hw.physicalcpu사용 가능한 물리적 CPU 코어 수와 사용 가능한 sysctl hw.logicalcpu논리적 CPU 수를 표시합니다. Windows / OSX / Linux와 같은 OS는 모든 CPU를 가지고있는 것처럼 보이게합니다 (유형에 관계없이). 리눅스와 같은 OS를 사용하면 어떤 CPU, 코어, 스레딩을 사용할 수 있는지 구성 할 수 있습니다.
Rahly

10
$ system_profiler | grep 'Total Number Of Cores'

2
더 빠름 : $ system_profiler SPHardwareDataType | 그렙 '코어의 총 수'
켄트

6
타이핑 시간을 포함하면 속도가 느려집니다
High Performance Mark

2
그것은 bash 스크립트에 있습니다. 타이핑 시간은 관련이 없습니다.
Mike DeSimone

3
Apple이 출력 형식을 변경 한 것처럼 보입니다. 대문자 사용에 주목하십시오 : 이전에는 'Total Number Of Cores'였습니다. 이제 'Total Number of Cores'입니다. 또는 이전에 잘못 입력했습니다. 죄송합니다!
kent

3
당신은 사용할 수 있습니다grep -i
Skylar Saveland

8

system_profiler | grep "Cores"명령을 사용하십시오 .

나는 :

2012 년 중반 MacBook Pro Retina.

프로세서 : 2.6 GHz Intel Core i7

user$ system_profiler | grep "Cores"
      Total Number of Cores: 4

user$ sysctl -n hw.ncpu
8

Wikipedia ( http://en.wikipedia.org/wiki/Intel_Core#Core_i7 ) 에 따르면 8 개의 물리적 코어가있는 Core i7이 없으므로 하이퍼 스레딩 아이디어가 반드시 필요합니다. 정확성을 sysctl위해 system_profiler값을 무시 하고 사용하십시오 . 실제 문제는 다른 프로세스를 방해하지 않고 4 개의 코어 (긴 컴파일 작업?)로 응용 프로그램을 효율적으로 실행할 수 있는지 여부입니다.

4 코어로 병렬화 된 컴파일러를 실행한다고해서 일반적인 OS 운영에 큰 영향을 미치지는 않습니다. 따라서 8 코어로 취급하는 것은 그리 나쁘지 않습니다.


1
논리 코어 수와 동일한 수의 프로세스를 생성하는 것은 (하이퍼 하이퍼 스레딩의 경우 물리적 코어 수의 두 배임) 나에게 아주 잘 수행되었습니다.
Mike DeSimone 2016 년

7

jkp가 주석에서 말했듯이 실제 물리적 코어 수는 표시하지 않습니다. 물리적 코어 수를 얻으려면 다음 명령을 사용할 수 있습니다.

system_profiler SPHardwareDataType

목표는로 생성 할 프로세스 수를 결정하는 것이 었 make으므로 jkp의 답변 (논리 코어 수)이 가장 적합합니다.
Mike DeSimone

3

다음 명령은 CPU에 대한 모든 정보를 제공합니다

$ sysctl -a | sort | grep cpu

좋았지 만 요청한 것은 아닙니다.
Mike DeSimone

1

설명

이 질문은 OP 그가 수 싶다고 말하지 않았다 물어 때 논리적 코어가 아닌 실제 얻을 수있는 방법으로, 코어의 수를 논리적으로 대답 있도록 (웃기려는 의도 없음) 답변을 실제 , 실제 물리적 코어의 수를하지 OS가 하이퍼 스레딩 부두를 통해 가상화하려고 시도하는 수

요세미티의 핸들 결함 업데이트

OS X Yosemite (그리고 곧 출시 될 El Capitan과 같은 최신 버전) 의 이상한 버그 로 인해 약간 수정했습니다. (이전 버전은 STDERR을 무시해도 여전히 완벽하게 작동했습니다. STDERR은 모든 수정 작업입니다.)


여기에 주어진 다른 모든 대답

  1. 잘못된 정보를 제공합니다
  2. 명령 구현 오류로 인해 정보를 제공하지 않습니다.
  3. 믿을 수 없을 정도로 느리게 실행됩니다 (1 분 동안 더 나은 시간 을 보냄).
  4. 너무 많은 데이터를 제공하므로 대화 형 사용에 유용 할 수 있지만 프로그래밍 방식으로 데이터를 사용하려는 경우 (예 : bundle install --jobs 3숫자 대신 3숫자보다 작은 숫자를 원하는 위치에 명령을 입력하는 경우) 쓸모가 없습니다 가지고있는 코어 수, 또는 적어도 코어 수 이하)

추가 정보 나 답변없이 추가 된 문자없이 믿을 수 있고 정확하며 합리적으로 신속하게 코어 수를 얻는 방법은 다음과 같습니다.

system_profiler SPHardwareDataType 2> /dev/null | grep 'Total Number of Cores' | cut -d: -f2 | tr -d ' '

3
방금 sysctl -n hw.ncpuMac Pro를 실행 했는데 아무런 문제 가 없었습니다 .
Mike DeSimone 2012 년

분명히 모든 유형의 Mac에서 테스트하지는 않았지만 때로는 정확 하다고 생각합니다 . 그러나 sysctl내 컴퓨터에서 정확한 결과를 얻지 못하고 다른 사람들도 같은 것을보고했습니다. 가에 의존 할 수없는 경우 항상 정확한 결과를, 다음은 신뢰할 수 있고 정확한 것으로 간주 할 수 없습니다.
iconoclast

당신은 또한 당신이보고있는 잘못된 행동과 당신이 그것을보고있는 플랫폼을 설명 할 수 있습니다. 따라서 sysctluser1706991처럼 올바른 작동 의 경계 가 더 잘 알려져 있습니다.
Mike DeSimone

다른 사람들은 이것이 하이퍼 스레딩에 의한 것이라고 제안했습니다. 따라서 sysctl로 보는 수는 실제로 많은 수를 가지고 있지는 않지만 시스템이 시뮬레이션하려고하는 코어 수입니다. 정확한 숫자를 원하면 내 방법을 사용하십시오. 컴퓨터가 가장 많은 코어 수를 알고 싶다면 sysctl을 사용하십시오.
iconoclast

이것을 테스트 할 때 @iconoclast는 'Total Number of Cores'가 현지화되어 있음을 발견했습니다. OS X이 영어 이외의 언어로 설정된 경우 솔루션이 실패합니다. 다음을 사용하여 종료 :sysctl -n hw.physicalcpu_max
CO

1

A의 맥북 프로 실행 매버릭스 , sysctl -a | grep hw.cpu일부 비밀 정보를 반환합니다. 보다 상세하고 접근 가능한 정보는 다음 machdep.cpu섹션에 공개됩니다 .

sysctl -a | grep machdep.cpu

특히 HyperThreading(HT) 프로세서의 경우 총 열거 CPU 수 ( logical_per_package)가 실제 코어 수 ( cores_per_package) 의 두 배로 표시 됩니다.

sysctl -a | grep machdep.cpu  | grep per_package

2008 년 초 Mac Pro의 경우 4가 나옵니다. 실제 코어 수는 2 개의 쿼드 코어 CPU 칩이 있으므로 8 개입니다.
Mike DeSimone

sysctl machdep.cpu는 다른 모든 불필요한 정보를 읽는 대신 작동합니다.
hsn

1

원래 질문에 명시되지 않았지만 (옵션이 아니라는 의견에서 OP 게시물을 보았지만) macOS의 많은 개발자는 Homebrew 패키지 관리자를 설치했습니다.

설치 될 Homebrew의 가정 (또는 요구 사항)이 존재하는 한 (예를 들어 회사의 엔지니어링 조직)이 문제를 우연히 해결하는 미래 개발자에게는 패키지에 nproc포함 된 일반적인 GNU 바이너리 중 하나가 있습니다 coreutils.

brew install coreutils

당신은 당신이 쓰기에 선호하는 것으로 스크립트가있는 경우 (리눅스 + 맥 OS 용) 대신에 두 번이, 또는 것을 피하기 위해 일단 if당신이 전화를 할 것인지 여부를 알고 OS를 감지 할 필요가 블록 nproc대를 sysctl -n hw.logicalcpu,이 더 나은 옵션.


0

위의 좋은 답변 2 개에 대한 의견 :

1) jkp의 승인 된 회신 및 설명 : hw.ncpu는 hw.logicalcpu ( https://ghc.haskell.org/trac/ghc/ticket/8594) 를 위해 더 이상 사용되지 않습니다. )

2) Karl Ehr의 2014 업데이트 : 내 컴퓨터 (2.5GHz 인텔 코어 i7 포함)에서 sysctl -a | grep machdep.cpu | grep per_package다른 숫자를 반환합니다.

machdep.cpu.logical_per_package : 16

machdep.cpu.cores_per_package : 8

원하는 값은 다음과 같습니다.

machdep.cpu.core_count : 4

machdep.cpu.thread_count : 8

어떤 경기 :

hw.physicalcpu : 4

hw.logicalcpu : 8


0

보다 편리한 방법으로 수행 할 수 있습니다.

$ nproc --all
32

macOS 및 Linux와 호환됩니다.


2
nprocmacOS Mojave에서 사용할 수없는 것 같습니다.
Mike DeSimone

알려 주셔서 감사합니다, 마이크 nprochomebrew를 통한 간단한 설치입니다.
Jay Taylor

내가 실행중인 시스템이 인터넷에서 연결이 끊어 졌으므로 homebrew는 도움이되지 않습니다. 아무것도 사용할 수없는 요구 "컬 사이트 | sudo는 bash는"
마이크 DeSimone
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.