go에서 mkl 사용하기

4298 단어 GomklBLAS
Go에서 mkl를 호출하려고 반복해서 시도하기 때문에 기록합니다.
환경은 macOS Mojave입니다.

TL;DR;

  • Step1: mkl 설치
  • Step2: /opt/intel/mkl/bin/pkgconfig/*.pc 파일 수정
  • Step3: 환경 변수 설정PKG_CONFIG_PATH
  • Step4: cgo 호출 코드 작성
  • Step5: go build
  • 세부 정보


    Step1: mkl 설치


    Intel 페이지에서 mkl 설치를 다운로드합니다.
    다운로드하려면 사용자 등록이 필요합니다.

    Step2: /opt/intel/mkl/bin/pkgconfig/*.pc 파일 수정


    내가 설치한 환경의 기본값이 잘못되었습니다.
    다음과 같이 수정합니다.
    
    diff /opt/intel/mkl/bin/pkgconfig/mkl-static-lp64-iomp.pc /opt/intel/mkl/bin/pkgconfig/mkl-static-lp64-iomp.pc.back
    14c14
    < prefix=/opt/intel/compilers_and_libraries_2019.4.233/mac/mkl
    ---
    > prefix=/opt/intel/compilers_and_libraries_2019.4.233/mac/mkl/bin/pkgconfig/mkl
    

    Step3: 환경 변수 PKG_CONFIG_PATH 설정


    cgo는 내부에서 실행하기 위해pkg-config 설정 파일의 존재를 알려줄 필요가 있습니다.
    저는 GoLand를 사용하기 때문에 아래와 같이 구축 설정을 했습니다.

    Step4: cgo 호출 코드


    cgo로 호출하세요.이번에는 블라스에 포함된 asum을 연습으로 호출했다.

    코드 예제

    
    package main
    
    import (
        // #cgo pkg-config: mkl-static-lp64-iomp
        // #include "mkl.h"
        "C"
        "fmt"
    )
    
    func main() {
        n := 10
        vec := make([]float32, n)
        for i := 0; i < n; i++ {
            vec[i] = float32(i) + 1.0
        }
    
        result := C.cblas_sasum((C.int)(n), (*C.float)(&vec[0]), 1)
        fmt.Printf("result=%v", result)
    }
    

    Step5: go build


    이미 구축하고 실행할 수 있을 거예요.

    감상


    나는 패키지-config 설정이 잘못된 곳에서 그것에 빠졌다.

    참고 문헌

  • https://software.intel.com/en-us/mkl-developer-reference-c-blas-routines
  • https://golang.org/cmd/cgo/
  • https://r9y9.github.io/blog/2014/03/22/cgo-tips/
  • 좋은 웹페이지 즐겨찾기