0

현재 쿼드 코어 프로세서에서 일부 코드의 직렬 구현과 병렬 구현을 비교하고 있습니다. 이해하고 측정하고 싶은 것 중 하나는 직렬 코드가 단일 코어에서 실행될 때 직렬 코드가 어떻게 수행되는지입니다.멀티 코어 시스템에서 gcc 최적화 -o3 이해

직렬 코드를 컴파일 할 때 gcc의 -O3 옵션을 사용하고 처음에 직렬 코드가 너무 초라한 것을 알지 못했습니다. 그러나 내가 알아챈 한 가지는 코어 중 하나에서 다른 연산 집약적 인 프로세스를 실행할 때 직렬 버전의 성능이 저하된다는 것입니다.

Total Time elapsed: 1s, 233ms <- only serial code is running 
Total Time elapsed: 1s, 238ms <- only serial code is running 
Total Time elapsed: 2s, 128ms <- serial code run but other code is running on another core 
Total Time elapsed: 2s, 220ms <- serial code run but other code is running on another core 

나는 4 개 개의 코어 중 하나에서 실행되는 백그라운드 프로세스에 적용될 수 있습니다 추측하고있다 :

는 여기에 몇 가지 숫자입니다. 그러나 쿼드 코어 프로세서에서 두 개의 프로세스를 실행하는 것이 가장 좋습니다. 따라서 4 개의 코어를 모두 포화시키지 않아야합니다.

내가 궁금한 점은 O3 프로세스의 일부 단계에서 코드가 쿼드 코어 설정을 활용할 수 있다고 믿을만한 이유가 있는지, 아니면 더 정확하게 말하면 왜 그것이 " 직렬 버전 "은 다른 코어를 사용할 수있을 때 더 우수한 성능을 발휘합니까? 나는 GCC 문서를 이해하려고 노력하고 있었고 스레딩에 대한 언급이 있었다. 그러나 실제로 그것을 얻지는 않으며, O3가 하나 이상의 코어를 이용하기 위해 할 수있는 일과하지 않을 일을 정확히 이해할 수 있는지 궁금합니다. 그것은, 내가 인텔 (R) 코어 (TM) i7-3820 CPU의 @의 3.60GHz를 사용하고 리눅스 민트를

답변

1

-O3을 13

감사를 실행하고 가치가 무엇인지에 대한

은하지 않습니다 하나 이상의 코어의 얼굴.

공유 리소스가 프로세서에 표시됩니다 (메모리 대역폭 및 캐시).

관련 문제