0

Mac OSX 10.6.6 および Xcode 3.2.6 を実行している 64 ビット Mac でIntel Math Kernel Library (MKL) を使用しようとしています。Mac の場合、インテル MKL は、完全なインテル Composer XE 2011 C++ コンパイラーをインストールすることによってのみ利用できます。私はそうしました、そして私はbashスクリプトを実行します

/Developer/opt/intel/composer_xe_2011_sp1.6.038/mkl/bin/intel64/mklvars_intel64.sh
/Developer/opt/intel/composer_xe_2011_sp1.6.038/link_install.sh

Composer XE および MKL の環境変数を設定します。コンパイラを使用して、Xcode で簡単なテスト プロジェクトをビルドできます。

ただし、ここで説明されているように Xcode でリンクできないため、MKL を使用できません。そのハイパーリンクで説明されている MKL フレームワーク フォルダーがありません。

/Library/Frameworks/Intel_MKL.framework/

(具体的には、私のシステムのどこにも Intel_MKL.framework という名前のフォルダーはありません。) このフォルダーが存在することを確認することは、Intel のいくつかの MKL リファレンス マニュアルに記載されていますが、存在しない場合の対処方法はどこにも記載されていません。存在しません!MKL が正しくインストールされていれば存在すると思われますが、私は (「Composer XE のインストールが成功しました」)、Intel_MKL.framework はありません。

それが重要な場合、私が得るエラーは

"_dsyevx", referenced from:
jEigenvalues(TNT::Array2D<double>&, TNT::Array1D<double>&)in main.o 
ld: symbol(s) not found
collect2: ld returned 1 exit status

私が理解していることは、適切にリンクされていないことと一致しています。

Intel フォーラムを含め、助けを得るためにかなりの時間と労力を費やしましたが、役に立ちませんでした。これは単純な問題だと思います (私は単なる素人です)。

助けてくれてありがとう。


編集:

Paul の提案で、インストーラーを再実行しましたが、変更はありません。唯一の mkl.h ファイルは次の場所にあります。

/Developer/opt/intel/composer_xe_2011_sp1.6.038/mkl/include 

Xcode以外のインストールディレクトリにある予想される同一のコピーと同様に

/opt/intel/composer_xe_2011_sp1.6.038/mkl/include

これがXcodeの「ヘッダー検索パス」の下にリストすることになっているかどうかはわかりませんが、ずっと前にリストしました。私も挙げました

/Developer/opt/intel/composer_xe_2011_sp1.6.038/mkl/lib 

「ライブラリ検索パス」として、この2011年のガイドを読むための最善の試みに基づいて、これらのリンカーフラグを追加しました:

-libmkl_intel_lp64.a 
-libmkl_core.a 
-libmkl_sequential.a 
-libmkl_intel_thread.a

何も変更されておらず、同じエラーが発生します。

ld returned 1 exit status

彼は動的リンクと静的リンクに問題があるのでしょうか? スタティック リンク (.dylib ではなく .a エンディング) を選択したのは、単純に思えたからですが、よくわかりません。動的に変更しても何も起こりませんでした。

ここでフィードバックを得る方法はありますか?このエラーに基づいて何を変更すればよいかわかりません。


EDIT2:

Xcode の「プロジェクト情報」(おそらく 100 のオプションの 1 つ) に「Intel Math Kernel Library を使用する」というオプションがありました。(これについてはどこで確認すればよいでしょうか?) これで構築が進んでいますが、実行可能ファイルを実行すると、次のようになります。

exit;
dyld: Library not loaded: libmkl_intel_lp64.dylib
  Referenced from: /Users/.../nameofexecutable
  Reason: image not found
Trace/BPT trap
logout

ライブラリ検索ディレクトリが正しいことを再確認しました。末尾が .a のスタティック ライブラリも切り替えてみましたが、エラーはまったく同じでした。(まだ .dylib エンディングがありました。)これは、私が動的に行き詰まっているということですか? なんで?変数も定義しました

DYLD_LIBRARY_PATH

することが

/Developer/opt/intel/composer_xe_2011_sp1.6.038/compiler/lib: /Developer/opt/intel/composer_xe_2011_sp1.6.038/mkl/lib

ここの古い指示で示唆されているように、何も変わっていません。

うわー、これは恐ろしく難しい。

4

2 に答える 2

1

重要な編集

この編集の下に書かれていることは、少なくとも「XCODEから」実行可能ファイルを実行すると機能します。組み込まれているディレクトリを見つけてダブルクリックすると、次のメッセージが表示されます。

Last login: Sun Nov 24 17:05:19 on ttys002
MacBook-Pro-de-totouser:~ totouser$ /Users/totouser/Library/Developer/Xcode/DerivedData/THECONSOLEAPPLICATION-hknajgycvjjcotdtkeeyxbzmtfty/Build/Products/Debug/THECONSOLEAPPLICATION ; exit;
dyld: Library not loaded: libmkl_sequential.dylib
  Referenced from: /Users/totouser/Library/Developer/Xcode/DerivedData/THECONSOLEAPPLICATION-hknajgycvjjcotdtkeeyxbzmtfty/Build/Products/Debug/THECONSOLEAPPLICATION
  Reason: image not found
Trace/BPT trap: 5
logout

【手続き完了】

私は本当にここで立ち往生しているので、誰かが助けることができれば、それは素晴らしいことです

/////////////////////////////////////////////// /////////////////////////////////////////////// ////////////////////////////

わかりました、私はあなたがやりたかったことをすることに成功しました:

XCode 5.0.2を使用しているMac OS 10.8.5 64ビットにm_ccompxe_2013_sp1.1.103をインストールしました。

最初に、プロジェクトの mkl インクルード ディレクトリを参照します。それを行う前に、それを行った後でも、C ++コードでこのようなものを書くことができなかったことを強調したいと思います

#include "mkl.h"

mkl.h ファイルへのフル パスを入力する必要がありましたが、理想的には次のように配置したいので、少し退屈でした。

#include <mkl>
#include <mkl_vsl.h>
#include <mkl_vsl_functions.h>

など。たとえば、Mac で「iostream」ファイルを見つけて、どこかにコピーし、コピーの名前を mkl に変更し、mkl.h の内容を入れました (これは「/opt/intel/composer_xe_2013_sp1.1.103/mkl にあります)」 /include" を mac に) 入れ、"/opt/intel/composer_xe_2013_sp1.1.103/mkl/include" に保存し、インクルードでディレクトリ "/opt/intel/composer_xe_2013_sp1.1.103/mkl/include" を参照しました。私のxcodeプロジェクトのディレクトリ。どうやってこれをしたのですか?

「ターゲット」、「ビルド設定」、「すべて」の順にダブルクリックし、「検索パス」メニューを検索しました。そこには

1)「ヘッダー検索パス」、デバッグ、リリースに、「/opt/intel/composer_xe_2013_sp1.1.103/mkl/include」と「/opt/intel/composer_xe_2013_sp1.1.103/mkl/include/intel64」を入れました

2) 「ライブラリ検索パス」で、デバッグとリリースを行いました。 intel/composer_xe_2013_sp1.1.103/mkl/lib"

次に、「DYLD_LIBRARY_PATH」環境変数(私のプロジェクトのみ)を編集して、「/opt/intel/composer_xe_2013_sp1.1.103/compiler/lib:/opt/intel/composer_xe_2013_sp1.1.103/compiler/lib/intel64:/opt」と等しくなるようにしました/intel/composer_xe_2013_sp1.1.103/mkl/lib". どうやってこれをしたのですか?上部バーの左側にある三角形と四角形のボタンのすぐ隣にあるプロジェクト アイコンの名前をクリックし、[スキームの編集] をクリックしてウィンドウを開き、[プロジェクトを実行] をクリックしました。そのウィンドウの左側の列にある「デバッグ」をクリックしてから、「引数」をクリックし、「環境変数」に入り、値を持つDYLD_LIBRARY_PATHと呼ばれる新しい変数を追加しました

/opt/intel/composer_xe_2013_sp1.1.103/compiler/lib:/opt/intel/composer_xe_2013_sp1.1.103/compiler/lib/intel64:/opt/intel/composer_xe_2013_sp1.1.103/mkl/lib

奇妙なことに、これは「プロジェクトのリリースを実行する」にも設定されています。これは私にとっては問題ありませんでしたが、それでもこれは奇妙だと思います。ともかく。

この後、使用しようとしているライブラリにリンクするようにコンパイラ (LLVM 5、これに関連するものは何も変更しませんでした) に指示するコマンドを追加する必要がありました。

このために、「ターゲット」をダブルクリックし、「ビルド設定」、「すべて」、「その他のリンカーフラグ」を検索して、デバッグとリリースで次のように入力しました。

-lmkl_順次 -lmkl_core -lmkl_intel_lp64 -lpthread -lmkl_intel_thread -liomp5

次に、main.cpp に次のように入力します。

#include <iostream>
// #include "/opt/intel/composer_xe_2013_sp1.1.103/mkl/include/mkl.h"
// #include "/opt/intel/composer_xe_2013_sp1.1.103/mkl/include/mkl_vsl.h"
// #include "/opt/intel/composer_xe_2013_sp1.1.103/mkl/include/mkl_vsl_functions.h"
#include <mkl>
#include <mkl_vsl.h>
#include <mkl_vsl_functions.h>

int main(int argc, const char * argv[])
{
    VSLStreamStatePtr stream;
    vslNewStream(&stream, VSL_BRNG_SFMT19937, 777);
    double * pUNIF = new double [ 1000000 ] ;
    vdRngUniform(VSL_RNG_METHOD_UNIFORM_STD_ACCURATE, stream, 1000000, pUNIF, 0.0, 1.0);
    vslDeleteStream(&stream);
    for (int i = 0 ; i < 100000 ; ++i )
    {
        std::cout << *(pUNIF+i) << std::endl;
    }
    std::cout << "END." << std::endl;
    getchar();
    return 0;
}

その後、ビルドして実行しましたが、すべて問題ありませんでした ;-)

親愛なるマルコム・タッカー卿が言うように、「決して簡単ではなく、決してf *****簡単ではありません。」

よろしく、

MEF。

于 2013-11-24T14:38:22.677 に答える
1

OS X 10.6.8 上の ICC 11.1 では、MKL フレームワークは次のとおりです。

/opt/intel/Compiler/11.1/058/Frameworks/mkl

これが新しいバージョン (ICC 12 ?) であると仮定すると、Intel が移動した場合は、関連するディレクトリを見つけるために少し掘り下げる必要があるかもしれません。

(リンク先のインテルの記事は 2009 年 6 月のもので、ICC 11.0 に関連していることに注意してください。)

于 2011-10-18T15:33:22.847 に答える