我正在尝试使用CUDA中的c编程一种神经网络。我有一个基本问题。对于编程,我可以使用大数组或不同的命名策略。例如,对于权重,我可以将所有权重放在一个大数组中,或者使用不同的数组用于具有不同名称的不同层,例如weight1用于第1层,weight2用于第2层,依此类推。第一个策略有点麻烦,而第二个策略对我来说更容易。但是,我想知道我是否使用不同的命名策略,是否会使程序在GPU上运行更慢?
这是我的2美分。拥有1个非常大的阵列的缺点:
Separate数组或容器的缺点。
总的来说,我赞成分裂。
只要所有数组只分配一次而不调整大小,性能差异应该可以忽略不计。
如果您经常重新分配内存并调整包含权重的数组大小,那么在大数组中管理自己的内存可能会带来性能优势。
然而,这是非常具体的实现,如果您不知道自己在做什么,管理自己的内存/数组可能会使您的代码更慢,更不健壮。此外,如果您的NN很大,您可能无法找到足够大的连续内存块来容纳您的内存/阵列块。