在 Windows Eclipse 中使用 DGEMM BLAS



我正在尝试在 eclipse 中执行此代码,但我不知道如何使用 dgemm。我知道它是 BLAS 的一部分,但我不明白如何在窗口中使用它。如果还有其他可用于高性能计算的算法库,您可以向我推荐吗?提前非常感谢

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define DIM1 2000
#define DIM2 2000
#define DIM3 2000
#define DGEMM dgemm_
int main()
{
  int i, j, k;
  double *A;
  double *B;
  double *C;
  long dim1 = DIM1;
  long dim2 = DIM2;
  long dim3 = DIM3;
  char transa = 'N';
  char transb = 'N';
  double alpha = 1.0;
  double beta  = 0.0;
  clock_t tic, toc;
  double maxr;
  A = (double*)malloc(sizeof(double)*(dim1*dim2));
  B = (double*)malloc(sizeof(double)*(dim2*dim3));
  C = (double*)malloc(sizeof(double)*(dim1*dim3));
  srand(86456);
  maxr = (double)RAND_MAX;
  for (i = 0; i < dim1; i++)
    for (j = 0; j < dim2; j++)
      A[i + j*dim1] = rand()/maxr;
  for (i = 0; i < dim2; i++)
    for (j = 0; j < dim3; j++)
      B[i + j*dim2] = rand()/maxr;
  tic = clock();
  DGEMM(&transa,&transb,&dim1,&dim3,&dim2,&alpha,A,&dim1,B,&dim2,&beta,C,&dim1);
  toc = clock();
  printf("time for C(%d,%d) = A(%d,%d) B(%d,%d) is %fsn",
     dim1, dim3, dim1, dim2, dim2, dim3,((float)toc -(float)tic)/(float)CLOCKS_PER_SEC);
  free(A);
  free(B);
  free(C);
  return EXIT_SUCCESS;
}

要使用 BLAS 例程,您需要在代码中包含 BLAS 库。其中两个库,OpenBLAS 和英特尔 MKL 在 Windows 中都受支持,并且具有非常好的性能。

http://www.openblas.net/

http://software.intel.com/en-us/intel-mkl

您可以阅读他们的文档,了解有关如何安装和使用的更多信息。

相关内容

  • 没有找到相关文章

最新更新