병렬화하려는 프로젝트에 mpi4py를 사용하고 있습니다. 다음은 내 프로그램에 대한 아주 기본적인 의사 코드는 다음과 같습니다sqlite (python)에 대한 MPI 잠금
Load list of data from sqlite database
Based on COMM.Rank and Comm.Size, select chunk of data to process
Process data...
use MPI.Gather to pass all of the results back to root
if root:
iterate through results and save to sqlite database
단순히 각 프로세스가 데이터베이스에 자신의 결과를 기록함으로써 MPI.Gather에 대한 호출을 제거하고 싶습니다. 따라서 의사 코드를 다음과 같이 나타내겠습니다.
Load list of data
Select chunk of data
Process data
Save results
이렇게하면 프로그램 성능이 크게 향상됩니다. 그러나, 나는 이것을 성취하는 방법을 완전히 모르고있다. Google을 통해 메소드를 찾으려고했지만 MPI-IO 만 찾을 수있었습니다. MPI-IO를 사용하여 데이터베이스에 쓸 수 있습니까? 특히 python, sqlite 및 mpi4py를 사용합니다. 그렇지 않다면 sqlite 데이터베이스에 동시에 쓰는 다른 방법이 있습니까?
편집 :
@CL 코멘트에서 지적, sqlite3를 데이터베이스에 대한 동시 쓰기를 지원하지 않습니다. 그럼 내 질문을 조금 다르게 해보 자. 데이터베이스 쓰기를 잠그고 쓰기 전에 잠금이 제거 될 때까지 다른 프로세스가 대기 할 수있는 방법이 있습니까? sqlite3 자체 잠금 모드를 알고 있지만 이러한 모드는 삽입 대신 블록 실패 할 것으로 보인다. 나는 파이썬 스레딩에서 이와 비슷한 것을 보았지만 MPI로 이것을 수행하는 것에 대해 온라인으로 아무것도 찾을 수 없었다.
[FAQ] (http://www.sqlite.org/faq.html#q5)를 참조하십시오. –
감사합니다.이 절에서는 여러 프로세스가 같은 시간에 데이터베이스에 쓸 수 없다는 것을 아주 명확하게 설명합니다. 그러나 MPI는 프로세스가 선착순으로 데이터베이스에 차례로 쓰는 효율적인 방법을 가지고 있습니까? 이렇게하면 내 프로그램에서 Gather를 사용할 필요가 없어지고 처리가 끝난 프로세스가 느린 프로세스를 기다리지 않고 데이터를 쓸 수있게됩니다. – Harrison