告诉 nvcc 在 SIMD 模式下执行循环迭代

Tell nvcc to execute a loop's iterations in SIMD mode

在 OpenMP 中,程序员可以通过一种方式向编译器提示循环体可以矢量化。 CUDA C中有类似的东西吗?我们可以告诉 nvcc 在翻译循环体时使用向量指令吗?该代码应该由 SIMD 线程处理器执行,所以这可能是真的。

Is there something similar in CUDA C? Can we tell nvcc to use vector instructions when translating body of a loop?

CUDA C 与 OpenMP pragmas 导致代码翻译的方式不同。

在大多数情况下,CUDA GPU 没有矢量指令(SIMD intrinsics and the corresponding PTX SIMD Video instructions). Typically, "vectorization" on a GPU is achieved via the SIMT mechanism除外。

CUDA GPU 线程处理器不是 SIMD。它是一个单线程单数据处理器。 SIMD/SIMT 通过将相邻的线程聚集成经线来实现。

您可能希望查看其中一份 CUDA 白皮书,例如 Fermi whitepaper第 7 页,概述了 GPU 线程执行。

CUDA C 不是翻译引擎,但 OpenACC 是,它是用于图形卡等加速器的 OpenMP,这将真正回答您的问题: https://developer.nvidia.com/openacc