C++ & Intel MKL 混合程式設計
1. 軟體版本資訊
- Windows 10
- Visual Studio 2015 Professional
- Intel MKL
2. 軟體來源連結
Intel MKL下載連結:
方式 1:直接進入Intel Software官網,進行註冊後下載Intel Math Kernel Library(MKL) Package.
下載連結:https://software.intel.com/en-us/performance-libraries
方式 2:點選進入網盤分享連結。
下載連結:https://pan.baidu.com/s/16RZsLyJawUrRkYis3HuemA
密碼:9w7s
3. 程式程式碼
3.1 圖片形式
3.2 程式碼形式
程式碼主要源於Intel MKL Package - Examples.
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include "mkl.h"
#include "mkl_dss.h"
#include "mkl_types.h"
/*
** Define the array and rhs vectors
*/
#define NROWS 5
#define NCOLS 5
#define NNONZEROS 9
#define NRHS 1
static const MKL_INT nRows = NROWS;
static const MKL_INT nCols = NCOLS;
static const MKL_INT nNonZeros = NNONZEROS;
static const MKL_INT nRhs = NRHS;
static MKL_INT rowIndex[NROWS + 1] = { 1, 3, 5, 7, 9, 10 };
static MKL_INT columns[NNONZEROS] = { 1, 2, 1, 2, 3, 4, 3, 4, 5 };
static double values[NNONZEROS] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
static _DOUBLE_PRECISION_t rhs[NCOLS * 2];
static _DOUBLE_PRECISION_t solValues[NROWS] = { 0, 1, 2, 3, 4 };
MKL_INT
main()
{
MKL_INT i, j;
/* Allocate storage for the solver handle and the right-hand side. */
_MKL_DSS_HANDLE_t handle;
_INTEGER_t error;
_CHARACTER_t statIn[] = "determinant";
_CHARACTER_t *uplo = "initialize";
_DOUBLE_PRECISION_t statOut[5], eps = 1e-6;
MKL_INT opt = MKL_DSS_DEFAULTS, opt1;
MKL_INT sym = MKL_DSS_NON_SYMMETRIC;
MKL_INT type = MKL_DSS_INDEFINITE;
/* --------------------- */
/* Initialize the solver */
/* --------------------- */
error = dss_create(handle, opt);
if (error != MKL_DSS_SUCCESS)
goto printError;
/* ------------------------------------------- */
/* Define the non-zero structure of the matrix */
/* ------------------------------------------- */
error = dss_define_structure(handle, sym, rowIndex, nRows, nCols, columns, nNonZeros);
if (error != MKL_DSS_SUCCESS)
goto printError;
/* ------------------ */
/* Reorder the matrix */
/* ------------------ */
error = dss_reorder(handle, opt, 0);
if (error != MKL_DSS_SUCCESS)
goto printError;
/* ------------------ */
/* Factor the matrix */
/* ------------------ */
error = dss_factor_real(handle, type, values);
if (error != MKL_DSS_SUCCESS)
goto printError;
/* ------------------------ */
/* Get the solution vector for Ax=b and ATx=b and check correctness */
/* ------------------------ */
for (i = 0; i < 3; i++)
{
if (i == 0)
{
uplo = "non-transposed";
opt1 = MKL_DSS_DEFAULTS;
}
else if (i == 1)
{
uplo = "transposed";
opt1 = MKL_DSS_TRANSPOSE_SOLVE;
}
else
// Conjugate transposed == transposed for real matrices
if (i == 2)
{
uplo = "conjugate transposed";
opt1 = MKL_DSS_CONJUGATE_SOLVE;
}
printf("\nSolving %s system...\n", uplo);
// Compute rhs respectively to uplo to have solution solValue
mkl_dcsrgemv(uplo, &nRows, values, rowIndex, columns, solValues, rhs);
// Nullify solution on entry (for sure)
for (j = 0; j < nCols; j++)
solValues[j] = 0.0;
// Apply trans or non-trans option, solve system
opt |= opt1;
error = dss_solve_real(handle, opt, rhs, nRhs, solValues);
if (error != MKL_DSS_SUCCESS)
goto printError;
opt &= ~opt1;
// Check solution vector: should be {0,1,2,3,4}
for (j = 0; j < nCols; j++)
{
if ((solValues[j] > j + eps) || (solValues[j] < j - eps))
{
printf("Incorrect solution\n");
error = 1000 + i;
goto printError;
}
}
printf("Print solution array: ");
for (j = 0; j < nCols; j++)
printf(" %g", solValues[j]);
printf("\n");
}
/* -------------------------- */
/* Deallocate solver storage */
/* -------------------------- */
error = dss_delete(handle, opt);
if (error != MKL_DSS_SUCCESS)
goto printError;
/* ---------------------- */
/* Print solution vector */
/* ---------------------- */
printf("\nExample successfully PASSED!\n");
getchar();
exit(0);
printError:
printf("Solver returned error code %d\n", error);
exit(1);
}
3.3 編譯引數設定
因需採用C++語言呼叫Intel MKL包,所以需正確載入MKL的相關庫檔案和引用目錄等檔案。所需檔案目錄一覽如下:
所需檔案位置:
專案工程檔案路徑設定:
4. 結果顯示
5. 重要連結
- https://software.intel.com/sites/products/documentation/doclib/mkl_sa/11/mkl_lapack_examples/index.htm
- https://software.intel.com/en-us/mkl/documentation/code-samples
相關文章
- QML之C++混合程式設計C++程式設計
- C++:與C混合程式設計 CMake undefined reference toC++程式設計Undefined
- 【混合程式設計】C/C++呼叫Fortran的DLL程式設計C++
- XCode 中 Swift / Objective-C / C / C++ 混合程式設計XCodeSwiftObjectC++程式設計
- OC/Swift/C/C++混合使用的程式設計姿勢SwiftC++程式設計
- FFT原理及C++與MATLAB混合程式設計詳細介紹FFTC++Matlab程式設計
- Intel MKL 在VS中的配置與安裝筆記Intel筆記
- Groovy + Java 混合程式設計方案:GMavenJava程式設計Maven
- CUDA 8的混合精度程式設計程式設計
- C++核心程式設計C++程式設計
- C++程式設計實現C++程式設計
- C++ 提高程式設計C++程式設計
- C++提高程式設計C++程式設計
- 【IDL】 IDL與C#混合程式設計技術C#程式設計
- 物件導向程式設計C++物件程式設計C++
- C++高階程式設計pdfC++程式設計
- C++核心程式設計筆記C++程式設計筆記
- c++簡單程式設計-3C++程式設計
- C++提高程式設計-模板C++程式設計
- C++提高程式設計-STLC++程式設計
- Windows 程式設計簡介從C/C++到Windows程式設計Windows程式設計C++
- C++入門程式設計----C++運算子(8)C++程式設計
- 報錯Intel MKL FATAL ERROR: Cannot load libmkl_core.so.的一種解決方法IntelErrorIBM
- C++程式設計基礎(2)變數C++程式設計變數
- 現代c++與模板超程式設計C++程式設計
- C++程式設計基礎實驗1C++程式設計
- c++程式設計基礎實驗4C++程式設計
- Linux C++ 多執行緒程式設計LinuxC++執行緒程式設計
- UE4中C++程式設計(一)C++程式設計
- C++的函數語言程式設計C++函數程式設計
- c++ 程式通用多執行緒單例設計 c++ web 框架設計經驗談C++執行緒單例Web框架
- Anno 讓微服務、混合程式設計更簡單(Net love Java)微服務程式設計Java
- Linux C/C++程式設計中的多執行緒程式設計基本概念LinuxC++程式設計執行緒
- cad設計繪圖AutoCAD 2020僅Intel繪圖Intel
- python和C++ NOI程式設計題解1.1PythonC++程式設計
- P2 C++ 程式設計正規化C++程式設計
- C++模組2:物件導向程式設計C++物件程式設計
- C++物件導向程式設計_Part1C++物件程式設計