Я пытаюсь выполнить этот код в затмении, но я не знаю, как использовать dgemm. Я знаю, что это часть BLAS, но я не понимаю, как использовать его в Windows. Если есть какие-либо другие библиотеки или алгоритмы, которые можно использовать для высокопроизводительных вычислений, можете ли вы мне это предложить? заранее большое спасибо
#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 %fs\n",
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 и Intel MKL, поддерживаются в Windows и имеют очень хорошую производительность.
http://software.intel.com/en-us/intel-mkl
Вы можете прочитать их документы для получения дополнительной информации о том, как установить и использовать.
Других решений пока нет …