MKL與VS2019配置方法


VS2019配置oneAPI並調用MKL庫

oneAPI

oneAPI是一個跨架構的編程工具,旨在簡化跨GPU、CPU、FPGA和AI加速器之間的編程,可以與英特爾自身設備,或其他廠商的芯片配合使用,以優化工作負載。支持多種語言,支持跨架構性能加速,以提高程序員的生產力。

其中的oneMKL(數學內核庫),是一個高度優化和廣泛並行化的例程庫,旨在提供跨各種CPU和加速器的最高性能。該庫具有用於大多數例程的C和Fortran接口,全面支持多種數學運算,包括:

  • 線性代數
  • 快速傅里葉變換
  • 向量
  • 直接和迭代的稀疏求解器
  • 隨機數生成器

下載

Intel oneAPI下載地址為Download the Intel® oneAPI Base Toolkit

安裝

默認路徑,Extract

下一步,下一步就OK

選擇自定義安裝,默認路徑為C:\Program Files (x86)\Intel\oneAPI

安裝選項中取消勾選了15G的Intel for Python

工具包會集成到VS中

install

安裝過程大概需要花費20分鍾

配置環境(VS2019)

(1)新建工程並創建main.cpp,解決方案配置為Debug x64;

(2)進入屬性頁面;在 配置屬性 — > VC++目錄 中分別需要配如圖三個路徑。(默認下載位置為C:\Program Files (x86)\Intel)

可執行文件目錄: C:\Program Files (x86)\Intel\oneAPI\mkl\2022.0.3\bin\intel64

包含目錄:C:\Program Files (x86)\Intel\oneAPI\mkl\2022.0.3\include

庫目錄:C:\Program Files (x86)\Intel\oneAPI\compiler\2022.0.3\windows\compiler\lib\intel64_win

C:\Program Files (x86)\Intel\oneAPI\mkl\2022.0.3\lib\intel64

設置好后點擊“應用

(3)在C:\Program Files (x86)\Intel\oneAPI\mkl\2022.0.3\documentation\en\common找到mkl_link_line_advisor.htm

網頁打開:

如在win64環境下,需要添加以下庫:

mkl_intel_ilp64.lib
mkl_intel_thread.lib
mkl_core.lib
libiomp5md.lib

(4)在鏈接器 — > 輸入 復制/粘貼;添加附加依賴項

測試代碼

#include<stdio.h>
#include<stdlib.h>

#include"mkl.h"
#include"mkl_lapacke.h"
#define n 4

void main() {

	int matrix_order = LAPACK_COL_MAJOR;
	char jobvl = 'N';
	char jobvr = 'V';
	double A[n * n] = {
		 0.35,  0.09, -0.44,  0.44,
		 0.09,  0.07, -0.33, 0.52,
		-0.44, -0.33, -0.03, -0.1,
		0.44,  0.52,  -0.1,  0.35 };//4*4矩陣
	int lda = n;
	double wr[n] = { 0 };
	double wi[n] = { 0 };
	double vl[n * n];
	int ldvl = n;
	double vr[n * n];
	int ldvr = n;
	int info = LAPACKE_dgeev(matrix_order, jobvl, jobvr, n, A, lda, wr, wi, vl, ldvl, vr, ldvr);
	//int info=0;

	if (info == 0) {
		int i = 0;
		int j = 0;
		int flag = 0;//區分復特征值的順序
		for (i = 0; i < n; i++) {
			printf("eigenvalue %d:", i);
			printf("%.6g + %.6gi\t", wr[i], wi[i]);
			printf("\n");
			printf("right eigenvector: ");
			if (wi[i] == 0)
			{
				for (j = 0; j < ldvr; j++) {
					printf("%.6g\t", vr[i * n + j]);
				}
			}
			else if (flag == 0)//如果該復特征值為這對復特征值的第一個則
			{
				flag = 1;
				for (j = 0; j < ldvr; j++)
				{
					printf("%.6g + %.6gi\t", vr[i * n + j], vr[(i + 1) * n + j]);
				}
			}
			else if (flag == 1)//如果該復特征值為這對復特征值的第二個則
			{
				flag = 0;
				for (j = 0; j < ldvr; j++)
				{
					printf("%.6g + %.6gi\t", vr[(i - 1) * n + j], -vr[i * n + j]);
				}
			}
			printf("\n");
		}
		getchar();//必須要有這句
		printf("SUCCESS\n");
	}

	system("pause");
}

輸出為

配置完成!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM