GPU编程策略

GPU Programming Strategy

本文关键字:策略 编程 GPU      更新时间:2023-10-16

我正在尝试使用CUDA中的C编程一种神经网络。我有一个基本问题。对于编程,我可以使用大数组或不同的命名策略。例如,对于权重,我可以将所有权重放在一个大数组中,或者使用不同的层来使用不同的层,例如,权重重1,而the loge 2 and for Layer2等等。第一个策略有点麻烦,而第二个策略对我来说更容易。但是,我想知道我是否使用不同的命名策略,是否会使程序较慢在GPU上运行?

只要所有数组仅分配一次并且不调整大小,性能的差异应可以忽略不计。

如果您不断地重新定位内存和调整重量的数组,则在大数组中管理自己的内存可能会有性能好处。

但是,这是非常特定的,如果您不知道自己在做什么,那么管理自己的内存/数组可能会使您的代码较慢且较低。另外,如果您的NN巨大,您可能会很难找到一个足够大的内存块以容纳您的内存/数组块。

这是我的2美分。具有1个非常大的数组的缺点:

  • 很难调整大小,因此,如果您打算调整不可分割的层。去一个大街区。
  • 正如丹尼尔(Daniel)所说

单独的数组或容器的缺点。

  • 如果您有一个非常刻板的,不可预测的访问模式。如果采取多个步骤在数组中找到一个位置,则访问时间可以较慢。例如,如果您有指针列表的指针列表,请列出指针列表。您每次都必须采取三个(略昂贵的)步骤。可以通过适当的编码来避免。

通常,我会赞成分裂。