Optimization CUDA优化-内核启动条件
我是CUDA的新手,希望了解更多关于优化内核启动条件以加快代码速度的信息。这是一个非常具体的场景,但我将尽可能地概括它,以便将来任何有类似问题的人都可以从中获益 假设我有一个300个元素的数组(数组A),作为输入发送到内核。这个数组由几个重复的整数组成,每个整数都有一个特定于它的设备函数。例如,每次5出现在数组A中时,内核都会执行特定于5的函数。这些功能是设备功能 我如何并行处理这个问题是通过启动320个块(可能不是最好的数目),这样每个块将并行执行与其元素相关的设备功能 CPU将以串行方式处理整个问题,它将逐个元素并逐个调用每个函数,而GPU将为每个块分配一个元素,以便所有320个块都可以访问相关设备函数并同时计算 从理论上讲,对于大量的元素来说,GPU应该更快——至少我认为是这样,但在我的情况下不是这样。我的假设是,由于300个元素是一个小数字,CPU总是比GPU快 这是可以接受的,但我想知道的是,我如何可以减少GPU的执行时间至少一点。目前,CPU需要2.5毫秒,GPU大约需要12毫秒 问题1-如何选择在启动时启动的最佳块/线程数? 首先,我尝试了320个块,每个块有1个线程。然后使用320个螺纹的1个块。执行时间没有实际变化。调整块/线程的数量会提高速度吗 问题2-如果300个元素太小,为什么会这样?我需要多少元素才能看到GPU的性能超过CPU 问题3-我应该研究哪些优化技术 请让我知道,如果有任何这是不是很清楚,我会扩大它 提前谢谢Optimization CUDA优化-内核启动条件,optimization,cuda,Optimization,Cuda,我是CUDA的新手,希望了解更多关于优化内核启动条件以加快代码速度的信息。这是一个非常具体的场景,但我将尽可能地概括它,以便将来任何有类似问题的人都可以从中获益 假设我有一个300个元素的数组(数组A),作为输入发送到内核。这个数组由几个重复的整数组成,每个整数都有一个特定于它的设备函数。例如,每次5出现在数组A中时,内核都会执行特定于5的函数。这些功能是设备功能 我如何并行处理这个问题是通过启动320个块(可能不是最好的数目),这样每个块将并行执行与其元素相关的设备功能 CPU将以串行方式处理
@talonmies的可能复制感谢我在硬件的硬限制下一直在工作的链接。据我所知,块/线程数没有简单的答案,它更多的是一个尝试和错误的东西?我已将所有输入元素保存在恒定内存中,因此访问时间应该很快。对于新手来说,我还应该研究其他一些基本的优化技术吗?这听起来像是一个大不相同的任务。例如,如果在同一个扭曲中得到不同的数字,那么扭曲基本上必须按顺序处理这些数字。这将对性能产生真正的负面影响。有一件事我要考虑的是有特定任务的扭曲(甚至内核)(例如,线程0 - WARPESIZE将专门用于处理5),然后尝试设计该方案来将这些任务分配给这些线程。1。
或
的内核启动配置不太可能接近于完全利用机器。2.如果你能先对数组进行排序,你可能会得到更好的GPU结果。