omp tasq inside a parallel block

omp tasq inside a parallel block

Is subject possible. I got the following error trying to compile it:

../../inspector/SecurityWrapper.cpp(229): (col. 17) remark: TASK CONSTRUCT WAS PARALLELIZED.

../../inspector/SecurityWrapper.cpp(221): (col. 13) remark: TASKQ CONSTRUCT WAS PARALLELIZED.

../../inspector/SecurityWrapper.cpp(218): (col. 1) remark: OpenMP DEFINED REGION WAS PARALLELIZED.

(0): internal error: backend signals

compilation aborted for ../../inspector/SecurityWrapper.cpp (code 4)

The code I tried to compile:

...

#pragma omp parallel shared(it)

{

#pragma intel omp taskq reduction(+:count) //shared(it)

{

#ifdef _OPENMP

printf( "
OMP is using %d thread(s)
", omp_get_num_threads());

#endif

for(it = _engines.begin(); it != _engines.end(); ++it)

{

#pragma intel omp task captureprivate(it)

{

uint nsize = 0;

char *ndata = 0;

///*

#ifdef _OPENMP

printf( "
%d thread running
", omp_get_thread_num());

#endif

//*/

InspectionEngine *engine = (InspectionEngine *)*it;

if(mask & engine->_mask || (engine->_mask == STRUCTURED_ENGINE_MASK && _enable_ccn_pattern))

{

engine->setRawSrc((char*)src,size);

ndata = (char*)_normalizer.getNormalized(engine->getType(), nsize);

if (SecurityWrapperLayer::_normalized_log)

SecurityWrapperLayer::_normalized_log->write((char*)ndata,nsize,getStreamId(),engine->getType());

count += engine->process(pid, ndata, nsize, eof);

}

}//omp task

}//for loop

}//tasq

#pragma omp single nowait

{

#ifdef _OPENMP

printf( "
%d thread checks DB config
", omp_get_thread_num());

#endif

checkDBConfig();

}//single

}//parallel

return count;

Whereas #pragma intel omp parrallel itself works well, any combination of omp pragmas and tasq inside a parallel block doesn't compile.

Any workaround? All I want is just to update DB configuration in parallel with tasq processing.

1 envío / 0 nuevos
Para obtener más información sobre las optimizaciones del compilador, consulte el aviso sobre la optimización.