Я изучаю OpenMP.Для этого я пытаюсь сделать существующий код параллельным.Но мне кажется, что при использовании OpenMP время хуже, чем когда-либо.
Мой внутренний цикл:
#pragma omp parallel for
for(unsigned long j = 0; j < c_numberOfElements; ++j)
{
//int th_id = omp_get_thread_num();
//printf("thread %d, j = %d\n", th_id, (int)j);
Point3D current;
#pragma omp critical
{
current = _points[j];
}
Point3D next = getNext(current);
if (!hasConstraint(next))
{
continue;
}
#pragma omp critical
{
_points[j] = next;
}
}
_points - это pointMap_t, определяемый как:
typedef boost::unordered_map<unsigned long, Point3D> pointMap_t;
Без OpenMP мое время работы составляет 44,904 с.С включенным OpenMP на компьютере с двумя ядрами это 64,224 с.Что я делаю не так?