2014-04-14 4 views
1

이 꽤 정직 : GNM 병렬을 사용하는 SPMD에서 가장 작은 파일을 가장 효율적으로 처리하고 있습니까?

내가 어떤 실행 ./proc를 통해 처리 할 수있는 폴더 data/에 많은 파일을 말한다. 효율성을 극대화하는 가장 간단한 방법은 무엇입니까? I이 일부 효율성을 획득하고있다 : 크기에 따라 데이터를 나열

ls --sort=size data/* | tac | parallel ./proc 

다음 tac (cat의 역)은 작은 크기의 파일을 먼저 처리되도록 출력 순서를 튀긴다. 이것이 가장 효율적인 솔루션입니까? 그렇지 않다면 어떻게 효율성을 향상시킬 수 있습니까? (간단한 솔루션 선호)?

큰 작업이 파이프 라인을 차단하지 않기 때문에 효율성이 향상된다는 것을 기억합니다. 예를 제외하고는이 배후의 이론을 찾거나 기억할 수 없으므로 참조가 크게 도움이 될 것입니다.

+0

'SIMD'와'SPMD'를 혼동하는 것 같아요. –

+0

당신이 맞아요. 감사합니다. –

+0

나는 또한 당신이 c라고 생각합니다. 불쾌한 "효율성"과 "진실의 환상". N 작업을 처리하는 데 가장 작은 작업을 처리하는 데 M 초가 걸린다면 가장 큰 작업을 처리하는 데 M 초가 걸리는 것보다 더 효율적이거나 덜 효율적입니다. 다른 점은 처음에 더 많은 진전이 이루어지고있는 것 같습니다. 긴 작업은 여전히 ​​개별적인 기준으로 마무리하는 데 시간이 오래 걸립니다. GNU 병렬은 주어진 순서대로 처리 스트림의 지정된 수를 유지하면서 합리적으로 좋은 일을합니다 ... – twalberg

답변

1

모든 작업을 실행해야하며 모든 작업을 완료하기 위해 시간을 최적화하려면 동일한 시간에 완료해야합니다. 이 경우 작은 작업을 마지막으로 실행해야합니다. 그렇지 않으면 마지막 큰 작업에서 방금 시작한 것을 제외하고 모든 CPU가 완료되는 상황이 발생할 수 있습니다. 여기에서는 하나를 제외한 모든 CPU의 CPU 시간을 낭비합니다.

여기 8 일이다 : 7 인출 1초 번 5 취 제 듀얼 코어 큰 작업에

1368 
24755555 

: 이중 코어 작은 제 작업에

1 2 3 4 55555 6 7 8 

555557 
123468 
+0

예! 고맙습니다. 솔직하게 말하면, 나는 작은 것들이 제일 먼저 있어야한다는 것을 기억하고 있으며, 나는 이것과 같은 대답을 정말로 찾고있었습니다. –