Skip Navigation Links | |
Exit Print View | |
![]() |
Oracle Solaris Studio 12.3: C User's Guide Oracle Solaris Studio 12.3 Information Library |
1. Introduction to the C Compiler
2. C-Compiler Implementation-Specific Information
3.1 Overview of Parallelization
3.2.1 Handling OpenMP Runtime Warnings
3.2.3 Using restrict in Parallel Code
3.3 Data Dependence and Interference
3.3.1 Parallel Execution Model
3.3.2 Private Scalars and Private Arrays
3.7 Aliasing and Parallelization
3.7.1 Array and Pointer References
7. Converting Applications for a 64-Bit Environment
8. cscope: Interactively Examining a C Program
A. Compiler Options Grouped by Functionality
B. C Compiler Options Reference
C. Implementation-Defined ISO/IEC C99 Behavior
E. Implementation-Defined ISO/IEC C90 Behavior
H. Oracle Solaris Studio C: Differences Between K&R C and ISO C
Loop scheduling is the process of distributing iterations of a parallel loop to multiple threads. In order to maximize the speedup, the work should be distributed evenly among the threads while not imposing too much overhead. The compiler offers several types of scheduling for different situations.
For the best results, divide the work evenly among the different threads on the system when the work performed by different iterations of a loop is the same. This approach is known as static scheduling.
Example 3-13 Good Loop for Static Scheduling
for (i=1; i < 1000; i++) { sum += a[i]*b[i]; /* S1 */ }
Under static or chunk scheduling, each thread will get the same number of iterations. With four threads, each thread will get 250 iterations. Provided no interruptions occur and each thread progresses at the same rate, all the threads will complete at the same time.
Static scheduling usually will not achieve good load balance when the work performed by each iteration varies. In static scheduling, each thread grabs the same chunk of iterations. Each thread, except the master thread, upon completion of its chunk waits to participate in the next parallel loop execution. The master thread continues execution of the program. In self-scheduling, each thread grabs a different small chunk of iteration and after completion of its assigned chunk, tries to acquire more chunks from the same loop.
In guided self-scheduling (GSS), each thread gets successively smaller number of chunks. In cases where the size of each iteration varies, GSS can help balance the load.