Data Type
IntegerDefault Value
0Description
This parameter controls how FMS compute tasks are synchronized around the diagonal of the matrix during factoring. The following options are available:
- -1, SLAB matrices only.
Compute the terms in the immediate vicinity of the diagonal using a single process. - 0, Use event flags.
This option provides for tasks to "sleep" if necessary. - 1, Use spin locks.
If a task needs to wait for data, it goes into a polling loop. Because the operating system cannot distinguish between polling and useful work, the task continues to tie up the processor. On some systems this can produce a deadlock condition if the number of tasks (FMS or other jobs) exceeds the number of processors. For this reason, this option is not implemented on all systems.
When a matrix is factored, there is a lot of latitude in selecting the order in which the calculations are performed. Naturally the starting diagonal A(1,1) must be the first term computed and the final diagonal A(N,N) the last term computed. However, between these points, many options are available. As it turns out, the further you are away from the diagonal, the more choices you have. For example, the bottom left term A(N,1) can be computed right after A(1,1) or just before A(N,N).
FMS exploits this property by partitioning the matrix into off-diagonal areas which may be divided among the processors as independent tasks and diagonal areas where the tasks are coupled. This provides the best load balancing between the processors and minimizes the amount of synchronization which must be performed.
When computing close to the diagonal, the tasks are restricted to computing the diagonal terms in sequence. This requires them to communicate (signal) and perhaps wait for a brief period for a slower task to get caught up.
This parameter provides options on how this synchronization and communication are implemented. In general, the default value should be used.