루프 안에는 루프의 패턴이 있습니다.
내부 루프의 루프 몸체에는 큰 루프와 작은 루프의 변수가 동시에 사용되어야 합니다.
여기서 간단한 모델로 단순화했습니다.
이 모델은 기능이 복잡할 경우 매우 느려질 것입니다.
속도 문제를 해결하기 위해 다중 프로세스를 사용하는 방법을 묻고 싶습니다.
제 생각은 작은 루프에만 멀티 프로세스를 사용하는 것입니다.
큰 루프의 루프 본문에 멀티 프로세스 코드를 작성하세요.
하지만 계속 실패합니다.
하나님께 올바른 코드를 달라고 요청하세요.
감사합니다!
으아악
우선, 병렬 컴퓨팅에서는 각 병렬 연산의 서브루틴 간에 상호 인과 관계가 없어야 합니다.
작은 루프에서 res는 x, y, z 및 alist, blist, clist와 밀접한 인과관계를 갖고 있어 병렬 계산으로 분할하기가 어렵습니다.
질문자가 게시한 코드는 원본 코드는 아니지만 원본 코드의 큰 루프 사이에 인과관계가 있는지는 알 수 없습니다. 그러나 개략적인 코드로 판단하면
큰 루프를 N 스레드로 분할합니다. (프로세스가 필요하지 않음) 예, 각 스레드는 2000/N 번 계산해야 합니다.
예를 들어 8개의 스레드로 나누어 스레드 1은 i=0~249를 계산하고 스레드 2는 i=250~499를 계산하는 식으로 진행됩니다. . .
여기서 N의 크기는 CPU 코어 수에 따라 결정될 수 있습니다. N이 CPU 코어 수를 초과하면 별 의미가 없지만 효율성이 저하될 수 있습니다.
중간에 elif를 사용하셔야 합니다. 마지막 for의 들여쓰기에 문제가 있는 것 같습니다
빅 루프에서 여러 프로세스를 열 수 있습니다. 예를 들어, 빅 루프가 2000회이고 CPU 코어 수가 4라면 4개의 프로세스가 열리고 각 프로세스는 500개의 실행을 담당하게 됩니다
작은 루프가 끝난 후 하위 스레드를 열어 다음 작업을 수행할 수 있으며 큰 루프는 계속해서 앞으로 처리됩니다
으아아아하위 프로세스를 사용하여 작은 루프를 처리할 수 있지만 이 경우 두 개의 큰 루프가 필요합니다. 하나의 루프가 작은 루프를 처리하고, 이 루프가 처리된 후 큰 루프가 다음을 처리합니다
이렇게
으아악작은 루프에서 실행되는 함수에 시간이 많이 걸리는 경우 생산자-소비자 모델을 고려해 볼 수 있습니다
으아악질문자는 프로세스의 입력과 출력을 먼저 설계해야 합니까? 여러 프로세스가 병렬 컴퓨팅을 수행하는 경우 프로세스 간의 통신이 가장 중요하다고 알고 있는데, 이는 다중 계층 루프와 같은 MPI여야 합니다. 먼저 데이터의 일부를 분배하고 각 프로세스로 이동하여 각 프로세스가 계산을 수행한 후 데이터 통합 지점으로 돌아가서 결과를 병합하여 출력합니다.
또 중요한 점은 각 프로세스의 실행 시간을 추정하는 것입니다. 결국 프로세스 간 통신이 있으면 대기 시간도 효율성 감소로 이어집니다.
@daijianke는 귀하의 중첩이 병렬 컴퓨팅의 입력 규칙을 준수하지 않는다고 말했습니다. 이 예를 살펴보세요
http://blog.csdn.net/zouxy09/...
이전에 기사에 나온 예제를 테스트했는데 문제가 없습니다. 이 단계를 따르면 완료할 수 있습니다.