| name | code-translation |
| description | Translate OpenMP C/C++ parallel code to Python multiprocessing. Use when converting parallel for loops, critical sections, reductions, barriers, and shared/private variables between OpenMP and Python. |
Code Translation: OpenMP to Python
Parallel For to Pool.map
// OpenMP
#pragma omp parallel for reduction(+:total)
for (int i = 0; i < n; i++) { total += arr[i]; }
# Python
from multiprocessing import Pool
import numpy as np
chunks = np.array_split(arr, n_workers)
with Pool(n_workers) as pool:
total = sum(pool.map(np.sum, chunks))
Sections to Processes
// OpenMP
#pragma omp parallel sections
{ #pragma omp section
task_a(); #pragma omp section
task_b(); }
# Python
from multiprocessing import Process
p1, p2 = Process(target=task_a), Process(target=task_b)
p1.start(); p2.start(); p1.join(); p2.join()
Critical Section to Lock
// OpenMP: #pragma omp critical { counter++; }
# Python
from multiprocessing import Lock, Value
counter = Value('i', 0); lock = Lock()
with lock: counter.value += 1
Barrier
// OpenMP: #pragma omp barrier
# Python
from multiprocessing import Barrier
barrier = Barrier(n_workers); barrier.wait()
Private Variables
// OpenMP: #pragma omp parallel for private(temp)
# Python - automatic in processes
def worker(i):
temp = compute(i) # Private by default
return temp * 2
with Pool(4) as pool:
result = pool.map(worker, range(n))
Translation Reference
| OpenMP |
Python Multiprocessing |
#pragma omp parallel for |
Pool.map() |
#pragma omp sections |
Multiple Process |
#pragma omp critical |
Lock |
#pragma omp barrier |
Barrier |
reduction(+:var) |
Map + sum partials |
private(var) |
Automatic (process isolation) |
shared(var) |
Value, Array, Manager |
omp_get_thread_num() |
Pass worker ID as arg |