2010-06-14 2 views
1

나는 병렬로 작동하는 C++ 프로그램 (소스)을 가지고있다. 그러나 g ++을 사용하여 컴파일 (우분투 10.04 및 g ++ 4.4.3 사용)하고 실행하면 두 개의 CPU 코어 중 하나가 전체로드되고 다른 하나는 "아무 것도하지 않습니다."C++/g ++ : 동시 프로그램

그래서 저는 저에게 프로그램을 주신 ​​분께 말씀 드렸습니다. 나는 2 개의 CPU 코어 용으로 컴파일 된 프로그램을 얻으려면 g ++ 용 특정 플래그를 설정해야한다고 들었다. 그러나 코드를 보면 병렬 처리를 가리키는 행을 찾을 수 없습니다. - 멀티 스레드 애플리케이션을위한 내장 함수, 즉 그것이 내가 포함 된 모든 표준이 아닌 라이브러리를 찾을하지 않았기 때문에 (여분의 라이브러리없이 병렬 코드를 작성할 수 있습니다

  • 어떤 C++ 있습니다

    그래서 나는이 개 질문이)?

  • 2 개의 CPU 코어에 대해 프로그램을 컴파일하고 컴파일하여 컴파일러가 병렬로 실행되도록 컴파일러에게 알려주는 g ++ 플래그가 실제로 존재하는 것은 사실입니까?
+0

OpenMP? _______ – kennytm

+0

포인터를 사용해 주셔서 감사 합니다만 OpenMP가 사용되지 않습니다. – phimuemue

+0

내 추측이다 : 프로그램이 동시 프로그래밍을 할 posix 스레드를 사용합니다. 또한 올바른 플래그를 설정하지 않으면 코드를 순차적으로 만드는 매크로가 있습니다. –

답변

3

는 AFAIK 여전히 그 루프 반복 (-ftree-PARALLELIZE - 루프)의 병렬화를 제외하고, (이것은 확실히 사소 작업이다) 병렬 단일 스레드 응용 프로그램을 만들기 위해 고안된 컴파일러 플래그가 악용되지 않습니다 신중하게 활성화해야합니다. 여전히 명시적인 스레드 생성이 없더라도 몇 가지 명령어 시퀀스를 병렬 처리하기위한 명령어는 OpenMP 일 수 있습니다.

1

현재 C++ 언어 표준은 언어 또는 표준 라이브러리에서 다중 처리를 지원하지 않습니다. 제안 된 C++ 0x 표준은 스레드, 잠금 장치 등을 지원합니다. g ++에 대한 플래그를 알지 못해서 마술처럼 프로그램을 다중 처리 할 수 ​​없으며 그러한 플래그가 수행 할 수있는 것을보기가 어렵습니다.

+0

OpenMP (내 대답 참조)와 코드를 병렬로 만드는 일부 pragma가 있습니다. – INS

2

"thread"및/또는 "std :: thread"발생을 소스 코드에서 찾으십시오.

1

제가 생각할 수있는 유일한 점은 openMosix 또는 LinuxPMI (openMosix의 후임)입니다. 코드가 프로세스를 사용하는 경우 "마이그레이션"기법을 사용하여 프로세스가 다른 시스템 (지정된 Linux 배포가 설치되어 있음)에 작동하도록 할 수 있습니다. 코드에서 스레드

확인 (그렙 -i 스레드), 프로세스 (그렙 포크). 이러한 것이 없으면 MPI을 확인하십시오. MPI는 내가 기억하기 때문에 몇 가지 추가 구성이 필요합니다 (교수진의 일부 숙제에만 사용).

gcc (및 기타)는 OpenMP with some pragmas과 몇 가지 병렬 처리 방법을 구현합니다.

관련 문제