【问题标题】:Can you begin programming OpenCL without downloading an SDK?您可以在不下载 SDK 的情况下开始编程 OpenCL 吗?
【发布时间】:2011-06-09 09:47:34
【问题描述】:

我正在尝试获得一个可以在 ATI 和 NVidia 上运行的程序,因此,我想避免使用任何一个 SDK。是否可以在没有 SDK 的情况下仅使用 VS2010 和 Windows(XP 或 7)来执行此操作?

如果是这样,我该如何配置 VS2010 链接器以使其正常工作?

【问题讨论】:

    标签: c++ opencl


    【解决方案1】:

    严格来说,不需要 SDK。事实上,不需要任何 SDK,因为 NVIDIA 和 AMD/ATI SDK 都将代码绑定到它们的环境,并且通过扩展绑定到它们的硬件。你需要的是:

    1) 将运行 OpenCL 代码的 GPU。看到这个问题:List of OpenCl Compliant CPU/GPU

    2) OpenCL 库(Linux 上的 libOpenCL.so);这通常包含并安装在图形驱动程序中,可以从 AMD 或 NVIDIA 下载。

    3) OpenCL 头文件。这些可以从Khronos.org 获得,但包含在我所知道的所有 OpenCL SDK 中。在 Linux 系统上,这些通常位于目录 /usr/include/CL

    NVIDIA 和 AMD SDK 提供了许多实用程序和封装程序,可以更轻松地使用 OpenCL API,但它们不是编写 OpenCL 代码或进行 API 调用所必需的。这些包装器和实用程序不可移植。如果您对编写可移植代码感兴趣,请坚持使用 OpenCL 规范,该规范也可从 Khronos.org 获得。

    要编写代码,您只需将 opencl.h 包含在您的主机程序中,然后进行必要的 API 调用,以设置 OpenCL 环境并运行您的 OpenCL 程序。另外,不要忘记链接到 OpenCL 库(在 Linux 下为 gcc 提供 -lOpenCL 标志)。

    【讨论】:

    • 所以我应该下载一个SDK并且不使用它的任何功能,只使用里面的OpenCL信息?我遇到的主要问题是,当我包含 opencl.h 文件(VS2010,W7)时,它链接到 如果我将标题包含到我的程序中则未定义
    • 是的,而且SDK很有用,只是避免使用供应商的API。不幸的是,我对 Visual Studio 不是很熟悉。我猜如果您将 CL 目录放在系统包含路径中(不知道这对 VS 来说是什么),那么到 的链接将解析。如果我有时间,我会研究一下。
    • 好的,我拿了一份 VS C++ 2010 Express 的副本。通过转到 Project > project_name 属性,我能够正确设置路径。在 Configuration Properties > VC++ Directories 下,我编辑了 Include Directories,将路径添加到 CL 目录所在的目录(请注意,我没有指定 CL 本身的路径)。另外,我错误地写了你应该包含,而实际上应该包含的是。所有 OpenCL 标头都应位于 CL 目录中。
    【解决方案2】:

    OpenCL 是一个标准。它只定义约定。要使用它,您需要图形卡的驱动程序。 NVidia、AMD (ATI) 和 Apple 都提供此类驱动程序。你肯定需要一个 SDK。

    【讨论】:

    • 但是如果 Khronos 提供了 C++ 头文件,为什么我不能使用它们,或者我还缺少什么?
    • virtuallinux 的答案比我的更完整。我认为他是对的。
    【解决方案3】:

    @virtuallinux 暗示了正确的答案:如果您担心意外使用某些供应商特定的扩展,请获取 Khronos SDK。

    【讨论】:

    • 我担心我的程序无法在多个平台上运行得最好
    • @Daniel:Khronos SDK 不绑定到任何硬件或操作系统。他们编写标准,他们不制造视频卡。
    猜你喜欢
    • 1970-01-01
    • 2012-04-08
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多