부분적으로 공유 배열 나는 일부 내 프로세스가 소유 한 공유 배열을 변경하려면 :줄리아 @parallel
julia> addprocs(4)
4-element Array{Int64,1}:
2
3
4
5
julia> s = SharedArray(Int, (100,), pids=[2,3]);
julia>for i in procs() println(remotecall_fetch(localindexes, i, s)) end
1:0
1:50
51:100
1:0
1:0
이 작동을하지만 루프 병렬화 할 수 있도록하려면 :
을julia> @parallel for i=1:100 s[i] = i end
질문 :이 termina 않는 이유
julia> for i=1:100 s[i] = i end
이 세그먼트 폴트와 함께 종료 프로세스 4, 5 결과 예외를 던지거나 배열을 공유하는 프로세스 사이에서만 루프를 분할하는 대신 프로세스를 수행 할 것인가?
julia> @parallel for i in localindexes(s) s[i] = i end
각 프로세스가 로컬 인 배열의 일부를 업데이트하고, 배열이 공유되기 때문에, 변경이 :
나는이 대신 일을하지만, 전체 배열을 기입하지 않습니다 예상 하나의 프로세스가 모든 프로세스에서 볼 수 있어야합니다. 어레이의 일부가 여전히 변경되지 않은 이유는 무엇입니까?어떻게 배열의 일부를 소유하고 프로세스가 그것을 인식하지 못할 수 있습니다 @everywhere
와 @parallel
프로세스 2. 정의되지 s
하는 오류를 제공 교체?
너무 혼란 스럽습니다. 이 루프를 병렬 처리하는 가장 좋은 방법은 무엇입니까?
이 배열은 얼마나 큽니까 (이상적으로 100 개 요소 이상)? 'SharedArray' 객체는 정말 큰 데이터를 위해 설계되었습니다. 또한 최적의 성능을 위해서는 각 SharedArray 참여 프로세스가 배열 자체의 하위 집합에서만 작동해야합니다. 전체 배열을 업데이트 할 프로세서의 하위 집합 만 원한다면 먼저 마스터 프로세스가 작업하는 것보다 실제로 이것이 빠르다는 것을 확인해야합니다. 마스터 프로세스는 전체 배열을 볼 수 있으며 병렬 컴퓨팅 오버 헤드가 없기 때문에 업데이트를 병렬화하여 잠재적 인 속도 향상을 무력화 할 수 있습니다. –
새로운 (곧 제공 될) 병렬 프레임 워크의 추가 일반성을 필요로하는 사람이 필요할 수 있습니다. 지금은'@ spawnat'을 사용하여 구현체를 작성할 수 있지만 그다지 매끄러운 것은 아닙니다. –
어레이는 잠재적으로 예를 들어 클러스터에서 고해상도 CFD 시뮬레이션과 같이 많은 호스트에서 공유 할 수있을 정도로 커질 수 있지만, 지금 구문이 어떻게 작동 하는지를 배우려고하고 있습니다. –