c - 放置内核启动前已知且从未更改的常量内存的最佳位置

标签 c cuda

我有一个整数数组,其大小在内核启动前已知,但在编译阶段未知。大小的上限约为 10000 个 float3 元素(我猜这意味着 10000 * 3 * 4 = ~120KB)。编译时未知。

所有线程(最多)线性扫描数组中的所有元素。

最佳答案

您可以在运行时检查大小,然后如果它适合使用 cudaMemcpyToSymbol,或者使用纹理或全局内存。这有点乱,你必须有一些参数来告诉内核数据在哪里。一如既往,始终测试实际性能。在不同类型的内存中,不同的访问模式可能具有截然不同的速度。

另一个想法是退一步,再看一遍算法。通常有不同的方法来划分问题以使常量表始终适合常量内存。

关于c - 放置内核启动前已知且从未更改的常量内存的最佳位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7818765/

相关文章:

c++ - 使用 CUDA 有效计算排序数组中元素发生变化的位置

c - 通用原子 channel 也可与自定义结构一起使用

c - 为什么子进程不回复父进程发送的信号?

linux - 在(Ubuntu 14.04、Mint 17.2 或 Fedora)上安装 CUDA 的确定且稳定的方法

CUDA内存库冲突

c++ - 了解纹理如何与 CUDA 配合使用

c - Ubuntu递归列出文件,检测符号链接(symbolic link)

c - 将所有 C 代码写在一个源文件中真的会使程序运行得更快吗?

c - 为什么字符串修改没有按预期进行?

arrays - CUDA 中的嵌套内核