⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_gemm.c

📁 该文件为c++的数学函数库!是一个非常有用的编程工具.它含有各种数学函数,为科学计算、工程应用等程序编写提供方便!
💻 C
📖 第 1 页 / 共 3 页
字号:
#include <gsl/gsl_test.h>#include <gsl/gsl_ieee_utils.h>#include <gsl/gsl_math.h>#include <gsl/gsl_cblas.h>#include "tests.h"voidtest_gemm (void) {const double flteps = 1e-4, dbleps = 1e-6;  {   int order = 101;   int transA = 111;   int transB = 111;   int M = 1;   int N = 2;   int K = 4;   float alpha = 1.0f;   float beta = 0.0f;   float A[] = { 0.199f, 0.237f, 0.456f, 0.377f };   int lda = 4;   float B[] = { 0.842f, -0.734f, 0.323f, -0.957f, -0.303f, -0.873f, -0.871f, -0.819f };   int ldb = 2;   float C[] = { 0.498f, -0.925f };   int ldc = 2;   float C_expected[] = { -0.222426f, -1.07973f };   cblas_sgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);   {     int i;     for (i = 0; i < 2; i++) {       gsl_test_rel(C[i], C_expected[i], flteps, "sgemm(case 1466)");     }   };  };  {   int order = 102;   int transA = 111;   int transB = 111;   int M = 1;   int N = 2;   int K = 4;   float alpha = 1.0f;   float beta = 0.0f;   float A[] = { -0.83f, 0.922f, -0.228f, -0.003f };   int lda = 1;   float B[] = { 0.072f, 0.345f, 0.944f, -0.39f, -0.577f, 0.656f, -0.693f, -0.453f };   int ldb = 4;   float C[] = { 0.583f, 0.522f };   int ldc = 1;   float C_expected[] = { 0.044268f, 1.24311f };   cblas_sgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);   {     int i;     for (i = 0; i < 2; i++) {       gsl_test_rel(C[i], C_expected[i], flteps, "sgemm(case 1467)");     }   };  };  {   int order = 101;   int transA = 111;   int transB = 112;   int M = 1;   int N = 2;   int K = 4;   float alpha = 0.1f;   float beta = 0.1f;   float A[] = { -0.838f, 0.622f, -0.494f, 0.304f };   int lda = 4;   float B[] = { 0.147f, 0.134f, 0.169f, 0.734f, -0.7f, 0.541f, -0.794f, -0.256f };   int ldb = 4;   float C[] = { -0.632f, -0.559f };   int ldc = 2;   float C_expected[] = { -0.0532188f, 0.0678514f };   cblas_sgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);   {     int i;     for (i = 0; i < 2; i++) {       gsl_test_rel(C[i], C_expected[i], flteps, "sgemm(case 1468)");     }   };  };  {   int order = 102;   int transA = 111;   int transB = 112;   int M = 1;   int N = 2;   int K = 4;   float alpha = 0.1f;   float beta = 0.1f;   float A[] = { -0.937f, 0.635f, 0.596f, -0.51f };   int lda = 1;   float B[] = { -0.688f, -0.265f, 0.049f, 0.133f, -0.918f, -0.147f, 0.977f, -0.21f };   int ldb = 2;   float C[] = { 0.844f, 0.999f };   int ldc = 1;   float C_expected[] = { 0.0474373f, 0.135125f };   cblas_sgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);   {     int i;     for (i = 0; i < 2; i++) {       gsl_test_rel(C[i], C_expected[i], flteps, "sgemm(case 1469)");     }   };  };  {   int order = 101;   int transA = 112;   int transB = 111;   int M = 1;   int N = 2;   int K = 4;   float alpha = -0.3f;   float beta = 0.1f;   float A[] = { -0.165f, 0.638f, 0.346f, -0.697f };   int lda = 1;   float B[] = { 0.499f, -0.73f, 0.262f, 0.759f, 0.664f, 0.997f, -0.702f, -0.839f };   int ldb = 2;   float C[] = { 0.17f, 0.425f };   int ldc = 2;   float C_expected[] = { -0.224158f, -0.417831f };   cblas_sgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);   {     int i;     for (i = 0; i < 2; i++) {       gsl_test_rel(C[i], C_expected[i], flteps, "sgemm(case 1470)");     }   };  };  {   int order = 102;   int transA = 112;   int transB = 111;   int M = 1;   int N = 2;   int K = 4;   float alpha = -0.3f;   float beta = 0.1f;   float A[] = { -0.603f, -0.714f, -0.893f, 0.046f };   int lda = 4;   float B[] = { 0.859f, -0.694f, -0.868f, -0.98f, -0.103f, 0.567f, -0.277f, -0.734f };   int ldb = 4;   float C[] = { 0.517f, -0.622f };   int ldc = 1;   float C_expected[] = { -0.160575f, -0.0234604f };   cblas_sgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);   {     int i;     for (i = 0; i < 2; i++) {       gsl_test_rel(C[i], C_expected[i], flteps, "sgemm(case 1471)");     }   };  };  {   int order = 101;   int transA = 112;   int transB = 112;   int M = 1;   int N = 2;   int K = 4;   float alpha = 0.1f;   float beta = 1.0f;   float A[] = { -0.087f, -0.047f, -0.051f, -0.615f };   int lda = 1;   float B[] = { -0.722f, -0.077f, 0.563f, 0.501f, 0.855f, 0.605f, 0.556f, -0.627f };   int ldb = 4;   float C[] = { -0.181f, -0.89f };   int ldc = 2;   float C_expected[] = { -0.208039f, -0.864557f };   cblas_sgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);   {     int i;     for (i = 0; i < 2; i++) {       gsl_test_rel(C[i], C_expected[i], flteps, "sgemm(case 1472)");     }   };  };  {   int order = 102;   int transA = 112;   int transB = 112;   int M = 1;   int N = 2;   int K = 4;   float alpha = 0.1f;   float beta = 1.0f;   float A[] = { -0.753f, -0.074f, -0.247f, -0.19f };   int lda = 4;   float B[] = { 0.061f, 0.743f, 0.22f, -0.682f, 0.733f, 0.417f, 0.772f, 0.665f };   int ldb = 2;   float C[] = { -0.253f, 0.972f };   int ldc = 1;   float C_expected[] = { -0.291994f, 0.898164f };   cblas_sgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);   {     int i;     for (i = 0; i < 2; i++) {       gsl_test_rel(C[i], C_expected[i], flteps, "sgemm(case 1473)");     }   };  };  {   int order = 101;   int transA = 111;   int transB = 111;   int M = 1;   int N = 2;   int K = 4;   double alpha = 0;   double beta = 0;   double A[] = { 0.017, 0.191, 0.863, -0.97 };   int lda = 4;   double B[] = { -0.207, -0.916, -0.278, 0.403, 0.885, 0.409, -0.772, -0.27 };   int ldb = 2;   double C[] = { -0.274, -0.858 };   int ldc = 2;   double C_expected[] = { 0.0, 0.0 };   cblas_dgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);   {     int i;     for (i = 0; i < 2; i++) {       gsl_test_rel(C[i], C_expected[i], dbleps, "dgemm(case 1474)");     }   };  };  {   int order = 102;   int transA = 111;   int transB = 111;   int M = 1;   int N = 2;   int K = 4;   double alpha = 0;   double beta = 0;   double A[] = { 0.571, 0.081, 0.109, 0.988 };   int lda = 1;   double B[] = { -0.048, -0.753, -0.8, -0.89, -0.535, -0.017, -0.018, -0.544 };   int ldb = 4;   double C[] = { -0.876, -0.792 };   int ldc = 1;   double C_expected[] = { 0.0, 0.0 };   cblas_dgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);   {     int i;     for (i = 0; i < 2; i++) {       gsl_test_rel(C[i], C_expected[i], dbleps, "dgemm(case 1475)");     }   };  };  {   int order = 101;   int transA = 111;   int transB = 112;   int M = 1;   int N = 2;   int K = 4;   double alpha = -0.3;   double beta = 1;   double A[] = { 0.939, 0.705, 0.977, 0.4 };   int lda = 4;   double B[] = { -0.089, -0.822, 0.937, 0.159, 0.789, -0.413, -0.172, 0.88 };   int ldb = 4;   double C[] = { -0.619, 0.063 };   int ldc = 2;   double C_expected[] = { -0.7137904, -0.1270986 };   cblas_dgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);   {     int i;     for (i = 0; i < 2; i++) {       gsl_test_rel(C[i], C_expected[i], dbleps, "dgemm(case 1476)");     }   };  };  {   int order = 102;   int transA = 111;   int transB = 112;   int M = 1;   int N = 2;   int K = 4;   double alpha = -0.3;   double beta = 1;   double A[] = { -0.795, 0.81, 0.388, 0.09 };   int lda = 1;   double B[] = { -0.847, 0.031, -0.938, 0.09, -0.286, -0.478, -0.981, 0.881 };   int ldb = 2;   double C[] = { -0.242, -0.02 };   int ldc = 1;   double C_expected[] = { -0.1562981, -0.0026243 };   cblas_dgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);   {     int i;     for (i = 0; i < 2; i++) {       gsl_test_rel(C[i], C_expected[i], dbleps, "dgemm(case 1477)");     }   };  };  {   int order = 101;   int transA = 112;   int transB = 111;   int M = 1;   int N = 2;   int K = 4;   double alpha = -1;   double beta = 0;   double A[] = { -0.556, 0.532, 0.746, 0.673 };   int lda = 1;   double B[] = { -0.525, 0.967, 0.687, -0.024, 0.527, 0.485, 0.109, -0.46 };   int ldb = 2;   double C[] = { -0.495, 0.859 };   int ldc = 2;   double C_expected[] = { -1.123883, 0.49819 };   cblas_dgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);   {     int i;     for (i = 0; i < 2; i++) {       gsl_test_rel(C[i], C_expected[i], dbleps, "dgemm(case 1478)");     }   };  };  {   int order = 102;   int transA = 112;   int transB = 111;   int M = 1;   int N = 2;   int K = 4;   double alpha = -1;   double beta = 0;   double A[] = { -0.358, 0.224, -0.941, 0.513 };   int lda = 4;   double B[] = { -0.201, -0.159, -0.586, -0.016, -0.324, 0.411, 0.115, -0.229 };   int ldb = 4;   double C[] = { 0.558, 0.596 };   int ldc = 1;   double C_expected[] = { -0.57956, 0.017636 };   cblas_dgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);   {     int i;     for (i = 0; i < 2; i++) {       gsl_test_rel(C[i], C_expected[i], dbleps, "dgemm(case 1479)");     }   };  };  {   int order = 101;   int transA = 112;   int transB = 112;   int M = 1;   int N = 2;   int K = 4;   double alpha = -0.3;   double beta = 1;   double A[] = { -0.586, 0.809, 0.709, -0.524 };   int lda = 1;   double B[] = { 0.768, 0.7, 0.619, -0.478, -0.129, -0.778, -0.432, 0.454 };   int ldb = 4;   double C[] = { 0.042, 0.252 };   int ldc = 2;   double C_expected[] = { -0.1996785, 0.5813976 };   cblas_dgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);   {     int i;     for (i = 0; i < 2; i++) {       gsl_test_rel(C[i], C_expected[i], dbleps, "dgemm(case 1480)");     }   };  };  {   int order = 102;   int transA = 112;   int transB = 112;   int M = 1;   int N = 2;   int K = 4;   double alpha = -0.3;   double beta = 1;   double A[] = { -0.164, 0.522, 0.948, -0.624 };   int lda = 4;   double B[] = { -0.142, 0.778, 0.359, 0.622, -0.637, -0.757, -0.282, -0.805 };   int ldb = 2;   double C[] = { -0.09, 0.183 };   int ldc = 1;   double C_expected[] = { -0.0248334, 0.1884672 };   cblas_dgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);   {     int i;     for (i = 0; i < 2; i++) {       gsl_test_rel(C[i], C_expected[i], dbleps, "dgemm(case 1481)");     }   };  };  {   int order = 101;   int transA = 111;   int transB = 111;   int M = 1;   int N = 2;   int K = 4;   float alpha[2] = {0.0f, 1.0f};   float beta[2] = {0.0f, 0.0f};   float A[] = { -0.082f, -0.281f, -0.096f, 0.913f, 0.974f, -0.706f, -0.773f, 0.522f };   int lda = 4;   float B[] = { 0.745f, -0.664f, 0.352f, -0.733f, 0.304f, -0.555f, -0.493f, -0.089f, 0.188f, 0.631f, 0.235f, 0.152f, -0.299f, -0.731f, -0.686f, -0.332f };   int ldb = 2;   float C[] = { -0.179f, -0.284f, -0.996f, -0.414f };   int ldc = 2;   float C_expected[] = { -1.06679f, 1.47116f, 0.599689f, 0.933532f };   cblas_cgemm(order, transA, transB, M, N, K, alpha, A, lda, B, ldb, beta, C, ldc);   {     int i;     for (i = 0; i < 2; i++) {       gsl_test_rel(C[2*i], C_expected[2*i], flteps, "cgemm(case 1482) real");       gsl_test_rel(C[2*i+1], C_expected[2*i+1], flteps, "cgemm(case 1482) imag");     };   };  };  {   int order = 102;   int transA = 111;   int transB = 111;   int M = 1;   int N = 2;   int K = 4;   float alpha[2] = {0.0f, 1.0f};   float beta[2] = {0.0f, 0.0f};   float A[] = { 0.044f, -0.33f, 0.279f, 0.712f, -0.363f, -0.788f, -0.768f, -0.551f };   int lda = 1;   float B[] = { 0.138f, 0.927f, -0.178f, -0.864f, 0.888f, 0.844f, -0.199f, 0.706f, -0.034f, 0.483f, 0.499f, 0.664f, 0.648f, 0.324f, 0.97f, 0.609f };   int ldb = 4;   float C[] = { -0.129f, 0.842f, 0.214f, -0.626f };

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -