Home Knowledge Base OpenMP Tasking

OpenMP Tasking is an OpenMP programming model extension that expresses irregular parallelism by creating explicit tasks with dependency annotations — complementing loop-based parallelism for recursive algorithms, unstructured graphs, and producer-consumer patterns.

Why OpenMP Tasks?

Basic Task Creation

#pragma omp parallel
#pragma omp single  // Only one thread creates tasks
{
    #pragma omp task
    { compute_A(); }     // Task A created
    
    #pragma omp task
    { compute_B(); }     // Task B created (may run in parallel with A)
    
    #pragma omp taskwait  // Wait for all tasks to complete
    compute_C();           // Sequential after A and B
}

Task Dependencies (OpenMP 4.0+)

#pragma omp task depend(out: data_a)
{ produce_A(data_a); }         // Task A writes data_a

#pragma omp task depend(in: data_a)
{ consume_A(data_a); }         // Task B reads data_a — waits for A

#pragma omp task depend(in: data_a) depend(out: data_b)
{ transform(data_a, data_b); } // Task C: depends on A, enables D

Recursive Tasks (Fibonacci Example)

int fib(int n) {
    if (n < 2) return n;
    int x, y;
    #pragma omp task shared(x)
    x = fib(n-1);
    #pragma omp task shared(y)
    y = fib(n-2);
    #pragma omp taskwait
    return x + y;
}

Task Scheduling and Overhead

Task Priorities

OpenMP tasking is the standard approach for irregular parallelism in shared-memory programs — enabling recursive decomposition, pipeline parallelism, and dependency-aware scheduling without the complexity of explicit thread management.

openmp taskomp tasktask dependency openmpomp dependopenmp tasking model

Explore 500+ Semiconductor & AI Topics

From EUV lithography to CUDA optimization — search the full knowledge base or chat with our AI assistant.