Spawning tasks for asynchronous work in OpenMP

83 Views Asked by At

I am new to openMP and I was wondering if someone can review my approach.

Problem: I have sequential arrival of data from a device which has data from many sensors. I think I can parallely process analytics on each data packet to increase resolution.

Solution I thought of is as follows - but it ends up in deadlocks

This is pseudocode - so please ignore the syntax

TOTAL_SENSORS = 1000

omp_lock_t sensor_locks[TOTAL_SENSORS]

#pragma omp parallel
#pragma omp for
    for(int i=0;i<TOTAL_SENSORS;i++)
    {
        omp_init_lock(&sensor_locks[i]);
    }

#pragma omp parallel
#pragma omp single 

while (! end_of_data){
    
    for sensor_data in packed_data.iterator()
    {
        if sensor_data.sensor_type = 'A'
        {
            #omp task firstprivate(sensor_data)
            {
                omp_set_lock(&sensor_locks[sensor_data.sensor_id]);
                compute_analytics_type_A(sensor_data)
                omp_unset_lock(&sensor_locks[sensor_data.sensor_id]);
            }

        }
        else
        {
            #omp task firstprivate(sensor_data)
            {
                omp_set_lock(&sensor_locks[sensor_data.sensor_id]);
                compute_analytics_type_B(sensor_data)
                omp_unset_lock(&sensor_locks[sensor_data.sensor_id]);
            }
        }


    }
}

When I try this - this leads to a deadlock.

Broadly, I am trying to parallize the computation of analytics as long as they are not being computed for the same sensor.

Can someone help with the idiomatic way of doing it ?

0

There are 0 best solutions below