Потенциальной гонки данных OpenMP не происходитC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Потенциальной гонки данных OpenMP не происходит

Сообщение Anonymous »

Я делаю умножение матриц, используя массив 1d с Openmp. Я думаю, что в следующем коде может возникнуть гонка данных, когда я пытаюсь получить доступ к одному и тому же местоположению в разных потоках. Однако он работает нормально, и ответ правильный.
Причина, по которой я предполагаю, что может произойти гонка данных:
Когда я распечатал thread_id, i и j, я обнаружил, что разные потоки могут проходить через одни и те же i и j, что приводит к одновременному доступу к одному и тому же месту в матрице в разных потоках. Поэтому я думаю, что там может возникнуть гонка данных. П.С. Я уже пробовал использовать размер матрицы 1024, и ответ по-прежнему правильный.

Код: Выделить всё

#include 
#include "matmul.h"
#include 

void mmul(const float* A, const float* B, float* C, const std::size_t n){
#pragma omp parallel for collapse(2) schedule(static)
for (size_t i = 0; i < n; i++)
{
for (size_t k = 0; k < n; k++)
{
for (size_t j = 0; j < n; j++)
{
#pragma omp critical
{
int thread_id = omp_get_thread_num();
std::cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79082389/openmp-potential-data-race-not-happening[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»