Browse Source

Add C version of testcase from issue 602

pull/2992/head
Martin Kroeker GitHub 5 years ago
parent
commit
e607d8de14
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 55 additions and 0 deletions
  1. +55
    -0
      cpp_thread_test/test_dgemm_omp.c

+ 55
- 0
cpp_thread_test/test_dgemm_omp.c View File

@@ -1 +1,56 @@
#include <stdlib.h>
#include <stdio.h>


#ifdef _OPENMP
int omp_get_num_procs();
int omp_get_max_threads();
void omp_set_num_threads(int);
#endif


#define bint int

void dgemm_(char *transa, char *transb, bint *m, bint *n, bint *k, double *alpha,
const double *a, bint *lda, const double *b, bint *ldb,
double *beta, double *c, bint *ldc);

void test(int id)
{
bint i = 0, m = 1000, n = 800, k = 600, N = m*k + k*n + m*n;
double alpha = 1.0, beta = 0.0;
double *A, *B, *C;

printf("%d\n", id);

A = (double*)malloc(N*sizeof(double));
B = A + m*k;
C = B + k*n;

for (i = 0; i < N; ++i)
A[i] = (double) rand() / RAND_MAX;

dgemm_("N", "N", &m, &n, &k, &alpha, A, &m, B, &k, &beta, C, &m);
dgemm_("T", "N", &m, &n, &k, &alpha, A, &k, B, &k, &beta, C, &m);
dgemm_("N", "T", &m, &n, &k, &alpha, A, &m, B, &n, &beta, C, &m);
dgemm_("T", "T", &m, &n, &k, &alpha, A, &k, B, &n, &beta, C, &m);

free(A);
}

int main()
{
int i = 0;

#ifdef _OPENMP
int num_procs = omp_get_num_procs();
if (num_procs < omp_get_max_threads() * 2)
omp_set_num_threads(num_procs < 4 ? 1 : num_procs/2);
#endif

#pragma omp parallel for
for (i = 0; i < 100; ++i)
test(i);

return 0;
}

Loading…
Cancel
Save