제목은 모든 것을 말합니다 : 단일 CPU 코어를 사용하여 여러 CPU 코어를 사용하도록 설계된 구형 프로그램을 얻는 방법이 있습니까?
제목은 모든 것을 말합니다 : 단일 CPU 코어를 사용하여 여러 CPU 코어를 사용하도록 설계된 구형 프로그램을 얻는 방법이 있습니까?
답변:
불행하게도, 단일 CPU 용으로 작성된 레거시 프로그램은 여러 CPU 코어를 사용하도록 강요 할 수 없습니다. 다중 CPU 코어를 사용하려면 다중 스레드가 필요합니다. 스레드는 경쟁 조건 및 기타 문제가 발생하지 않도록 서로 통신해야합니다. 이전 응용 프로그램은 다시 작성하지 않고 응용 프로그램의 특성상 병렬 처리가 가능한 경우에만 CPU 코어 이상을 사용하도록 만들 수 없습니다.
그것으로 당신의 목표는 무엇입니까? 성능 향상? 안타깝게도 1 코어 만 사용하도록 설계된 응용 프로그램은 더 이상 사용하지 않습니다. 이것이 바로 "멀티 스레드"응용 프로그램에 대한 이야기입니다.
단일 코어를 사용하도록 설계된 프로그램에서 여러 프로세서를 활용하는 데는 적어도 세 가지 기술이 있습니다. 이러한 기술 중 가장 간단한 방법은 여러 코어를 사용하거나 응용 프로그램 코드와 적어도 부분적으로 병렬로 실행할 수있는 라이브러리 및 시스템 코드를 사용하는 것입니다. 가비지 콜렉션은 병렬화 될 수 있고 애플리케이션 실행과 병렬로 수행 될 수있는 기능의 예입니다. 자동 메모리 관리가 없어도 메모리 할당 기능에서 병렬 처리의 가능성이 있습니다. 메모리 할당자는 단순히 메모리 섹션을 사용 가능한 것으로 표시하는 것 이상의 작업을 수행 할 수 있기 때문입니다.
두 번째 기술은 이진 변환입니다. "응용 프로그램 다시 작성"으로 간주 될 수 있지만 소프트웨어에 의해 수행되고 소스 코드에 액세스 할 수 없습니다. 스레드 수준 병렬 처리를 생성하는 것은 바이너리 변환 (종종 다른 ISA에서 레거시 코드 실행, ISA 확장 활용 또는 특정 마이크로 아키텍처 최적화 및 동적 정보를 사용하여 더 높은 수준의 정보 제공)을 사용하는 대부분의 연구 개발의 주요 목표가 아닌 것으로 보입니다. 품질 프로파일 가이드 최적화), 그러나 잠재력은 분명합니다.
세 번째 기술은 추론 적 멀티 스레딩입니다. 현재 내가 아는 프로세서는 하드웨어 관리 형 추론 멀티 스레딩을 지원하지 않습니다. 그러나 하드웨어 트랜잭션 메모리가 도입되면서 HTM을 사용하여 메모리 사용 충돌을 감지 할 수 있기 때문에 런타임 시스템 구현을 구현하는 것이 다소 실용적입니다. 소프트웨어 관리 형 추론 멀티 스레딩에는 일반적으로 일부 이진 변환이 포함되지만 그 추론 적 특성으로 인해 별도의 기술을 고려할 수 있습니다.
이러한 기술의 실용성은 기존 시스템과 관련된 비용 (스레드와 스레딩 스레드 간의 통신 비용 포함), 악용 할 수있는 제한된 병렬 처리 및 제한된 투자 수익 (이윤을 얻을 수있는 중요한 응용 프로그램)에 의해 제한됩니다. 병렬화가 다시 작성 될 가능성이 높으며, 이러한 응용 프로그램 (특히 단일 코어를 여러 코어보다 높은 주파수에서 실행할 수있는 전력 / 열 제한)로 인해 많은 응용 프로그램이 상대적으로 혜택이 적으며 개발 비용이 상당합니다. 그러나 이러한 기술 이 존재하며 이론적으로 단일 코어를 사용하도록 설계된 응용 프로그램으로 여러 코어를 사용할 수 있습니다.
아뇨. 여러 코어를 사용하도록 프로그램이 명시 적으로 작성되었습니다. 여러 코어에서 작업을 수행하는 것은 쉽지 않습니다. 모든 스레드의 동기화가 필요합니다. 하나는 공을 던지고 다른 하나는 공을 연마하고, 하나는 공을 연마하고, 하나는 청소하고, 하나는 공에 충분한 양의 공기가 있는지 확인합니다. 이제 각 문자가 서로 독립적으로 스레드에서 실행되는 것으로 상상하십시오. 던지지 않을 때 누군가 공을 잡으려고합니다. 또는 누군가 공을 재생할 때 공을 닦으려고합니다. 또는 두 명의 캐릭터가 동시에 공을 잡으려고합니다. 충돌하는 방법은 너무 많습니다. 따라서 프로그래머는 여러 코어를 활용할 수 있도록 단일 코어 응용 프로그램을 신중하게 재 설계해야합니다.