Причина, по которой я предполагаю, что может произойти гонка данных:
Когда я распечатал 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]
Мобильная версия