|
5 | 5 | [TOC] |
6 | 6 |
|
7 | 7 | <table> |
8 | | -<tr><th>Dependencies</th><td>NVIDIA CUDA 9.0+</td></tr> |
| 8 | +<tr><th>Dependencies</th><td>None (CUDA optional for GPU acceleration)</td></tr> |
9 | 9 | <tr><th>Python Import</th><td>`from pyhelios import EnergyBalanceModel`</td></tr> |
10 | 10 | <tr><th>Main Class</th><td>\ref pyhelios.EnergyBalance.EnergyBalanceModel "EnergyBalanceModel"</td></tr> |
11 | 11 | </table> |
|
15 | 15 | <table> |
16 | 16 | <tr> |
17 | 17 | <th>Dependencies</th> |
18 | | - <td>NVIDIA CUDA 9.0+</td> |
| 18 | + <td>None required (OpenMP recommended for parallel CPU execution)</td> |
19 | 19 | </tr> |
20 | 20 | <tr> |
21 | 21 | <th>Platforms</th> |
22 | | - <td>Windows, Linux</td> |
| 22 | + <td>Windows, Linux, macOS</td> |
23 | 23 | </tr> |
24 | 24 | <tr> |
25 | 25 | <th>GPU</th> |
26 | | - <td>Required - NVIDIA CUDA-capable GPU</td> |
| 26 | + <td>Optional - NVIDIA CUDA-capable GPU for GPU acceleration</td> |
| 27 | + </tr> |
| 28 | + <tr> |
| 29 | + <th>Execution Modes</th> |
| 30 | + <td>Three-tier: GPU (CUDA) → OpenMP (parallel CPU) → Serial CPU fallback</td> |
27 | 31 | </tr> |
28 | 32 | </table> |
29 | 33 |
|
| 34 | +**Note:** As of helios-core v1.3.61, CUDA is **optional**. The plugin automatically selects the best available execution mode: GPU acceleration with CUDA if available, parallel CPU with OpenMP if available, or serial CPU as fallback. OpenMP is recommended for most workloads on systems without CUDA. |
| 35 | + |
30 | 36 | ## Quick Start |
31 | 37 |
|
32 | 38 | ```python |
@@ -68,37 +74,52 @@ with Context() as context: |
68 | 74 | <tr> |
69 | 75 | <td rowspan="2">**Runtime**<br>(pip install)</td> |
70 | 76 | <td>NVIDIA GPU</td> |
71 | | - <td>Not supported</td> |
72 | | - <td colspan="2">Required - CUDA-capable (compute capability 3.5+)</td> |
| 77 | + <td colspan="3">Optional - Enables GPU acceleration if available</td> |
73 | 78 | </tr> |
74 | 79 | <tr> |
75 | 80 | <td>CUDA Runtime</td> |
76 | | - <td>Not supported</td> |
77 | | - <td colspan="2">Version 9.0+<br>Typically installed with NVIDIA drivers<br>Or install <a href="https://developer.nvidia.com/cuda-downloads">CUDA Toolkit</a></td> |
| 81 | + <td colspan="3">Optional - Version 9.0+ for GPU acceleration<br>If not available, uses OpenMP CPU mode or serial fallback</td> |
| 82 | + </tr> |
| 83 | + <tr> |
| 84 | + <td>**Runtime**<br>(recommended)</td> |
| 85 | + <td>OpenMP</td> |
| 86 | + <td colspan="3">Recommended - Enables parallel CPU execution<br>Typically included with GCC/Clang compilers</td> |
78 | 87 | </tr> |
79 | 88 | <tr style="border-top: 3px double #888"> |
80 | | - <td>**Build from Source**<br>(additional deps)</td> |
| 89 | + <td>**Build from Source**<br>(optional)</td> |
81 | 90 | <td>CUDA Toolkit</td> |
82 | | - <td>Not supported</td> |
83 | | - <td colspan="2">Version 9.0+ with nvcc compiler<br><a href="https://developer.nvidia.com/cuda-downloads">Download CUDA Toolkit</a></td> |
| 91 | + <td colspan="3">Optional - Version 9.0+ with nvcc compiler for GPU support<br><a href="https://developer.nvidia.com/cuda-downloads">Download CUDA Toolkit</a></td> |
84 | 92 | </tr> |
85 | 93 | </table> |
86 | 94 |
|
87 | | -**For detailed CUDA installation instructions**, see the comprehensive \ref CUDASetup "CUDA Setup Guide", which covers: |
| 95 | +**Execution Mode Selection (v1.3.61+):** |
| 96 | +The plugin automatically selects the best available execution mode at runtime: |
| 97 | +1. **GPU mode (CUDA)** - Fastest, requires NVIDIA GPU and CUDA |
| 98 | +2. **Parallel CPU mode (OpenMP)** - Recommended for systems without GPU, uses multi-core parallelization |
| 99 | +3. **Serial CPU mode** - Fallback if neither GPU nor OpenMP available |
| 100 | + |
| 101 | +**For GPU acceleration setup**, see the comprehensive \ref CUDASetup "CUDA Setup Guide", which covers: |
88 | 102 | - Choosing the correct CUDA toolkit version: \ref ChoosingCUDA |
89 | 103 | - Platform-specific installation steps (Windows, Linux) |
90 | 104 | - GPU timeout settings for Windows: \ref PCGPUTimeout |
91 | | -- OptiX requirements: \ref OptiXSetup |
92 | 105 | - Troubleshooting common issues |
93 | 106 |
|
| 107 | +**Note:** CUDA is **no longer required** as of helios-core v1.3.61. The plugin works on all platforms with automatic CPU fallback. |
| 108 | + |
94 | 109 |
|
95 | 110 | ## Known Issues {#EBissues} |
96 | 111 |
|
97 | 112 | None. |
98 | 113 |
|
99 | 114 | ## Introduction {#EBIntro} |
100 | 115 |
|
101 | | - This model plugin calculates a local energy balance for every primitive, and ultimately predicts sensible, latent, and longwave fluxes as well as surface temperature. The energy balance equation is solved in parallel on the GPU to accelerate calculations. |
| 116 | + This model plugin calculates a local energy balance for every primitive, and ultimately predicts sensible, latent, and longwave fluxes as well as surface temperature. The energy balance equation is solved using one of three execution modes: |
| 117 | + |
| 118 | + 1. **GPU acceleration (CUDA)** - Parallel execution on NVIDIA GPU for maximum performance |
| 119 | + 2. **OpenMP parallel CPU** - Multi-core CPU parallelization (recommended for systems without GPU) |
| 120 | + 3. **Serial CPU** - Single-threaded fallback if neither GPU nor OpenMP available |
| 121 | + |
| 122 | + The execution mode is automatically selected based on available hardware and compiled libraries. GPU acceleration can be explicitly controlled using the GPU acceleration methods (see \ref EBGPUControl). |
102 | 123 |
|
103 | 124 | The model is solving the steady-state budget between absorbed radiation, emitted radiation, sensible heat exchange, and latent heat exchange, which is written as |
104 | 125 |
|
|
0 commit comments