問題タブ [lapacke]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - CMake での FindBLAS と FindLAPACK の使用
の有用性に少し混乱しています
CMake 内の find_package(BLAS) および find_package(LAPACK)。
見つかったベンダーによって、必要なソースコードが異なるようです。たとえば、mkl には
mkl.h および/または mkl_lapacke.h
しかし、lapack の少なくとも 1 つの他の実装には、lapacke.h という名前のヘッダーがあります。
そのため、異なるヘッダーが必要です。
また、mkl の somatcopy は mkl_somatcopy ですが、他のライブラリには明らかに mkl_ プレフィックスがありません。
find_package( LAPACK) などのツールを効果的に機能させるために、これを一般的な方法でどのように調整しますか?
lapacke インターフェイスの lapacke.h ではないように見えるため、標準ヘッダーはありますか?
最後に、Accelerate がオプションとしてリストされていますが、Accelerate には LAPACK 3.2.1 と同等の機能が含まれており、MKL および現在の netlib lapacke 3.5 で利用可能なLAPACKE インターフェイスがありません。
c++ - 致命的なエラー C1083: インクルード ファイルを開けません: 'complex.h': そのようなファイルまたはディレクトリはありません ..\lapacke\include\lapacke.h
次のリンクに基づいて、Visual Studio 2008 用の LAPACKE の DLL とライブラリをビルドしました。
http://icl.cs.utk.edu/lapack-for-windows/lapack/
LAPACKE をビルドした後、以下のようにテストしたところ、テストに合格しました。
ビルド後、次のファイルを利用できます。
Visual Studio 2008 で次のヒントを使用しました。
現在、次の Visual Studio 2008 プロジェクトがあります。
私のプロジェクトには、次の C++ コードがあります。
行をコメントアウトする#include "lapacke.h"
と、実行可能ファイルがビルドされ、次のコンソール出力が得られます。
ただし、コメントアウトしない#include "lapacke.h"
と、次のエラーが発生します。
エラーの場所は、lapacke.h
以下に示す 73 行目です。
助けていただければ幸いです。
編集:
#include <cstdlib>
beforeを含めた後でも#include "lapacke.h"
、同じエラーが発生します。
編集:
次のリンクでは、何人かの人々が関連していると思われる問題について議論しています:
http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=2&t=2284
http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=2&t=4221
編集
このファイルでlapacke.h
は、次のステートメントを複合型に使用できます。
以下のようにヘッダファイルを修正しました。
ただし、次のエラーが表示されます。
上記のエラーは、次の場所で発生します。
このエラーを解決する方法がわかりません。
編集:
#include <complex>
最後に、以下に示すように追加して問題を解決しました。ちなみに、この投稿はそれを理解するのに役立ちました: MinGW エラー: 'min' は 'std' のメンバーではありません
問題なく再構築します:
c++ - dbgheap.c がアクセス違反の例外をスローする
うまく機能する次のコードを開発しました。
大きな行列にLAPACKE DGGEV ルーチンを使用するために、上記の正しいコードを修正しました。修正したコードを以下に示します。
上記の変更されたコード (大きな行列の場合) では、ヒープからメモリを割り当てる必要があります。そうしないと、スタックがオーバーフローしてしまうからです。問題は、ヒープからメモリを割り当てると、ヒープにnew
関連し、内部で発生する次の例外が発生することですdbgheap.c
(Debug CRT Heap Functions):
この例外が発生する理由を知っている人はいますか? LAPACKE DLL が割り当てに別のヒープを使用しているという事実に関連している可能性があります...わかりません。
編集:
スタック トレースは次のとおりです。
編集:
最後に、すべての 2D 配列を 1D 配列に置き換えることで問題を解決しました。次のコードは、エラーなしで動作する修正されたコードです。このソリューションの詳細については、「Ilya Kobelevskiy」の回答を参照してください。
c - LAPACKEで一次方程式を解く
線形方程式 (対称、三重対角、正) を解こうとしています。LAPACKEを使用する必要があります。私のコードは次のとおりです。
LAPACKE の関数は、エラーなしで何もしないようです。主な問題は、関数のパラメーターが何を表しているのかわからないことです。私は長い間検索しましたが、実際のドキュメントはありません。これが私が見つけた、または推測したものです:
- int matrix_order -- LAPACK_COL_MAJOR または LAPACK_ROW_MAJOR、行列はメモリ内でどのように表現されるか
- lapack_int n -- 行列のサイズ (つまり、列の数)
- lapack_int nrhs -- わかりません。ベクター b のサイズかもしれません
- double* d -- 方程式の行列
- double* e -- わかりません。
- double* b -- d からの方程式の解のベクトル
- lapack_int ldb -- b の先頭方向 (なぜ? nrhs と同じではなく、それ自体が n と同じ?)
これらの議論の本当の意味をどのように見つけることができますか? コードを機能させるにはどうすればよいですか?
c - LAPACK_ROW_MAJOR で LAPACKE_zgetrs を使用すると、不正なメモリ アクセスが発生する
次のコードを使用して線形システムを解こうとしています。
何らかの理由で、これにより不正なメモリアクセスが発生しますLAPACKE_zgetrs
(「glibc が破損または二重解放を検出した」ためにvalgrind
大きなプログラムがクラッシュすることによって検出されます)。簡潔にするために SSCCE にはこれを含めませんでしたが、返されるすべてのルーチンは 0 を返します。zgetrs
LAPACKE
LAPACK_COL_MAJOR
run と valgrindsを含む同じコードは問題なく実行されます。
私のlapacke、lapackなどは、Ubuntu 12.04用に自作しています。lapack CMake ファイルで次の設定を使用しました。
残り (最適化された blas/lapack および xblas) をオフにします。ビルド中にエラーは発生せず、すべてのテストが成功しました。
どこで台無しにしましたか?
編集: Fedora21とパッケージ化されたlapackeでこれを試しました。エラーを再現しませんでした。
編集2:(1 + 0I, 1 + 0I)
メモリの失敗を再現しませんが、上記の入力に対して間違った解決策を生成します(する必要があります(1,0)
)
c - MKL IPIV インデックス エラー
MEX によって実行される C ファイルを介して MKL Lapack を使用すると、LAPACKE_dgertrf によって生成された IPIV に無効なインデックスがあるという問題が発生します。LAPACKE_dgertrf のドキュメントには、IPIV の値は 1 と行列のサイズの間である必要があると記載されていますが、代わりに値の 1 つで 0 を取得しています。最初は、これは FORTRAN 用に作成されたドキュメントであり、0 は最初の行を参照しているだけだと思っていました。ただし、IPIV には行列のサイズに等しい要素も含まれていました。
これは、より小さなテスト ケースで再現できた大きなコードの問題です。
C コード (test_case.c):
コンパイルする mex コマンドは
MATLAB で MEX ファイルを実行しようとすると、
このことから、行ピボット テーブルが出力されたときに 0 と 3 の両方が含まれていることがわかりました。マトリックスは 3 x 3 であるため、これらの両方が有効なインデックスになることはありません。ドキュメントには、0 エントリがあってはならないことが記載されています。これが dgetrs でセグメンテーション違反を引き起こしているのではないかと強く疑っています。
ここで何が起こっているのか誰にも分かりますか?