这是我第一次在这里提问,非常感谢您的帮助,还请原谅我的无知。我刚刚开始学习CUDA编程。
基本上,我有一堆点,想要计算所有成对距离。目前,我的核函数只保留一个点,并迭代地从全局内存中读取所有其他点,并进行计算。以下是我的一些困惑:
我正在使用具有448个核心的Tesla M2050。但是我的当前并行版本(kernel<<<128,16,16>>>)实现了更高的并行性(大约比kernel<<<1,1,1>>>快600倍)。这可能是由于多线程或管道问题,还是它们实际上表示相同的事情?
我想进一步提高性能。因此,我考虑使用共享内存来保存每个多处理块的一些输入点。但是新代码的速度与旧代码相同。可能的原因是什么?这可能与我设置太多线程有关吗?
或者,是因为代码中有if语句吗?问题是,我只考虑和计算短距离,所以我有一个类似于(if dist < 200)的语句。我应该对这个语句有多担心?
非常感谢! Bin