1 | This is the GPU based ANUGA |
---|
2 | =========================== |
---|
3 | |
---|
4 | |
---|
5 | |
---|
6 | Documentation |
---|
7 | ------------- |
---|
8 | |
---|
9 | Documentation is under doc directory, and the html version generated by **Sphinx** under the directory *doc/sphinx/build/html/* |
---|
10 | |
---|
11 | |
---|
12 | |
---|
13 | |
---|
14 | |
---|
15 | Install Guide |
---|
16 | ------------- |
---|
17 | |
---|
18 | 1. Original [ANUGA](anuga.anu.edu.au) is required |
---|
19 | - For CUDA version, [PyCUDA](documen.tician.de/pycuda) is required |
---|
20 | - For OpenHMPP version, current implementation is based on the [CAPS OpenHMPP Compiler](www.caps-entreprise.com) |
---|
21 | * When compiling the code with **Makefile**, the NVIDIA device architecture and compute capability need to be specified |
---|
22 | * For example, GTX480 with 2.0 compute capability </br> |
---|
23 | ```HMPP_FLAGS13 = -e --nvcc-options -Xptxas=-v,-arch=sm_20 -c --force``` |
---|
24 | * For GTX680 with 3.0 compute capability </br> |
---|
25 | ```HMPP_FLAGS13 = -e --nvcc-options -Xptxas=-v,-arch=sm_30 -c --force``` |
---|
26 | * Also the path for **python**, **numpy**, and **ANUGA/utilities** packages need to be specified |
---|
27 | * Defining the macro **USING_MIRROR_DATA** in **hmpp_fun.h** </br> |
---|
28 | ```#define USING_MIRROR_DATA``` |
---|
29 | </br>will enable the advanced version, which uses OpenHMPP Mirrored Data technology so that data transmission costs can be effectively cut down, otherwise basic version is enabled. |
---|
30 | |
---|
31 | |
---|
32 | |
---|
33 | |
---|
34 | |
---|
35 | Environment Vars |
---|
36 | ---------------- |
---|
37 | |
---|
38 | Please add following vars to you **.bashrc** or **.bash_profile** file |
---|
39 | |
---|
40 | ``` |
---|
41 | export ANUGA_CUDA=/where_the_anuga-cuda/src |
---|
42 | |
---|
43 | export $PYTHONPATH=$PYTHONPATH:$ANUGA_CUDA |
---|
44 | ``` |
---|
45 | |
---|
46 | |
---|
47 | |
---|
48 | Basic Code Structure |
---|
49 | -------------------- |
---|
50 | |
---|
51 |  |
---|
52 | |
---|
53 | * **README** (What you are reading) |
---|
54 | * **docs/** Documentation directory |
---|
55 | * **codeStructure.pdf** The diagram above |
---|
56 | * **Evolve workflow.pdf** The overall workflow of the evolve procedure. This includes all the function dependency and function interfaces, which is helpful to understand the evolve procedure of ANUGA |
---|
57 | * **device_spe/** Some device specifications of our working station |
---|
58 | * **profiling/** Profiling results |
---|
59 | * **CUDA/** All the profiling results on CUDA implementation |
---|
60 | * **sphinx/** The [Sphinx](http://sphinx-doc.org/) generated documentation |
---|
61 | * **source/** The source files for Sphinx based documents |
---|
62 | * **build/** The generated documents |
---|
63 | * **html/** HTML version documentation |
---|
64 | * **src/** Source code directory |
---|
65 | * **anuga_cuda/** The CUDA implementation |
---|
66 | * **config.py** Detail configuration for the CUDA implementation, including the path for all the kernel functions, optimal CUDA thread block configuration, etc. |
---|
67 | * **gpu_domain_advanced.py** Python Class for CUDA implementation in advanced version |
---|
68 | * **gpu_domain_basic.py** Python Class for CUDA implementation in basic version |
---|
69 | * **anuga_HMPP/** The OpenHMPP implementation |
---|
70 | * **Makefile** The Makefile |
---|
71 | * **hmpp_dimain.py** Python Class for OpenHMPP implementation |
---|
72 | * **hmpp_python_glue.c** The Python/C API to set up communication between Python ANUGA and OpenHMPP. |
---|
73 | * **sw_domain.h** The C Struct type **domain** used in C implementation to access mesh information generated in Python ANUGA |
---|
74 | * **sw_domain_fun.h** Connect C Struct type **domain** to all mesh information |
---|
75 | * **hmpp_fun.h** All function declarations. |
---|
76 | * **evolve.c** The evolve procedure |
---|
77 | * **scripts/** Some useful bash script |
---|
78 | * **utilities/** Utilities for sorting mesh information, checking results, etc. |
---|
79 | * **test/** Testing cases |
---|
80 | * **CUDA/** Testing cases for CUDA implementation |
---|
81 | * **merimbula/** Merimbula testing case directory |
---|
82 | * **merimbula.py** Merimbula testing case |
---|
83 | * **OpenHMPP/** Testing cases for OpenHMPP implementation |
---|
84 | * **merimbula.py** Merimbula testing case |
---|
85 | |
---|
86 | |
---|
87 | Examples |
---|
88 | -------- |
---|
89 | |
---|
90 | Running Merimbula model with CUDA implementation. |
---|
91 | |
---|
92 | ```$ python merimbula.py -gpu``` |
---|
93 | |
---|
94 | With pair-testing. |
---|
95 | |
---|
96 | ```$ python merimbula.py -gpu -test``` |
---|
97 | |
---|
98 | With rearranged mesh information. |
---|
99 | |
---|
100 | ```$ python merimbula.py -gpu -rg``` |
---|
101 | |
---|
102 | |
---|
103 | |
---|
104 | Author |
---|
105 | ------ |
---|
106 | |
---|
107 | Mail to [Zhe Weng (John)](wengcsyz@gmail.com) |
---|