컴퓨터 과학자는 아니지만 프로그램입니다. 따라서 워크로드 분할 문제를 올바르게 이해했는지 확인하고 싶습니다. 이것에 대해 생각하는 올바른 방법 아래에 있습니까?전산 작업 부하 나누기 : 가능하거나 불가능한 곳
특히 다음 문장 (1)이 맞습니까?
(1)의 경우 A (X_a) + A (X_b) + A (X_c) + ... = B (X_a, X_b, X_c, ...)은 Y
을 산출되는 식이다 =A (X_n)이 바뀌면 X_m이 바뀌면 컴퓨터가 동시에 계산할 수있는 방정식의 부분을 할당하여 컴퓨터의 관점에서 더 빠르게 계산할 수 있는지 여부는 다음에 따라 다릅니다.
m이 n과 같지 않으면 특정 계산에 대한 작업 부하를 나누는 것이 성능 이득을 줄이고 시스템의 m과 n의 모든 조합에 해당되는 경우 단일 스레드를 통한 다중 스레드의 성능 향상은 불가능합니다 .
다른 말로하면, X_b와 X_c가 A (X_a)에 의존하고 프로세스 병목 현상을 일으키기 때문에 링크 된 변수가 멀티 스레드에 대한 능력을 저하 시킨다는 것을 올바르게 이해합니까? 다른 스레드는 A를 알고 있지만 기다려야합니다. 첫 번째 스레드는 명령을 실행하기 전에 출력을 제공하므로 부분으로 쉽게 분해되는 명령의 부분에 대한 동시 작업을 수행 할 수 없으며 계산은 각 계산의 각 부분을 하나의 스레드가 처리하는 데 많은 시간이 걸립니다. 다른 스레드가 동시에 작업하는 둘 이상의 스레드에서 수행하고 다른 스레드에서 즉석에서 완료되도록 결과를 합산하는 것입니다.
(2) 아니면 위의 병목 현상을 해결할 수있는 방법이 있습니까? 예를 들어이 병목 현상이 미리 알려진 경우 첫 번째 스레드가 초기에 작업을 병목 현상을 일으키는 모든 n에 대해 결과를 A (X_n)에 메모리에 저장 한 다음 작업 부하를 효율적으로 분할하여 A (X_i)를 i (X_a, X_b, X_c, ...)가 실행되기 전에 B (X_a, X_b, X_c, ...) 계산을 수행해야 할 때 어떤 방법으로 먼저 예측해야합니다. 실제로 실행됩니다. 그렇지 않으면 병목 현상이 발생합니다.
[편집 : NWP의 답변 맥락에서 명확하게하기 위해. 설명이 너무 길거나 명확하지 않은 경우에는 코멘트를 남겨주세요. LaTeX에서 몇 가지 그래픽을 작성하여 질문 글쓰기를 단축하십시오.]
"계산 I"프로그램에서 가장 긴 경로가 5 단위 이 예에서 시간. 이 가장 긴 경로를 알고 있고 실행중인 시스템이이 프로그램 "컴퓨팅 I"이 미래에 실행될 때 (실행 빈도를 기반으로) 예상 할 수있는 경우, 서브 프로그램 "컴퓨 트 B-> E"(어떤 것에도 의존하지 않음) else하지만 프로그램 "compute I"의 가장 긴 경로의 적절한 하위 집합 임)가 미리 실행될 수 있습니다. 결과는 사용자가 "컴퓨팅 I"을 요청하기 전에 메모리에 저장됩니다.
그렇다면 최대 속도가 9/4로 간주됩니까? B-> E가 준비되었으므로 다른 스레드가 기다릴 필요가 없습니다. 또는 "계산 I"의 최대 속도가 여전히 9/5로 간주됩니까?
이전에 실행 한 예상 프로그램에는 비용이 있지만이 비용은 "계산 I"실행의 각 인스턴스에 분산 될 수 있습니다. 예상 프로그램에 15 단계가 있지만 프로그램 "계산"이 예상 프로그램 실행마다 일반적으로 100 번 실행되고 모든 단계의 비용이 똑같다면 "계산 I"에서 가능한 최대 속도가 9라고 간단하게 말합니까?/(5 - 1 + 15/100)?
속도 향상은 이제 스레드 수와 가장 긴 경로뿐만 아니라 미리 계산을 저장할 수있는 메모리와 다른 프로그램이 "계산하기"를 예상 할 수있는 정도에 따라 달라집니다. 적절한 서브 프로그램을 미리 계산하십시오. 다른 프로그램 인 "compute X"는 "compute I"과 같은 가장 긴 경로의 길이를 가질 수 있지만 시스템은 "compute X"가 "compute I"과 동등하게 사전에 실행될 것으로 예상 할 수 없습니다. 사전 계산을 저장하기위한 메모리 증가를 희생시키면서 (i) 달성 한 속도 향상을 어떻게 높이는가? (ii) 일부 프로그램의 실행 타이밍은 다른 프로그램보다 사전에 예상 할 수 있으므로 병목 현상을 미리 계산할 수 있으므로이 방법은 최장 경로를 줄입니다. ?
그러나 가장 긴 경로가 서브 프로그램의 예측 사전 계산을 향상시키고 사전 계산 결과를 저장하는 데 더 많은 메모리를 동적으로 줄일 수 있다면 병목 현상은 계산상의 분할로 인해 속도 향상의 궁극적 인 상위 경계를 결정하는 것으로 간주 될 수 있습니다 작업량?
링크 된 변수 종속성 병목 관점/그래프 병의 관점에서 프로그램 "계산 I"의 멀티 스레딩 속도가 궁극적으로 상위 경계는 가장 긴 서브 프로그램 (다른 서브 프로그램은 그것에 의존/대기)에 의해 결정되는 것처럼 보입니다. 그러나 역학 관점에서 전체 시스템이 프로그램 전후에 실행되는 "프로그램"은 프로그램의 일부로 실행되며 "컴퓨팅 I"의 향후 실행 타이밍에 대한 충분한 예측 가능성과 더 많은 사전 계산을 저장할 수 있습니다. 독립 서브 프로그램은 "계산 I"의 모든 서브 프로그램의 길이를 1 단위로 완전히 줄일 수 있습니다. 즉, 충분한 예측 가능성과 메모리를 사용할 수 있다면 9/1 = 9의 속도 향상을 달성 할 수 있습니다.
멀티 스레딩을 통해 속도를 높이기위한 상한을 예측하는 데 올바른 관점은 무엇입니까? 충분한 메모리가있는 시스템에서 실행되는 프로그램은 멀티 스레딩에 제한이없는 것 같지만 자체적으로 보면 속도 제한에 대한 고정 제한이 있습니다.
또는 예상과 부분적인 사전 계산에 의해 가장 긴 경로를 줄이는 기능에 대한 질문은 속도가 빠르기 때문에 예측이 가능하고 예측할 수있는 방법으로 프로그램을 실행하기 때문에 사용자의 기대에 따라 멀티 스레딩 속도가 향상되지 않을 수 있으므로 프로그램 작성자 또는 시스템 디자이너에게 알려야하며 무시되어야하며/존재하지 않아야 만 하는가?
그것은 내가 기능적인 측면에서 (막연하게) 말하고있는 다이어그램 형태이므로 듣지 않아도별로 멀지 않았습니다. 나는 당신의 답을 +1하고 당신의 모범에 대한 나의 질문을 명확히했습니다. –
@GuidoJorg 제 대답의 맨 아래에 일부 텍스트를 추가했습니다. 나는 그것이 지금 명백하게되기를 바란다. – nwp