Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

flex_cblas_sdot and flex_cblas_snrm2 #486

Open
wants to merge 4 commits into
base: feature/openblas
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions apps/utils/compute_groundtruth.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,10 @@
#else
#include <stdlib.h>
#endif

#include "filter_utils.h"
#include "utils.h"
#include "../../src/math_utils.cpp"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you include #include "math_utils.h"?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, it doesn't know the path.


// WORKS FOR UPTO 2 BILLION POINTS (as we use INT INSTEAD OF UNSIGNED)

Expand Down Expand Up @@ -75,8 +77,8 @@ void compute_l2sq(float *const points_l2sq, const float *const matrix, const int
assert(points_l2sq != NULL);
#pragma omp parallel for schedule(static, 65536)
for (int64_t d = 0; d < num_points; ++d)
points_l2sq[d] = cblas_sdot((int64_t)dim, matrix + (ptrdiff_t)d * (ptrdiff_t)dim, 1,
matrix + (ptrdiff_t)d * (ptrdiff_t)dim, 1);
points_l2sq[d] = math_utils::flex_cblas_sdot((int64_t)dim, matrix + (ptrdiff_t)d * (ptrdiff_t)dim, 1,
matrix + (ptrdiff_t)d * (ptrdiff_t)dim, 1);
}

void distsq_to_points(const size_t dim,
Expand Down
5 changes: 3 additions & 2 deletions apps/utils/compute_groundtruth_for_filters.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@

#include "filter_utils.h"
#include "utils.h"
#include "../../src/math_utils.cpp"

// WORKS FOR UPTO 2 BILLION POINTS (as we use INT INSTEAD OF UNSIGNED)

Expand Down Expand Up @@ -76,8 +77,8 @@ void compute_l2sq(float *const points_l2sq, const float *const matrix, const int
assert(points_l2sq != NULL);
#pragma omp parallel for schedule(static, 65536)
for (int64_t d = 0; d < num_points; ++d)
points_l2sq[d] = cblas_sdot((int64_t)dim, matrix + (ptrdiff_t)d * (ptrdiff_t)dim, 1,
matrix + (ptrdiff_t)d * (ptrdiff_t)dim, 1);
points_l2sq[d] = math_utils::flex_cblas_sdot((int64_t)dim, matrix + (ptrdiff_t)d * (ptrdiff_t)dim, 1,
matrix + (ptrdiff_t)d * (ptrdiff_t)dim, 1);
}

void distsq_to_points(const size_t dim,
Expand Down
33 changes: 31 additions & 2 deletions src/math_utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,42 @@
#include <limits>
#include <malloc.h>
#include <math_utils.h>
#include <mkl.h>
#include "logger.h"
#include "utils.h"

#ifdef USE_OPENBLAS
#include <cblas.h>
#else
#include <mkl.h>
#endif

namespace math_utils
{

#ifdef USE_OPENBLAS
using Flex_INT = int;
#else
using Flex_INT = MKL_INT;
#endif

float flex_cblas_sdot(const int64_t N, const float *X, const int incX, const float *Y, const int incY) noexcept

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can add these to math.h

{
#ifdef USE_OPENBLAS
return sdot(N, X, incX, Y, incY);
#else
return cblas_sdot(N, X, incX, Y, incY);
#endif
}

float flex_cblas_snrm2(const Flex_INT N, const float *X, const Flex_INT incX) noexcept
{
#ifdef USE_OPENBLAS
return snrm2(N, X, incX);
#else
return cblas_snrm2(N, X, incX);
#endif
}

float calc_distance(float *vec_1, float *vec_2, size_t dim)
{
float dist = 0;
Expand All @@ -29,7 +58,7 @@ void compute_vecs_l2sq(float *vecs_l2sq, float *data, const size_t num_points, c
#pragma omp parallel for schedule(static, 8192)
for (int64_t n_iter = 0; n_iter < (int64_t)num_points; n_iter++)
{
vecs_l2sq[n_iter] = cblas_snrm2((MKL_INT)dim, (data + (n_iter * dim)), 1);
vecs_l2sq[n_iter] = flex_cblas_snrm2((MKL_INT)dim, (data + (n_iter * dim)), 1);
vecs_l2sq[n_iter] *= vecs_l2sq[n_iter];
}
}
Expand Down