【问题标题】:Can NPP functions be called as a device function?NPP函数可以作为设备函数调用吗?
【发布时间】:2018-10-24 23:08:57
【问题描述】:

NPP 函数,更具体的 npps (https://docs.nvidia.com/cuda/npp/group__npps.html) 可以作为设备函数调用吗?

如果我创建一个全局函数,我可以在内部调用 npps 函数为 nppsMaxIndx_32f(计算向量的最大值)吗?

示例: 我有 100 个向量,每个向量有 10000 个浮点数,如果我在主机代码中执行此操作,我必须对 npp 函数进行 100 次调用

如果我创建一个包含 100 个线程的全局函数并在内部为每个向量调用 npp 函数,以便它们同时启动,这会起作用吗? nppsMaxIndx_32f可以作为设备函数调用吗?

【问题讨论】:

  • 不,NPP 函数不能在设备代码中使用。 CUDA 工具包提供的大多数其他库(除了 Thrust)也不能。
  • "但只有在您不需要以前的数据进行计算时才能这样做。"这可能是不正确或误导性的陈述。如果您按顺序发出 2 个 npp 调用,并且第一个调用对 GPU 上的数据进行了修改,则第二个调用应该获取这些修改。
  • 当然,这就是我想说的。每个呼叫都使用独立的数据。谢谢@RobertCrovella
  • 每次调用不必使用独立的数据。第一次调用的结果可以被第二次调用使用。

标签: cuda npp


【解决方案1】:

这是不可能的——NPP 功能是主机专用功能。尝试会产生错误:

functions.cu(237): error: calling a __host__ function("nppsMaxIndx_32f") from a 
__global__ function("computeMax") is notallowed

functions.cu(237): error: identifier "nppsMaxIndx_32f" is undefined in device code

但是,在没有 GPU 同步的情况下在主机代码中进行调用将几乎同时调用它们,而无需等待前一个完成,但只有在不需要调用顺序并且重叠调用的数据是完全独立的。

【讨论】:

    猜你喜欢
    • 2022-01-08
    • 2015-05-22
    • 2017-01-22
    • 2012-08-26
    • 2019-11-05
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多