es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué este código OpenMP se bloquea usando Clang, pero no GCC o ICC?

El siguiente código se compila y se ejecuta correctamente con el compilador Intel 19.x y con GCC 10 (g++ -fopenmp -std=c++17).

Sin embargo, al compilarlo con Clang 12.x basado en Intel Compiler 2022, se produce un acceso no válido. ¿Mi código no es correcto para OpenMP o este es un problema de Clang o un problema de la bifurcación de Clang de Intel?

“`cpp
#include <iostream>
#include <tuple>
#include <vector>
#include <omp.h>

std::vector<><int,></int,><int>>> data;

void DoTask(int a, int b)
{
#pragma omp critical
{
std::cout << "Thread " << omp_get_thread_num() << ' ' << a << ',' << b << std::endl;
}
}

void test2()
{
#pragma omp parallel
{
#pragma omp single
{
for (auto iter = data.begin(); iter != data.end(); ++iter)
{
const auto &a = iter->first;
const auto &b = iter->second;
for (const auto &aa : b)
{
if (aa != a)
{
#pragma omp task
DoTask(a, aa);
}
}
}
}
}
}

int main()
{
std::vector<int> tmp({ 1,2,3,4,5,6,7,8,9 });
for (int i = 0; i < 10; i++)
{
data.push_back({ i,tmp });
}
std::cout << "Starting test using iter " << std::endl;
test2();
}
“`</omp.h>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Es posible que este sea un problema de Clang o un problema de una bifurcación de Clang de Intel. El código se compila y se ejecuta con éxito tanto con el Compilador Intel 19.x como con GCC 10, pero se bloquea con una violación de acceso cuando se compila con Clang 12.x basado en el Compilador Intel 2022. Esto sugiere que el problema puede estar relacionado con cómo Clang maneja las directivas de OpenMP en el código o cómo las maneja la bifurcación de Clang de Intel. Sin embargo, se necesitaría una investigación y depuración adicional para determinar la causa exacta de la falla.

Comments are closed.