- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用Embarcadero C++ Builder 2010编写的程序使用Intel's MKL library中的某些函数。我遇到了一些奇怪的行为,其中调用MKL方法中的任何一个都会静默地终止应用程序。事实证明,调用任何方法时,库都在调用 TerminateProcess()
。我很难找到应用程序的确切终止位置,因为每次进入MKL方法并在CPU View 中逐条指令地跟踪指令时,都会在不同位置每次调用TerminateProcess
方法。
我的猜测是这是库捕获的错误情况。据我所知,是从MKL库中调用的,而不是从RTL的任何其他部分,外部错误例程或其他任何地方调用的。
是什么原因造成的?是否有人成功将MKL与C++ Builder程序一起使用?
病征
基于Two-dimensional FFT (C Interface)示例,我有以下代码:
DFTI_DESCRIPTOR_HANDLE hDesc;
MKL_LONG alDimensions[2];
alDimensions[0] = 32; // Array dimensions
alDimensions[1] = 100;
MKL_LONG lStatus = DftiCreateDescriptor(&hDesc, DFTI_SINGLE, DFTI_COMPLEX, 2, alDimensions);
DftiCreateDescriptor
时,该程序似乎没有被调试器捕获。因此,为了进行调查,我进入了该功能并逐步通过了程序集。它跳转到
MKL_RT.DftiCreateDescriptor_s_md
,然后我可以浏览十页或更多页的汇编。在某个时候,它将
call
一个原来是
TerminateProcess
的地址。但是,这样做的感觉是随机的。例如,在某一时刻,我将其范围缩小到一个调用语句和地址,只是在下次运行该程序之前使它崩溃。
编辑:自从我第一次提出这个问题以来,我在
ExitProcess
,
TerminateProcess
,
TerminateThread
等处放置了断点,并发现它正在调用
TerminateProcess
。 (本来我不知道为什么它会无声地终止。)它执行此操作的时间点仍然改变。没有有用的调用堆栈(这是测试程序,下面的源代码):
:7540d79a kernel32.TerminateProcess
:5be911c9 ; C:\projects\mkl crash\Debug\MKL_RT.DLL
:5be837bd ; C:\projects\mkl crash\Debug\MKL_RT.DLL
:004013C5 main(argc=1, argv=:008B9908)
:32ad2342 ; C:\Windows\SysWOW64\CC32100.DLL
fftwf_malloc
(有时不会),并且总是在调用
fftwf_plan_dft_2d
时发生。
mkl_rt.dll
。 implib -a mkl_rt.lib mkl_rt.dll
生成了一个新的.lib。尽管警告了数百个重复的符号,但它创建了一个看起来不错的库。 implib
命令implib -a -c mkl_rt.lib mkl_rt.dll
来保留方法名称的大小写。这导致更少的重复名称警告,但不会链接:[ILINK32 Error] Fatal: Exceeded memory limit for block Import symbols in module _vsrnggumbel
DftiCreateDescriptor_s_md
)。行为未发生变化。 cdecl
calling convention,这是默认情况下设置为使用的项目选项,然后进入方法的调用代码,我看到所有参数都被压入堆栈。每个函数似乎被正确调用。 stdcall
(即使应该找到cdecl
版本)也会导致相同的问题-但值得检查。 The DLL, mkl_rt.dll, supports mostly only the cdecl
versions. #include <stdio.h>
#pragma hdrstop
#include <tchar.h>
// Intel MLK
#include "mkl/include/mkl.h"
#pragma comment(lib, "mkl/mkl_rt.lib") // Generated with implib
int _tmain(int argc, _TCHAR* argv[]) {
DFTI_DESCRIPTOR_HANDLE hDesc;
MKL_LONG lStatus;
MKL_LONG alDimensions[2];
alDimensions[0] = 32;
alDimensions[1] = 100;
lStatus = DftiCreateDescriptor(&hDesc, DFTI_SINGLE, DFTI_COMPLEX, 2, alDimensions);
// Here, you would normal declare your arrays (32x100) of _Complex, and call DftiCommitDescriptor,
// DftiComputeForward, DftiFreeDescriptor - but it will have already terminated
// on the line above.
return 0;
}
c:\program files (x86)\embarcadero\rad studio\7.0\bin\bcc32.exe -D_DEBUG -D_RTLDLL;_NO_VCL -I"..." -y -Q -k -r- -c -tWC -C8 -oDebug\mkltest.obj -w-par -Od -v -vi- -H=Debug\MKLTest.pch -H mkltest.c
c:\program files (x86)\embarcadero\rad studio\7.0\bin\ilink32.exe -LDebug;"...";"..." -lDebug -v -G8 c0x32 Debug\mkltest.obj , Debug\MKLTest.exe , Debug\MKLTest.map , import32.lib cw32i.lib , ,
c:\program files (x86)\embarcadero\rad studio\7.0\bin\bcc32.exe -D_DEBUG -D_RTLDLL;_NO_VCL -I"C:\Program Files (x86)\EurekaLab\EurekaLog 6\Cbuilder14";C:\projects\Misc\DirectX\Direct3D\Tutorials\Tut05_Textures;"C:\Program Files (x86)\Embarcadero\RAD Studio\7.0\include\boost_1_39\boost\tr1\tr1";"c:\program files (x86)\embarcadero\rad studio\7.0\include";"c:\program files (x86)\embarcadero\rad studio\7.0\include\dinkumware";"c:\program files (x86)\embarcadero\rad studio\7.0\include\vcl";"C:\Program Files (x86)\Embarcadero\RAD Studio\7.0\include\boost_1_39";"c:\program files (x86)\embarcadero\rad studio\7.0\include";"c:\program files (x86)\embarcadero\rad studio\7.0\include\vcl";"c:\program files (x86)\embarcadero\rad studio\7.0\ObjRepos\Cpp";"c:\program files (x86)\embarcadero\rad studio\7.0\include\Indy10";"c:\program files (x86)\embarcadero\rad studio\7.0\Virtual Treeview\Common";"c:\program files (x86)\embarcadero\rad studio\7.0\Virtual Treeview\Source";"c:\program files (x86)\embarcadero\rad studio\7.0\Virtual Treeview\Delphi";"c:\program files (x86)\embarcadero\rad studio\7.0\include\boost_1_39";"c:\program files (x86)\embarcadero\rad studio\7.0\Toolbar2000\TB2K\Lib\D12";"c:\program files (x86)\embarcadero\rad studio\7.0\Toolbar2000\SpTBXLib\Source";"c:\program files (x86)\embarcadero\rad studio\7.0\AutomatedQADocking\Source";"C:\Program Files (x86)\TMS Advanced Poly List";"C:\Program Files (x86)\TMS Advanced Poly List\Builder2010";"C:\Program Files (x86)\EurekaLab\EurekaLog 6\CBuilder14";"c:\program files (x86)\embarcadero\rad studio\7.0\Abbrevia\source" -y -Q -k -r- -c -tWC -C8 -oDebug\mkltest.obj -w-par -Od -v -vi- -H=Debug\MKLTest.pch -H mkltest.c
c:\program files (x86)\embarcadero\rad studio\7.0\bin\ilink32.exe -LDebug;"c:\program files (x86)\embarcadero\rad studio\7.0\lib\debug";"C:\Program Files (x86)\EurekaLab\EurekaLog 6\Cbuilder14";C:\projects\Misc\DirectX\Direct3D\Tutorials\Tut05_Textures;"c:\program files (x86)\embarcadero\rad studio\7.0\lib";"c:\program files (x86)\embarcadero\rad studio\7.0\lib\obj";"c:\program files (x86)\embarcadero\rad studio\7.0\lib\psdk";"C:\Program Files (x86)\EurekaLab\EurekaLog 6\CBuilder14";"c:\program files (x86)\embarcadero\rad studio\7.0\lib";"c:\program files (x86)\embarcadero\rad studio\7.0\lib\psdk";"c:\program files (x86)\embarcadero\rad studio\7.0\lib\Indy10";"c:\program files (x86)\embarcadero\rad studio\7.0\Toolbar2000\TB2K\Lib\D12";"c:\program files (x86)\embarcadero\rad studio\7.0\AutomatedQADocking\Source";"C:\Program Files (x86)\TMS Advanced Poly List";"C:\Program Files (x86)\TMS Advanced Poly List\Builder2010";"C:\Program Files (x86)\EurekaLab\EurekaLog 6\CBuilder14";"C:\Users\Public\Documents\RAD Studio\7.0\DCP" -jDebug;"c:\program files (x86)\embarcadero\rad studio\7.0\lib\debug";"C:\Program Files (x86)\EurekaLab\EurekaLog 6\Cbuilder14";C:\projects\Misc\DirectX\Direct3D\Tutorials\Tut05_Textures;"c:\program files (x86)\embarcadero\rad studio\7.0\lib";"c:\program files (x86)\embarcadero\rad studio\7.0\lib\obj";"c:\program files (x86)\embarcadero\rad studio\7.0\lib\psdk";"C:\Program Files (x86)\EurekaLab\EurekaLog 6\CBuilder14";"c:\program files (x86)\embarcadero\rad studio\7.0\lib";"c:\program files (x86)\embarcadero\rad studio\7.0\lib\psdk";"c:\program files (x86)\embarcadero\rad studio\7.0\lib\Indy10";"c:\program files (x86)\embarcadero\rad studio\7.0\Toolbar2000\TB2K\Lib\D12";"c:\program files (x86)\embarcadero\rad studio\7.0\AutomatedQADocking\Source";"C:\Program Files (x86)\TMS Advanced Poly List";"C:\Program Files (x86)\TMS Advanced Poly List\Builder2010";"C:\Program Files (x86)\EurekaLab\EurekaLog 6\CBuilder14";"C:\Users\Public\Documents\RAD Studio\7.0\DCP" -lDebug -v -G8 c0x32 Debug\mkltest.obj , Debug\MKLTest.exe , Debug\MKLTest.map , import32.lib cw32i.lib , ,
最佳答案
我在使用mkl_rt.dll
和Borland
时遇到了完全相同的问题,而您猜到了DftiCreateDescriptor
。
我怀疑这与 mkl线程有关。
无论如何,我的解决方案是将 mkl 调用包装在32位Visual Studio
DLL 中。我会让自己知道Borland
可以运行。 Visual Studio
DLL 将静态链接 mkl ,但需要libiomp5md.dll
。我知道这行得通,因为我已经基本上在这样做了。
关于c++ - 英特尔MKL函数在内部调用TerminateProcess(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19728499/
dgesvd 似乎是一个具有 LAPACK_COL_MAJOR 布局的 LAPACKE_dgesvd,但查看 dgesvd 的示例和 LAPACKE_dgesvd dgesvd 示例中似乎有一个额外的
我尝试使用 g++ 用 intel mkl 11.1 进行编译: g++ -m32 test.c -lmkl_intel -lmkl_intel_thread -lmkl_core -liomp5 -
我有一个 cython 优化的速度程序,但速度仍然很慢。我想知道我的 cython 程序是否使用 OpenBLAS 还是 MKL(链接 openblas/mkl 库)?如何知道这一点? 最佳答案 这与
我正在尝试将 MKL 与 IPOPT 关联起来以提高性能。我已经通读了以下线程,它帮助我解决了很多问题。 Linking Ipopt with Intel MKL 但是,当我使用以下命令配置 Ipop
我正在努力尝试在 Windows 10 上生成 python 可执行文件。我已经尝试过 Cannot load mkl_intel_thread.dll on python executable 中提
我一直在尝试在 Windows 上使用 BLAS 获得一个快速运行的 numpy,到目前为止,唯一可行的方法是从 http://www.lfd.uci.edu/~gohlke/pythonlibs/#
我尝试设置一个文件来使用 PyCharm 编写 AI。 我正在使用的教程:https://www.youtube.com/watch?v=ujTCoH21GlA 当我运行代码时: $ import t
我有以下 Fortran 代码(在堆栈溢出的许多答案之上进行了修改......) Program blas integer, parameter :: dp = selected_real_k
操作系统:windows 10 64位 编译器:vc2015 64bits update 3 MXnet:1.3.1 构建mxnet 1.3.1(mxnet1.4.0有bug,windows下无法构建
我有一个非常大的矩形和方形 float 以及复杂的矩阵。我想知道是否有适当的 MKL 转置例程? MKL中有mkl_?imatcopy,请帮我举个例子。 我已经尝试过这个,但它没有转置矩阵 s
我正在运行 mkl_lab_solution.c这是使用 MKL 的示例,我可以正确编译它,但在运行时出现段错误。我的运行时如下: 操作系统是centos 6.3 gcc的版本是4.1.2 mkl 是
我有 win10、x64、i7-3770K 我从下载了 numpy-1.11.0+mkl-cp35-cp35m-win_amd64.whl http://www.lfd.uci.edu/~gohlke
MKL 的串行和并行版本在两个不同的库中实现。这些库的函数具有相同的名称。所以你不能直接加载两个库并分别调用每个函数,而不会在编译时发生冲突。 我想开发一个函数的包装器(例如 OpenGL Exten
我在一台新机器上工作,但找不到 MKL 库的路径。有没有办法知道它们是否安装以及安装在哪里?我尝试了 find -name,但我什么也没找到。也许它们根本没有安装。但是如何确定呢? 最佳答案 尝试使用
我正在尝试使用英特尔 MKL 库中的cblas_idamax函数来获取输入矩阵每列的最大值。在某些执行中我得到了正确的答案,但在其他执行中我得到了错误的索引。这是我的 C 代码示例: const MK
我正在尝试开发一个将矩阵 A 和 B 相乘的函数,它们是通用格式但本质上是稀疏的。这些矩阵包含复数。我的问题是,当我不使用该函数并将所有内容写入 main() 中时,乘法对于任何大小的数组都完美有效。
我尝试使用英特尔 MKL 提供的 cblas 将两个矩阵(例如 A 和 B)的乘积转换为 C。有什么原因会导致错误吗? double * A, *B, *C; A = (double *) callo
我必须使用 MKL 来求解线性方程组。该方程组用于求解二维泊松问题,因此正好有 5 条对角线不同于 0。方程组 Ax=b 的矩阵 A 是方阵,大小为 n*n。我检查了英特尔的文档,对调用顺序有点困惑。
我无法让英特尔 MKL 在 C 中正常工作。我有以下测试程序: #include "stdafx.h" #include"mkl.h" int main() { int one = 1;
有没有办法在 MKL 中计算矩阵的矩阵指数?我查看了引用手册,但只能找到用于查找 vector 元素指数的 v?Exp()。 (我基本上是在寻找 MATLAB expm() 等价物) 最佳答案 可以使
我是一名优秀的程序员,十分优秀!