Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.
Both sides previous revision Попередня ревізія Наступна ревізія | Попередня ревізія Наступна ревізія Both sides next revision | ||
geant4 [2016/04/03 01:28] wombat [G4MPI] ссылка на документацию |
geant4 [2016/04/03 10:57] wombat [G4MPI] CMakeLists.txt |
||
---|---|---|---|
Рядок 222: | Рядок 222: | ||
Idle> /run/beamOn 10 | Idle> /run/beamOn 10 | ||
+ | |||
+ | ===== Параллельные вычисления ===== | ||
+ | |||
+ | ==== G4MPI ==== | ||
+ | |||
+ | Согласно [[http://geant4.web.cern.ch/geant4/UserDocumentation/Doxygen/examples_doc/html/Examples_MPI.html | документации G4MPI]], программа на GEANT4, использующая технологии MPI может иметь примерно такую структуру: | ||
+ | |||
+ | <code c++> | ||
+ | #include "G4MPImanager.hh" | ||
+ | #include "G4MPIsession.hh" | ||
+ | |||
+ | int main(int argc,char** argv) | ||
+ | { | ||
+ | // Создание диспетчера G4MPImanager | ||
+ | G4MPImanager* g4MPI= new G4MPImanager(argc,argv); | ||
+ | | ||
+ | // Создание сессии MPI (G4MPIsession) вместо G4UIterminal | ||
+ | G4MPIsession* session= g4MPI-> GetMPIsession(); | ||
+ | | ||
+ | // Далее следует стандартный код программы на GEANT4 | ||
+ | G4RunManager* runManager= new G4RunManager(); | ||
+ | |||
+ | ... | ||
+ | |||
+ | // После установки всех параметров программы нужно запустить сессию MPI. | ||
+ | // MPIsession может работать как в интерактивном, так и в пакетном режиме. | ||
+ | session->SessionStart(); | ||
+ | |||
+ | // В конце выполнения программы | ||
+ | delete g4MPI; | ||
+ | delete runManager; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Компилировать такую программу нужно следующим образом (предполагается, что все пользовательские программы на GEANT4 находятся в каталоге ''/home/user/geant/'', а текущая программа - в подкаталоге ''MPItest''). | ||
+ | |||
+ | Сначала нужно указать в ''CMakeLists.txt'' для нашей программы пути к файлам MPI. Для этого нужно отредактировать или добавить такие строки: | ||
+ | |||
+ | <code txt "CMakeLists.txt"> | ||
+ | # Поиск пакета MPI в системе: | ||
+ | find_package(MPI REQUIRED) | ||
+ | |||
+ | # Установка флагов компилятора и компоновщика: | ||
+ | set(CMAKE_CXX_COMPILE_FLAGS ${CMAKE_CXX_COMPILE_FLAGS} ${MPI_COMPILE_FLAGS}) | ||
+ | set(CMAKE_CXX_LINK_FLAGS ${CMAKE_CXX_LINK_FLAGS} ${MPI_LINK_FLAGS}) | ||
+ | |||
+ | # Путь к заголовочным файлам: | ||
+ | include_directories(${MPI_INCLUDE_PATH} "/home/user/GEANT4/G4MPI/include/") | ||
+ | |||
+ | # Путь к библиотекам для компоновки окончательного исполнимого файла программы: | ||
+ | target_link_libraries(MPItest-program.bin ${MPI_LIBRARIES} ${G4mpi_DIR}/libG4mpi.so) | ||
+ | </code> | ||
+ | |||
+ | Затем собственно компиляция: | ||
+ | |||
+ | <code> | ||
+ | cd /home/user/geant/ | ||
+ | mkdir MPItest.build | ||
+ | cd MPItest.build | ||
+ | . /home/user/GEANT4/bin/geant4.sh | ||
+ | cmake -DGeant4_DIR=/home/user/GEANT4/lib/Geant4-10.2.1 -DG4mpi_DIR=/home/user/GEANT4/G4MPI/lib ../MPItest | ||
+ | make | ||
+ | </code> | ||
+ | |||
+ | Запускать полученную программу можно в стандартном окружении MPI. Например, | ||
+ | |||
+ | mpirun -n 4 ./MPItest-program.bin | ||