• 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");
    }
    

    输出为

    配置完成!

  • 相关阅读:
    vue 组件公共的方法
    一文搞懂CAN总线协议
    【JAVA】:万字长篇带你了解JAVA并发编程-并发设计模式【五】
    0基础 三个月掌握C语言(11)
    awk的简单使用
    性能优化总结
    Flink部署之Yarn
    面试金典--面试题 16.18. 模式匹配 (前缀和+哈希表)
    Kafka系列之:Kafka Connect Configs
    CentOS 7 虚拟机安装
  • 原文地址:https://www.cnblogs.com/GeophysicsWorker/p/16172869.html