1

我正在尝试编写一个将在 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 上运行我的代码。

4

2 回答 2

2

这是 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 设备驱动程序。这些卡没有任何视频输出。因此它们不被视为图形设备驱动程序。

于 2013-01-19T04:16:46.697 回答
-1

也许库尝试使用一些环境变量来定位 SDK ,并且环境没有在 PostegreSQL 上下文中继承。

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

于 2013-01-06T15:54:31.497 回答