2014-02-20 2 views
0

필자는 출력을 파일에 저장하는 멀티 스레드 시뮬레이션을 코딩했습니다. 지금까지, 나는 하나의 파일을 처음부터 코어 (ofstream myfiles[NUMBER_OF_CORES])에 할당했지만, 20 개 이상의 코어를 가진 몇 대의 컴퓨터로 작업 할 때 좀 지저분하다. CORE_STREAM[NUMBER_OF_CORES] 배열로 시작하나의 파일에 여러 코어가 쓰여 있습니까?

for(int i =0; i < NUMBER_OF_CORES; i++){ 
    myfile << CORE_STREAM[i]; 
    } 

: 그 하나 개의 파일을 사용하는 경우 overheading 피하기 위해 해왔습니다,하지만 코어 당과 결국 스트림 같은 것을 사용할 수 있습니다, 같은 것을 사용? 나는 결코 이런 방식으로 시내를 조작하지 못했다. 존재하는 경우 어떤 클래스를 작성해야합니까?

답변

1

중간 결과를 메모리에 저장하려면 ostringstream을 사용할 수 있습니다. ofstream처럼 ostream 인터페이스를 구현하므로 기존 코드가 그대로 작동합니다.

하나의 스트림을 다른 스트림으로 덤프하려면 myfile << core_stream[i].rdbuf()을 사용하십시오. = 버퍼 읽기

1

ZMQ 파이프 라인을 사용 해본 적이 있습니까? 시뮬레이션 쓰레드는 ZMQ_PUSH 소켓 (zmq_socket(3) 참조)에 쓰고 파일에 쓰는 것은 무엇이든 (다른 쓰레드 또는 프로세스, ZMQ는 상관하지 않음) ZMQ_PULL 소켓에서 읽을 수 있습니다. 그렇게하면 시뮬레이션 스레드가 메모리에 결과를 스테이징하지 않고 차단 IO를 수행 할 수 있습니다. 요즘 ZMQ를 사용하지 않고 분산 컴퓨팅 프로젝트에서 일하는 것을 상상할 수 없습니다.

관련 문제