1

한번 작업을 4 개의 독립적 인 작업으로 나누어 병렬로 실행하십시오. 각 작업을 추가로 병렬로 실행할 수 있습니까? (각 작업에는 각 루프에 대해 많은 내용이 있습니다 - 병렬 코드로 구현 될 수 있음)병렬 코드 내 병렬

답변

0

분명히 할 수 있지만, 그것은 doesn't guarantee thread safety입니다.

당신은 당신의 반복 (더 많은, 더 나은)

  • 얼마나 많은 동시 스레드 수있는 CPU 핸들
  • 의 양의 크기 무엇

    • 불구하고 계정에 여러 요인을해야 프로세서의 코어

      Parallel.For(0, length1, i => 
      { 
          Parallel.For(0, length2, j => 
          {   
           Console.WriteLine(i * j); 
          }); 
      }); 
      
  • +0

    나는 보통 각 코어가 한 번에 1 개의 스레드를 처리 할 수 ​​있다고 생각하여 여러 개의 스레드 = 코어 수를 사용합니다. 나는 분명히 틀렸다. –

    1

    아마 알고리즘을 재검토하고 하나의 Parallel.For() 만 유지해야합니다. 그 이유는 다음 링크에 설명되어 있습니다. 단락에서 "외부 대 내부 루프":

    "보통 Parallel.For 및 Parallel.ForEach는 내부 루프가 아닌 외부 루프에서 가장 잘 작동합니다. 다음과 같은 예에서는 일반적으로 내부 병렬화의 이점을 위해 100 개 이상의 코어가 필요합니다. "

    Parallel.For (0, 100, i => 
    { 
        Parallel.For (0, 50, j => Foo (i, j)); // Sequential would be better 
    }); 
    
    +0

    ("상각", "희석"하지 말 것). Foo (i, j)가 제공하는 작업의 크기가 고르지 않은 경우가 아닙니다. 그런 다음 프로그램이 병렬 처리에 대한 기회를 최대로 식별하고 컴파일러/런타임 시스템이 실제 프로세서에서 병렬로 실행할 작업을 선택하도록합니다. 이 작업을 위해서는 작업 도용 스케줄러가 있어야합니다. D # C#이 있다면. –