問題タブ [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.

0 投票する
1 に答える
1482 参照

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 インターフェイスがありません。

0 投票する
1 に答える
4383 参照

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' のメンバーではありません

ここに画像の説明を入力

問題なく再構築します:

ここに画像の説明を入力

0 投票する
1 に答える
1352 参照

c++ - dbgheap.c がアクセス違反の例外をスローする

うまく機能する次のコードを開発しました。

大きな行列にLAPACKE DGGEV ルーチンを使用するために、上記の正しいコードを修正しました。修正したコードを以下に示します。

上記の変更されたコード (大きな行列の場合) では、ヒープからメモリを割り当てる必要があります。そうしないと、スタックがオーバーフローしてしまうからです。問題は、ヒープからメモリを割り当てると、ヒープにnew関連し、内部で発生する次の例外が発生することですdbgheap.c(Debug CRT Heap Functions):

ここに画像の説明を入力

この例外が発生する理由を知っている人はいますか? LAPACKE DLL が割り当てに別のヒープを使用しているという事実に関連している可能性があります...わかりません。


編集:

スタック トレースは次のとおりです。

ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力


編集:

最後に、すべての 2D 配列を 1D 配列に置き換えることで問題を解決しました。次のコードは、エラーなしで動作する修正されたコードです。このソリューションの詳細については、「Ilya Kobelevskiy」の回答を参照してください。

0 投票する
2 に答える
1411 参照

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 と同じ?)

これらの議論の本当の意味をどのように見つけることができますか? コードを機能させるにはどうすればよいですか?

0 投票する
1 に答える
296 参照

c - LAPACK_ROW_MAJOR で LAPACKE_zgetrs を使用すると、不正なメモリ アクセスが発生する

次のコードを使用して線形システムを解こうとしています。

何らかの理由で、これにより不正なメモリアクセスが発生しますLAPACKE_zgetrs「glibc が破損または二重解放を検出した」ためにvalgrind大きなプログラムがクラッシュすることによって検出されます)。簡潔にするために SSCCE にはこれを含めませんでしたが、返されるすべてのルーチンは 0 を返します。zgetrsLAPACKE

LAPACK_COL_MAJORrun と valgrindsを含む同じコードは問題なく実行されます。

私のlapacke、lapackなどは、Ubuntu 12.04用に自作しています。lapack CMake ファイルで次の設定を使用しました。

残り (最適化された blas/lapack および xblas) をオフにします。ビルド中にエラーは発生せず、すべてのテストが成功しました。

どこで台無しにしましたか?

編集: Fedora21とパッケージ化されたlapackeでこれを試しました。エラーを再現しませんでした。

編集2:(1 + 0I, 1 + 0I)メモリの失敗を再現しませんが、上記の入力に対して間違った解決策を生成します(する必要があります(1,0)

0 投票する
0 に答える
139 参照

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 でセグメンテーション違反を引き起こしているのではないかと強く疑っています。

ここで何が起こっているのか誰にも分かりますか?