Community
cancel
Showing results for 
Search instead for 
Did you mean: 
anviko
Beginner
70 Views

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.
0 Kudos
0 Replies
Reply