【问题标题】:clGetPlatformIDs error -1001 when called in PostgreSQL UDF在 PostgreSQL UDF 中调用 clGetPlatformIDs 错误 -1001
【发布时间】:2013-01-06 09:40:49
【问题描述】:

我正在尝试编写一个将在 PostgreSQL 中执行的 OpenCL 函数。为此,我从我的 OpenCL 代码创建 DLL,并使用用户定义函数机制将其链接到 postgres。在调用 clGetPlatformIDs 之前一切顺利。函数返回错误 -1001,我读到这表明查找 OpenCL 驱动程序有问题。

我尝试将相同的代码(我必须删除一些 postgres 魔法)编译为 exe 并成功运行它 - 所有平台均已正确找到,因此我假设我已正确设置 SDK 和驱动程序。

我在 Windows 7 x64 上运行 PostgreSQL 9.1。我还在使用带有 Visual Studio 2010 的 Nvidia CUDA SDK 4.2 并在 GeForce GTS 450 上运行我的代码。

【问题讨论】:

    标签: postgresql opencl


    【解决方案1】:

    这是 MSFT 在 Windows、服务、GPU、安全和设备驱动程序方面的问题。

    您无法在 Windows 上将 PostgreSQL 作为服务运行并查看任何 GPU。您正在点击不允许从 Windows 服务访问任何“图形”设备的会话 O 隔离。您可以将 PostgreSQL 作为进程(而不是服务)启动,也可以将服务器放在 Linux 上。

    http://www.scribd.com/doc/58343489/Windows-Session-0-Isolation-Impact-on-GPU-as-Service

    在 Linux 上运行还有其他重要原因,因为如果在超时期限之前未访问屏幕,Windows 将需要重新启动您的 GPU。看 http://msdn.microsoft.com/en-us/library/windows/hardware/ff570088%28v=vs.85%29.aspx

    NVida 为 Windows 上的特定 Tesla 卡提供了非图形 GPU 设备驱动程序。这些卡没有任何视频输出。因此它们不被视为图形设备驱动程序。

    【讨论】:

    • 在 Linux 上运行解决了这个问题。同样根据这个:msdn.microsoft.com/en-us/library/bb756986.aspxWindows XP 和 Server 2003 缺少 Session 0 隔离,因此应该也可以在这些系统上运行 OpenCL UDF,尽管我没有尝试过。
    【解决方案2】:

    可能库尝试使用一些环境变量来定位 SDK,但环境并未在 PostegreSQL 上下文中继承。

    因此,请尝试从您的两个代码中转储环境,并检查您的独立程序中是否有任何 OpenCL/Cuda 变量可用,而您的 PostegreSQL UDF 中是否缺少任何变量。

    【讨论】:

    • 它与环境变量无关。这是 Session 0 隔离
    猜你喜欢
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 2014-08-29
    相关资源
    最近更新 更多