嗨,我有一个内核函数,在这个函数中我需要比较字节。我想要搜索的区域被分成了多个块,所以4k字节的数组被分成了16个块,每块包含256个字节。每个块中的线程会读取数组中的索引,并将其与另一个数组进行比较,而另一个数组中存放着我要搜索的内容。我有两种方法实现了这个功能:
比较全局内存中的数据,但是块中的线程经常需要读取相同的地址。
将数据从全局内存复制到共享内存,并以与上述相同的方式在共享内存中比较字节。仍然存在相同地址读取的问题。
将数据复制到共享内存的代码如下:myArray[idx] = global[someIndex-idx]; whatToSearch[idx] = global[someIndex+idx];
代码的其余部分是相同的。只有在示例2中对数据进行的操作才在共享数组上执行。
但第一种选项比使用共享内存快大约10%,为什么?感谢您的解释。