1. 程式人生 > >mac和linux上安裝Intel MKL2018(Math Kernel Library)

mac和linux上安裝Intel MKL2018(Math Kernel Library)

Intel MKL是多種blas庫的一種。相比於open_blas,他的安裝過程複雜很多,但據說優化效果也更好。
Interl MKL安裝過程一波三折,分別嘗試了在mac和兩個ubuntu系統(虛擬機器16.04,真實機14.04)上的安裝,謹記如下:

Intel MKL的下載

第一個坑。和眾多網上教程所說的不一樣,intel官網似乎更改了下載流程。
1. 官網下載連結
2. 點選free download,填寫自己的資訊,學生使用者可以有教育免費資格:

3. submit提交後,他會發給你一個郵件

4. 點選download,進入下載頁面

5. 注意,如果他沒有出現這個,而是又回到了註冊頁面,那麼你需要先建立一個intel網站的賬戶並登陸(和剛才那個郵件不是一回事):


6. 如果intel沒有出現這個bug,那麼順利的下載相應版本的軟體即可。

安裝

mac下的安裝,2018版本並不需要你輸入序列號了:可能在下載的時候已經附加了license?不管怎麼說,安裝過程一路向下即可。mac下intel mkl的軟體會安裝在/opt/intel目錄下。

linux的安裝基本一樣,不管是介面安裝(install_GUI.sh)還是命令列安裝(install.sh)都問題不大,同樣安裝在/opt/intel下,但是兩個系統的子資料夾組織可能略有不同。

接下來可以參考一個部落格連結 來配置環境變數,不過不做好像也可以。

執行樣例檔案

官方的一個例子:

#define min(x,y) (((x) < (y)) ? (x) : (y))
#include <stdio.h> #include <stdlib.h> #include "mkl.h" int main() { double *A, *B, *C; int m, n, p, i, j; double alpha, beta; printf ("\n This example computes real matrix C=alpha*A*B+beta*C using \n" " Intel(R) MKL function dgemm, where A, B, and C are matrices and \n"
" alpha and beta are double precision scalars\n\n"); m = 2000, p = 200, n = 1000; printf (" Initializing data for matrix multiplication C=A*B for matrix \n" " A(%ix%i) and matrix B(%ix%i)\n\n", m, p, p, n); alpha = 1.0; beta = 0.0; printf (" Allocating memory for matrices aligned on 64-byte boundary for better \n" " performance \n\n"); A = (double *)mkl_malloc( m*p*sizeof( double ), 64 ); B = (double *)mkl_malloc( p*n*sizeof( double ), 64 ); C = (double *)mkl_malloc( m*n*sizeof( double ), 64 ); if (A == NULL || B == NULL || C == NULL) { printf( "\n ERROR: Can't allocate memory for matrices. Aborting... \n\n"); mkl_free(A); mkl_free(B); mkl_free(C); return 1; } printf (" Intializing matrix data \n\n"); for (i = 0; i < (m*p); i++) { A[i] = (double)(i+1); } for (i = 0; i < (p*n); i++) { B[i] = (double)(-i-1); } for (i = 0; i < (m*n); i++) { C[i] = 0.0; } printf (" Computing matrix product using Intel(R) MKL dgemm function via CBLAS interface \n\n"); cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, m, n, p, alpha, A, p, B, n, beta, C, n); printf ("\n Computations completed.\n\n"); printf (" Top left corner of matrix A: \n"); for (i=0; i<min(m,6); i++) { for (j=0; j<min(p,6); j++) { printf ("%12.0f", A[j+i*p]); } printf ("\n"); } printf ("\n Top left corner of matrix B: \n"); for (i=0; i<min(p,6); i++) { for (j=0; j<min(n,6); j++) { printf ("%12.0f", B[j+i*n]); } printf ("\n"); } printf ("\n Top left corner of matrix C: \n"); for (i=0; i<min(m,6); i++) { for (j=0; j<min(n,6); j++) { printf ("%12.5G", C[j+i*n]); } printf ("\n"); } printf ("\n Deallocating memory \n\n"); mkl_free(A); mkl_free(B); mkl_free(C); printf (" Example completed. \n\n"); return 0; }

在intel mkl的文件中,很貼心的附帶了一個C語言命令列的引數生成器
file:///opt/intel/documentation_2018/en/mkl/common/mkl_link_line_advisor.htm.

基於這個,我們來分別在linux和mac下面執行並採坑。

linux下執行樣例

MKLROOT是mkl的安裝子目錄,預設在/opt/intel/mkl,在該目錄下有include、lib等編譯需要用的檔案。可以通過export設定,這個不多說。
linux的命令如下,這是不採用併發的版本(sequential)除了-I/opt/intel/mkl/include是手動新增的(否則報找不到mkl.h檔案錯誤),其他都是引數生成網站給出的。這條語句我沒有踩到坑:

g++ -o mkl_first.o dgemm_example.c -I/opt/intel/mkl/include -L${MKLROOT}/lib/intel64 -Wl,--no-as-needed -lmkl_intel_ilp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl

除此之外,intel自動安裝類omp類來實現並行,語句如下:

g++ -o mkl_first.o dgemm_example.c -I/opt/intel/mkl/include -Wl,--start-group ${MKLROOT}/lib/intel64/libmkl_intel_ilp64.a ${MKLROOT}/lib/intel64/libmkl_intel_thread.a ${MKLROOT}/lib/intel64/libmkl_core.a -Wl,--end-group -liomp5 -lpthread -lm -ldl

這個執行的時候會出現-liomp5找不到的問題:

linux下面很好解決,這個lib在intel中包含了,把它做一個軟連線到/lib資料夾下面就能找到:

ln -s /opt/intel/compilers_and_libraries/linux/lib/intel64_lin/libiomp5.so /lib/libiomp5.so

mac下執行例項

mac的順序執行命令沒什麼區別:

clang dgemm_example.c -I/opt/intel/mkl/include ${MKLROOT}/lib/libmkl_intel_ilp64.a ${MKLROOT}/lib/libmkl_sequential.a ${MKLROOT}/lib/libmkl_core.a -lpthread -lm -ldl

omp併發的版本如下,同樣會報錯,但是mac有兩個問題。首先libiomp5.a的位置不同(小問題),其次mac尋找lib包並不通過/lib來尋找所需類庫(大問題)。

  1. mac的libiomp5.a檔案在另一個位置,我們手動加一條-L /opt/intel/compilers_and_libraries_2018.1.126/mac/compiler/lib/,如下:
clang -o mkl_first.o dgemm_example.c -I/opt/intel/mkl/include -L /opt/intel/compilers_and_libraries_2018.1.126/mac/compiler/lib/ -L${MKLROOT}/lib -Wl,-rpath,${MKLROOT}/lib -Wl,-rpath,/opt/intel/compilers_and_libraries_2017.4.xxx/mac/compiler/lib -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm -ldl  
  1. 此時可以編譯通過,但是執行還會報錯:
  2. intel似乎認為這是他們在mac上的一個bug,給出了一個解決方案,就是生成好檔案後,執行下面這條語句:
install_name_tool -change @rpath/libiomp5.dylib /opt/intel/compilers_and_libraries_2018.1.126/mac/compiler/lib/libiomp5.dylib ./mkl_first.o
  1. 執行成功。

結果展示

如果樣例程式碼執行結果如下,說明測試通過:

 XXXXXXX(省略)
 Computations completed.

 Top left corner of matrix A:
           1           2           3           4           5           6
         201         202         203         204         205         206
         401         402         403         404         405         406
         601         602         603         604         605         606
         801         802         803         804         805         806
        1001        1002        1003        1004        1005        1006

 Top left corner of matrix B:
          -1          -2          -3          -4          -5          -6
       -1001       -1002       -1003       -1004       -1005       -1006
       -2001       -2002       -2003       -2004       -2005       -2006
       -3001       -3002       -3003       -3004       -3005       -3006
       -4001       -4002       -4003       -4004       -4005       -4006
       -5001       -5002       -5003       -5004       -5005       -5006

 Top left corner of matrix C:
 -2.6666E+09 -2.6666E+09 -2.6667E+09 -2.6667E+09 -2.6667E+09 -2.6667E+09
 -6.6467E+09 -6.6467E+09 -6.6468E+09 -6.6468E+09 -6.6469E+09  -6.647E+09
 -1.0627E+10 -1.0627E+10 -1.0627E+10 -1.0627E+10 -1.0627E+10 -1.0627E+10
 -1.4607E+10 -1.4607E+10 -1.4607E+10 -1.4607E+10 -1.4607E+10 -1.4607E+10
 -1.8587E+10 -1.8587E+10 -1.8587E+10 -1.8587E+10 -1.8588E+10 -1.8588E+10
 -2.2567E+10 -2.2567E+10 -2.2567E+10 -2.2567E+10 -2.2568E+10 -2.2568E+10

 Deallocating memory

 Example completed.

總結

在兩個ubuntu上,一個執行成功,另一個可以編譯通過但總是報段錯誤Segmentation fault (core dumped),實在頭疼,希望同樣遇到這個問題並解決了的同儕多多指教。
其他例子也可以參考另一個部落格

相關推薦

maclinux安裝Intel MKL2018(Math Kernel Library)

Intel MKL是多種blas庫的一種。相比於open_blas,他的安裝過程複雜很多,但據說優化效果也更好。 Interl MKL安裝過程一波三折,分別嘗試了在mac和兩個ubuntu系統(虛擬機器16.04,真實機14.04)上的安裝,謹記如下:

linux錯誤】HTTPS無法開啟:curl: (35) Encountered end of file linux安裝composer

需求:在linux上安裝composer(該指令是tp5手冊上的)[[email protected] wx.xiyang66.top]# curl -sS https://getcompos

libimobiledevice在macLinux面的使用

目前公司想通過樹莓派linux系統和蘋果手機連接獲取一些手機資訊,所有研究了一下libimobiledevice,這裡寫一下具體的過程和遇到的問題以及解決方法。** 在Mac上面安裝libimobiledevice。 首先是安裝工具和相關外掛

WindowsLinux 安裝MySQL

  Windows 上安裝 MySQL https://www.mysql.com/downloads/   1、下載MySQL安裝包(官網下載連結): 選擇 DOWNLOADS ——> Community(社群版,免費) —&mdash

(一)在Linux安裝編譯OpenCV3.0.0

接口 mac os color 下載源 同時 beta c函數 install mkdir OpenCV的全稱是:Open Source Computer Vision Library。OpenCV是一個基於(開源)發行的跨平臺計算機視覺庫,可以運行在Linux、W

Redis之在Linux安裝簡單的使用

utils 自動 localhost .net collect 停止 方法 c module aof 標簽: redis 2017-07-30 16:13 246人閱讀 評論(0) 收藏 舉報 分類: redis 版權聲明:本文為博主原創

使用Qt installer framework制作安裝包(不知道是否適合MacLinux?)

star spl config文件 priority class error ctu imu lac 一、介紹 使用Qt庫開發的應用程序,一般有兩種發布方式:(1)靜態編譯發布。這種方式使得程序在編譯的時候會將Qt核心庫全部編譯到一個可執行文件中。其優勢是簡單單一

Linux安裝rzsz命令

創建 windows ln -s 文件傳輸協議 release usr cal 安裝過程 make 簡介 lrzsz 官網入口:http://freecode.com/projects/lrzsz/ lrzsz是一個unix通信套件提供的X,Y,和ZModem文件傳輸協議

windowslinuxmysql的安裝

my.cnf 手動 就是 安裝和配置 方法 更改 內容 community spa mysql基於多平臺,多版本的安裝 mysql.tar.gz 鏈接:https://pan.baidu.com/s/1lG9BNL1mG4qbjM8xLHtrjQ 密碼:s4t

Linux安裝虛擬環境django

安裝虛擬環境 使用Python進行專案開發時,由於不同的專案需要,可能會配置多個開發環境,不同開發環境之間的專案依賴包如果混合在一起,可能會引起意想不到的錯誤。 通過虛擬環境隔離不同開發環境,方便不同開發環境的共存。 1、安裝python虛擬環境 sudo apt-get inst

docker的maclinux安裝

下載地址:https://download.docker.com/mac/stable/Docker.dmg 下載地址:https://download.docker.com/mac/beta/Docker.dmg   以上為兩個不同的版本 下載安裝之後即可使用 下載安

ActiveMQ的簡單介紹Linux安裝

https://www.cnblogs.com/life-for-test/p/6541689.html 底層是nio https://www.cnblogs.com/minisun/p/6809827.html 一、什麼是JMS JMS即Java訊息服務(

linux安裝解除安裝open-vswitch

一. ovs 從原始碼編譯安裝: 安裝依賴項: # apt install make # apt install gcc # apt install build-essential # apt install libssl-dev # apt install l

Linux安裝Anaconda以及在Anaconda下安裝TensorFlowOpencv

參考部落格 首先下載Anaconda,https://www.anaconda.com/download/ 安裝anaconda bash 下載的安裝包.sh 在安裝過程中確定安裝的路徑以及配置環境,全部選擇y,否則需要自己配置環境 安裝完Anaconda後安裝Te

linux安裝mongodb擴充套件——mongomongodb

實現目的: 安裝PHP的MongoDB資料庫擴充套件,通過PHP程式連線MongoDB資料庫 具體操作: 一、安裝PHP的MongoDB資料庫擴充套件(在Web伺服器192.168.21.127上操作) 下載地址:http://pecl.php.net/get/mongo

linux安裝openvpn,一鍵安裝連線

一、一鍵安裝vpn [[email protected] mnt]# wget https://git.io/vpn -O openvpn-install.sh;bash openvpn-install.sh Welcome to this OpenVPN "road warrior"

rabbitMQ在linux安裝教程問題解決

語言環境安裝 一、編譯安裝方式 1.依賴環境的安裝-如果需要用編譯安裝erlang語言環境,需要安裝C++編譯。 yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-d

Ubuntu Linux 12.04 64位下Intel Math Kernel Library (MKL) 2013安裝以及使用

轉載請註明出處。 實驗環境: Ubuntu 12.04 LTS 64位 安裝軟體:  僅記錄2013版   新版本類似 常常在論文中看到Deep Learning方法實現是使用英特爾的MKL庫加速矩陣運算。跟著師兄的腳步,快快安裝起來~ *安裝與配置* 1. 註冊 在Intel官網上,註冊一個帳號。我使

linux安裝php7 memcache擴展 安裝服務端memcached

gre 加載 ins file wget phpize 一個 根據 虛擬 轉:https://www.cnblogs.com/hejun695/p/5369610.html 先說安裝服務端 memcached 1. 首先安裝Libevent事件觸發管理器。 wge

Linux安裝Nginx依賴環境庫、Nginx安裝,Nginx服務命令

安裝Nginx依賴環境和庫、Nginx安裝,Nginx服務命令   因為Nginx官方提供的是C原始碼,要自己進行編譯,所以需要自己擁有編譯所依賴的環境和庫才可正常編譯 安裝gcc yum -y install gcc automake autoconf libtool make 安裝g+