【发布时间】:2012-06-11 15:53:41
【问题描述】:
为了避免我调用的函数非常冗长且不连贯 来自内核的许多设备函数。我分配一个共享 内核调用开始时的缓冲区(每个线程块) 并将指向它的指针传递给所有 device 函数 在内核中执行一些处理步骤。
我想知道以下几点:
如果我在 全局 函数中分配共享内存缓冲区 我通过指针传递的其他 device 函数如何区分 在可能的地址类型(全局设备或共享内存)之间 指针可以引用。
注意用shared修饰符修饰形参是无效的 根据'CUDA编程指南'。 imhoit 的唯一方法是 实现的是
a) 通过在分配的内存上放置标记 b) 通过调用传递不可见的参数。 c) 有一个虚拟的统一地址空间,它有单独的段用于 可以使用全局和共享内存以及对指针的阈值检查吗?
所以我的问题是:我是否需要担心或者应该如何进行 没有将所有函数内联到主内核中?
================================================ =============================================
另一方面,我今天很震惊,带有 CUDA Toolkit 3.0 的 NVCC 不允许所谓的 '来自全局函数的外部调用',要求它们被内联。这意味着实际上 我必须声明所有 device 函数内联和标题/源的分离 文件损坏。这当然很丑,但是有没有其他的选择?
【问题讨论】:
-
针对那个计算能力,你编译了吗?
标签: function cuda shared-memory address-space