Win64 2014.2.0.0上的Haskell OpenCL软件包崩溃了

时间:2014-08-11 21:39:32

标签: haskell opencl cabal haskell-platform

我刚刚从旧版本( 32位 2013.2.0.0)将我的Haskell平台升级到最新版本( 64位 2014.2.0.0)。我重新安装了我的项目需要通过cabal并构建主要的各种软件包。但是,这次OpenCL (1.0.3.4)软件包在第一次外部调用中崩溃(clGetPlatformIDs)。

  • 崩溃是一种访问冲突。

  • 我无法通过任何Windows调试工具获得堆栈跟踪。

  • 我在clGetPlatformIDs中的Visual Studio中设置了一个断点,它从不会命中,所以崩溃就在那之前。我没有OpenCL.dll的符号,但我认为它应该能够找到界面符号;它解决了断点。

  • KHR OpenCL.dll确实已加载。

  • 没有一个寄存器包含一个可用的地址,该地址落在我能看到的模块中。

  • 我可以进一步了解ghci。这些调用有效,但我的OpenCL实现并没有显示出来。

  • 32位平台工作正常。

这种气味就像一个链接问题。 (我没有干净地离开Haskell运行时。)我该如何修复或调试它?人们通常如何调试这样的绑定问题?

注1:重新安装各种包装后,我会看到警告:

  Util.hs:291:1: Warning:
      the 'stdcall' calling convention is unsupported on this platform,
      treating as ccall
      When checking declaration:
        foreign import stdcall unsafe "static windows.h GetCurrentProcessId" getCurrentProcessId
        :: IO WIN32.DWORD

我忽略了这些,因为它们对于正常运行的包大量出现。最小的测试表明它们仍然有效,而且我无法在网上找到有关此警告的重要信息。 Win32 API在Haskell中被大量使用,我不相信它在64位Haskell平台上完全被破坏了。而且,上述getCurrentProcessId工作正常。我假设ghc为x64选择正确的约定并忽略stdcall(我认为它不存在于Windows上)。

注2:我使用以下命令安装了OpenCL模块:

% cabal install OpenCL \
    --extra-include-dirs="C:\Program Files (x86)\Intel\OpenCL SDK\4.0\include" \
    --extra-lib-dirs="C:\Program Files (x86)\Intel\OpenCL SDK\4.0\lib\x64"

(为了便于阅读,此处插入了\ newlines;这是一行。)

0 个答案:

没有答案