【问题标题】:SIMD intrinsics - are they usable on gpus?SIMD 内在函数 - 它们可以在 gpus 上使用吗?
【发布时间】:2013-02-04 05:27:19
【问题描述】:

我想知道是否可以在 GPU 代码中使用 SIMD 内在函数,例如 CUDA 内核或 openCL 内核。这可能吗?

【问题讨论】:

    标签: c++ cuda opencl simd


    【解决方案1】:

    不,SIMD 内部函数只是 ASM 代码的微小包装。它们是特定于 CPU 的。更多关于他们的信息here

    一般来说,你为什么要这样做? CUDA 和 OpenCL 已经包含许多实际上是“GPU 内在函数”的“函数”(例如,所有这些函数都是 single-point-math intrinsics for the GPU

    【讨论】:

    • 另外,准确地说,CUDA 本身就已经使用 SIMD。您编写的代码以锁步方式同时在多个线程上运行,因此一条指令同时对多个数据值进行操作,每个数据值都在不同线程的上下文中处理。
    【解决方案2】:

    您使用 OpenCL C 语言中内置的矢量数据类型。例如 float4 或 float8。如果您使用 Intel 或 AMD 设备驱动程序运行,这些应转换为供应商 OpenCL 设备驱动程序的 SSE/AVX 指令。 OpenCL 包括几个函数,例如 dot(v1, v2) 应该使用 SSE/AVX 点生成指令。是否有您认为无法从 OpenCL C 语言中获得的特定内在特性?

    【讨论】:

      【解决方案3】:

      大多数情况下不会,因为 GPU 编程语言使用不同的编程模型 (SIMT)。但是,AMD GPU do have an extension to OpenCL 为某些字节粒度操作提供了内在函数(因此允许将 4 个值打包到 32 位 GPU 寄存器中)。这些操作用于视频处理。

      【讨论】:

      【解决方案4】:

      是的,您可以在 CPU 或 GPU 的内核代码中使用 SIMD 内部函数,前提是编译器支持使用这些内部函数。

      通常使用 SIMD 的更好方法是在内核中使用 Vector 数据类型,以便编译器根据可用性决定使用 SIMD,这也使内核代码具有可移植性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-05-27
        • 2014-03-28
        • 1970-01-01
        • 1970-01-01
        • 2011-07-11
        • 2020-12-12
        • 1970-01-01
        相关资源
        最近更新 更多