Реализация openmp argmin намного медленнее, чем numpy, как мне это исправить? - PullRequest
0 голосов
/ 16 апреля 2019

Итак, я пытаюсь реализовать аргумент numpy вдоль функции оси в openmp.Но когда я тестирую скорость своей реализации, я получаю действительно очень медленные скорости по сравнению с простой версией.У вас есть идея, почему?

Код, который я пытаюсь реализовать, таков:

res = np.array(np.argmin(distances, axis = 0))

distance - матрица тревожных расстояний.Итак, в реализации openmp я нашел индекс минимального значения каждой строки и сохранил его в res.К сожалению, я получаю очень медленные скорости.Это моя реализация openmp

#include <stdio.h>
#include <stdlib.h>
#include <omp.h>



int get_index(int x, int y, int width) { return x + (y * width); }

void execute(double *dist, int64_t *res)
{
  int n_points = 0;
  int n_k = 0;
  int i;

#pragma omp parallel
   {
    double minimum;
    int location = 0;

   #pragma omp for
    for (i = 0; i < n_points; i++)
    {
      int row_index = get_index(0, i, n_k);
      minimum = dist[row_index];
      location = 0;


      for (int j = 1; j < n_k; j++)
      {
    if (dist[row_index+j] < minimum)
    {
      minimum = dist[row_index+j];
      location = j;
    }
      }

      res[i] = location;

    }
    }
}

...