c++ - 计算 cudaMalloc 的间距,如 cudaMallocPitch 中所示

标签 c++ cuda

简单的问题: 是否可以在不分配内存的情况下计算或获得数组的最佳间距

cudaMallocPitch(void** p, size_t *pitch, size_t width, size_t height) 

我想在不分配内存的情况下获得音调,然后使用函数 cudaMalloc 代替!

(如果想要为 cuda 平台的倾斜分配实现一些缓存分配器,这一点至关重要)

是吗:

// round width to next mulitple of  prop.textureAlignment;  
size_t proper_pitch = ((width / (size_t)device.m_prob.textureAlignment) + 1) * device.m_prob.textureAlignment;

更新: 我现在将proper_pitch计算为32/64/128字节的最小上限倍数: 我没有尝试过这个,而且我仍然不知道运行时 API 还能做什么,也许看看已经分配的内存并做一些调整?在 CUDA 编程指南中,对于完全合并的访问,上述是必要的要求(还不够,因为在运行时扭曲需要连续访问)...

// use Cuda Programming Guide Alignmenet (which should be the best i think)
    // Upper closest multible of 32/64/128
    //size_t upperMultOf32 = ((widthInBytes + 32 - 1)/32)*32;   //  ((widthInBytes-1)/32 + 1)*32
    proper_pitch = std::min(
                        std::min( ((widthInBytes + 32 - 1)>>5)<<5 , ((widthInBytes + 64 - 1)>>6)<<6 ), 
                        ((widthInBytes + 128 - 1)>>7)<<7
                    );

最佳答案

目前还没有办法获得音调计算。详细信息可能是特定于硬件版本的,NVIDIA 既没有记录计算,也没有通过 API 公开计算(尽管正如所指出的那样,这样做对他们来说是微不足道的)。

如果这对于现实世界的用例来说是一个严重的限制,我建议通过 NVIDIA 注册开发者门户提出错误报告/功能请求。根据我的经验,他们确实会听取严肃的功能请求。

[这个答案主要是根据评论汇总的,并作为社区 wiki 条目添加,以使这个问题从未回答的列表中消失]

关于c++ - 计算 cudaMalloc 的间距,如 cudaMallocPitch 中所示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24193025/

相关文章:

c++ - 是否可以重载函数以接受具有非类型模板参数的所有实例

c++ - C++ 中的用户定义转换

c++ - 从 std::vector 获取最后一个元素

c++ - 为什么 CUDA 同步点不能防止竞争条件?

visual-studio - 在 Visual Studio 2013 中为 CUDA 7.0 启用语法高亮

memory - 如何缓解 OpenCL/CUDA 中的主机 + 设备内存传输瓶颈

c++ - 从 BSTR 转换为 char*

c++ - 随机选择两个值

c++ - 计算机视觉算法的 CUDA 性能

cuda - 使用多个 block 时,CUDA 会得到错误的输出