2014-07-15 4 views
2

나는, C/CUDA와 파이썬 일부 CFD-시뮬레이션 작업을하고있는 순간에 흐름은 다음과 같이 진행됩니다실시간 분석/HDF5

  1. 시작 순수한 C로 작성된 시뮬레이션/cuda
  2. 이진 파일에 출력을 출력하십시오.
  3. 파이썬 즉 numpy.fromfile을 사용하여 파일을 다시 열고 분석하십시오.

나는 많은 데이터와 메타 데이터를 가지고 있으므로, 은 hdf5 파일 형식으로 전환하는 것이 더 좋을 것입니다. 그래서 내 아이디어는 다음과 같습니다.

  1. pytables를 사용하여 시뮬레이션을위한 초기 조건 데이터를 만듭니다.
  2. 표준 hdf5 라이브러리를 사용하여 c의 데이터 세트를 다시 열고 쓸 수 있습니다.
  3. 분석을 위해 pytables를 사용하여 파일을 다시여십시오.

정말 데이터, 즉 C-을 programm에서 쓰기 HDF5하고 직접 파이썬 사용 pytables 읽기의 생생한 약간의 분석을하고 싶습니다. 이것은 꽤 유용 할 것이지만, 실제로는이 것이 pytables에 의해 얼마나 많이 지원되고 있는지 알지 못합니다. .

필자는 pytables 또는 hdf5로 작업 한 적이 없기 때문에 좋은 접근 방법이거나 어쩌면 함정이 있다면 을 알아두면 좋을 것입니다.

답변

3

나는 그것이 합리적인 접근이라고 생각하지만 실제로 함정이있다. HDF5 C 라이브러리는 스레드로부터 안전하지 않습니다 ("병렬"버전이 있습니다. 다시 말해, 다른 프로세스가 (동일한 데이터 세트 일 필요는 없지만) 읽는 동안 파일에 데이터를 쓰는 한 프로세스는 파일 손상을 초래합니다.

  1. 것은 어떤 프로세스가 파일에 기록되는 동안 읽기되지 않습니다, 또는 위임하여 파일에
  2. 직렬화 액세스 /가 읽거나 쓸 것을 확인하고, 파일 잠금을 구현 : 당신이 중 하나를 수행해야합니다, 그것이 작동되도록하려면 고유 프로세스. 그런 다음 일부 IPC 기술 (Unix 도메인 소켓, ...)을 통해이 프로세스와 통신해야합니다. 물론 데이터가 앞뒤로 복사되기 때문에 성능에 영향을 미칠 수 있습니다.

최근에 HDF 그룹은 동시 읽기/쓰기 액세스를 가능하게하는 MPI 기반 병렬 버전의 HDF5를 게시했습니다. Cf. http://www.hdfgroup.org/HDF5/PHDF5/. 귀하와 같은 유스 케이스를 위해 제작되었습니다.

제 생각에 pytables는 병렬 HDF5에 바인딩을 제공하지 않습니다. 대신 h5py을 사용해야하며, 이는 사용자에게 친숙한 병렬 HDF5 바인딩을 제공합니다. 이 웹 사이트의 예제를 참조하십시오 : http://docs.h5py.org/en/2.3/mpi.html

불행히도 병렬 HDF5는 현재까지 단점이 있습니다. 현재까지는 압축 된 데이터 세트 작성을 지원하지 않습니다 (읽기 가능). Cf. http://www.hdfgroup.org/hdf5-quest.html#p5comp