0
#include <stdio.h>
#include <omp.h>
int main()
{
int i, key=85, tid;
int a[100] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33, 34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,6 4,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94 ,95};
#pragma omp parallel num_threads(2) private(i)
{
tid = omp_get_thread_num();
#pragma omp for
for(i=0; i<100; i++)
if(a[i] == key)
{
printf("Key found. Position = %d by thread %d \n", i+1, tid);
}
}
return 0;
}
여기 는 사실 내가 선형 검색에 순차 및 병렬 두 프로그램을 비교하고 병렬 순차적보다 더 증명해야 ... 나는 Fedora
에 GCC
을 사용하고 있는데 시스템은 듀얼 코어입니다 .. 내 병렬 프로그램입니다.OpenMP를 사용한 선형 검색의 병렬 프로그램이 순차 선형 검색 프로그램보다 실행 시간이 더 오래 걸리는 이유는 무엇입니까?
순차 및 병렬 실행 시간을 계산할 때 사용자와 sys 시간을 추가해야합니까 (두 개의 코어를 사용함)?
pls 나를 도와주세요. 미리 감사드립니다.
내가 제일 먼저해야 할 일은 검색에 훨씬 더 긴 목록을 처리하도록 프로그램을 설정하는 것입니다. 귀하가 귀하의 사례에서 제시하는 짧은 목록에 대해 병렬 처리를 설정하는 데 드는 시간 비용은 모든 이익을 훨씬 초과 할 것입니다. –
I 초 고성능 마크. 병렬 처리에서 배워야 할 첫 번째 일은 병렬 처리량이 수행 된 작업량과 어떻게 비교되는지 평가하는 것입니다. 이것은 또한 다른 병렬 패러다임과 구현의 오버 헤드가 무엇인지를 배워야한다는 것을 의미합니다. 귀하의 경우 오버 헤드가 여러 번 높아져서 병렬 성능이 매우 떨어집니다. 또한'printf' 호출은 직렬 배열 전체를 반복하는 것보다 더 많은 시간이 걸릴 것입니다. –