|
|
1
4
在CUDA中,由于可能使用内存合并,因此首选连续(非随机)内存访问。创建随机分布的索引数组并从每个线程执行一个索引并不是什么大事,类似这样:
但是对S[随机访问]的内存访问将非常慢(这将是一个最可能的瓶颈)。 如果您决定使用CUDA,那么您必须对块/网格大小进行大量实验,最小化每个线程的寄存器消耗(以最大化每个多处理器的块数),并可能对a排序以使用来自最近线程的最近S\ ind。。。 |
|
|
2
1
如果您对索引进行排序或构建有助于性能分配的已排序列表,如果存在索引簇,则尝试使用纹理内存,如果您使用一些重叠访问每个线程中的许多元素,则使用共享内存可以显著提高性能。 |
|
|
3
1
一级间接操作完全没有问题。我在自己的CUDA代码中使用了相当数量的代码。随着时间的推移,电视机可能会保持静止吗?如果是这样的话,像您所说的那样生成查找A可能是非常值得的。
|