Load Balancing
The dynamic load-balancing (LB) capability allows the nanoFluidX code to redistribute the work load among the GPUs, which generally improves the overall performance.
Load balancing capability is relevant when dealing with irregular geometries in which large portions of empty space are among the components. Load balancing capability is less pronounced for highly-compact geometry, such as a fully filled box. With load balancing capability turned on you will typically observe a faster run time.
Load balancing capability was tested on a highly irregular test case (dam break) and has shown excellent scaling up to 100 GPUs.
Commands
loadbalancingParameters
{
    type                               DYNAMIC
    frequency                          100
    imbalance_tol                      1.1
}Definitions
| Command | Contents | SI Unit Example | 
|---|---|---|
| type | Type of load balancing. Options 
 Default = NOLB | |
| frequency | This parameter specifies the frequency at which the workload
                                    will be redistributed among the GPUs. The frequency is expressed
                                    in time steps, so a number of 100 sets the redistribution every
                                    100 time steps. This value can cause computational overhead if
                                    set to very low values. Keep the default value of 100 time
                                    steps, or at least that order of magnitude. Default = 100 | |
| imbalance_tol | This parameter specifies the workload tolerance discrepancy
                                    between the GPUs. The default value of 1.1 implies that the work
                                    load redistribution will be carried out among two GPUs only if
                                    the work load that they are handling differs by more than 10
                                        percent. Default = 1.1 |