2017-02-06 2 views
0

멀티 코어 시스템을 사용하여 R 시뮬레이션을 실행 중입니다. 내가 모니터링하고있는 시뮬레이션 결과는 길이가 900 인 벡터입니다. 각 시뮬레이션이 끝나면이 파일을 (행별로) 텍스트 파일에 추가합니다 (write.table 사용). 내 시뮬레이션은 1 : 1000에서 실행됩니다. 랩톱 컴퓨터에서 작업하는 동안 작업 결과가 순차적이기 때문에 결과가 좋았습니다. 내가 클러스터 작업을하면 시뮬레이션이 나뉘며 누가 먼저 작성해야할지 모를 수도 있습니다. 내 주장에 대한 이유는 심지어 내 텍스트 파일의 첫 번째 열 (시뮬레이션 열을 저장하는 데 사용되는이 열)에 대한 불가능한 값조차 얻고 있기 때문입니다. 첨부 할 수있는 샘플 코드가 필요한 경우병렬 시뮬레이션 출력을위한 텍스트 파일 추가

+1

여기에 '관련 게시물'(http://stackoverflow.com/questions/22104858/is-it-a-good-idea-to-read-write-files-in-parallel)과 'foreach' 꾸러미. 아마도 [여기에 의견] (http://stackoverflow.com/questions/20425071/lock-file-when-writing-to-it-from-parallel-processes-in-r)이 관련되어 있습니다. 또한 [이 게시물] (http://stackoverflow.com/questions/27909677/parallel-simulations-writing-on-the-same-file), 두 번째는'줄리아 '입니다. – lmo

+0

감사합니다. 두 번째 제안에서 주어진 코멘트는 도움이됩니다. – belaya

답변

1

주문을 존중하는 병렬 스레드가있는 텍스트 파일에 쓸 방법이 없습니다. 각 쓰레드는 자신의 버퍼를 가지고 있으며, 쓸 때 적절한 표시가 없다. 왜냐하면 상호 통신이 없기 때문이다. 그래서 그들은 모두 동일한 파일을 동시에 시도 할 것입니다. 다른 스레드가을 쓰는 중일 경우에도 첫 번째 열에는 값을 얻을 수 없습니다.

해결책은 각 스레드에 대해 개별 파일에 쓰거나 값을 다중 스레드 적용 루프의 출력으로 리턴하는 것입니다. 그런 다음 결과를 순차적으로 결합하십시오.

관련 문제