![여러 하위 프로세스가 여러 코어를 활용합니까?](https://rvso.com/image/1609692/%EC%97%AC%EB%9F%AC%20%ED%95%98%EC%9C%84%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EA%B0%80%20%EC%97%AC%EB%9F%AC%20%EC%BD%94%EC%96%B4%EB%A5%BC%20%ED%99%9C%EC%9A%A9%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
질문이 있는데 기본적으로 컴퓨터의 모든 코어를 활용하는 게으른 방법을 탐색하고 있습니다.
데이터 세트 D에서 작동하는 "./theprogram" 프로그램이 "당황스러울 정도로 병렬"이고 j에 의해 결정된 데이터 세트의 하위 세트에서 프로그램을 수행하는 명령줄 인수 j를 사용한다고 가정해 보겠습니다.
그런 다음 터미널에서 명령을 실행한다고 가정합니다.
./theprogram j1 &
./theprogram j2 &
./theprogram j3 &
. etc
. etc
. etc
./theprgoram jfinal &
이제 j1, j2, ... jfinal에 대한 하위 프로세스를 생성했습니다.
내 질문: 현대적인 유닉스 시스템(예: 멀티코어 칩에서 실행되는 최신 Mac OS X)이 있다고 가정합니다.
그러면 프로세스가 모든 코어에 별도로 분산됩니까? IE 나는 내 모든 코어를 활용하고 있습니까?
답변1
이론적으로는 그렇습니다.
운영 체제는 사용되지 않은 CPU 코어에 작업을 예약합니다. 코어에서 작업 예약을 취소했기 때문에 코어가 언제 사용되지 않는지 알 수 있습니다.
프로세스의 구조에는 입력(디스크, 키보드, 마우스 등)을 기다리고 있는지 여부를 나타내는 플래그가 있으므로 이러한 항목을 기다리고 있지 않으면 예약 가능합니다.
모든 코어에 대해 운영 체제는 기본적으로 예약 가능한 작업 목록을 실행하고 예약합니다. 작업에는 코어에서 일정 시간이 주어진 다음 OS가 확인할 수 있도록 다시 일시 중지됩니다.다른프로세스를 실행해야 합니다.
다른 프로세스를 실행할 필요가 없다면 귀하의 프로세스는 여전히 목록의 맨 위에 있으며 다른 프로세스를 진행하게 됩니다.
자연스러운 효과는 프로세스 중 어느 것도 서로를 차단하지 않거나 디스크 액세스를 기다리는 데 당황스러운 시간을 소비하지 않는다는 가정 하에 약간의 관리 오버헤드로 CPU가 완전히 활용된다는 것입니다.
병렬화 가능한 데이터가 있는 모든 멀티스레드 애플리케이션에서 이를 테스트할 수 있습니다. 비디오 인코딩과 데이터 압축은 이러한 종류의 병렬 처리가 효과를 발휘하는 두 가지 상황입니다.
Handbrake는 원하는 만큼 많은 CPU 코어를 사용할 수 있고 이를 통해 높은 수준의 속도 향상을 달성할 수 있는 CPU 기반 비디오 인코더(최근 GPU 지원 포함)입니다. 많은 비디오 인코더는 다중 코어를 효과적으로 활용할 수 있습니다. x.264 및 기타 인코더도 다중 스레드를 지원합니다.
7-Zip은 압축 속도를 높이기 위해 LZMA2 알고리즘에서 여러 스레드를 사용할 수도 있는 압축 프로그램입니다. 압축 사전 구축은 합리적인 공유 프로세스이며 일단 사전이 있으면 실제 압축은 "사소하게" 병렬화 가능합니다.
답변2
다중 처리를 위해서는 다음을 준수하는 코드 섹션을 선택해야 합니다.
- 이전 결과에 의존할 수 없음
- 특정 순서로 실행될 필요가 없습니다.
- 나중에 코드에서 액세스해야 하는 항목을 반환하지 않습니다.
그래서 내가 들은 바로는 다중 코어를 사용할 수 있어야 한다는 것입니다.