我实现使用CUDA库尖峰神经网络,并感到非常不确定如何针对以下几点着手:我应该如何分配内存给许多(1000+)我不知道大小的数组?
分配内存(cudaMalloc)到许多不同的阵列。到目前为止,只需使用cudaMalloc'手动'就足够了,因为我不必制作超过10个左右的阵列。但是,我现在需要指出并为数千个数组分配内存。
如何确定分配给每个阵列的内存量。阵列的高度为3(突触后神经元id为1行,突触后神经元突触数量为1行,突触功效为1行),但它们具有不确定的长度随时间变化随着传出突触的数量。
听说在CUDA动态存储器分配是很慢的,并与分配对于每个阵列所需的最大存储器的想法,以便玩弄,然而每神经传出突触的数量从100-10,000且因此改变我认为这是不可行的,因为我已经有了1000个神经元。
如果任何人都可以告诉我如何分配内存到GPU上的许多阵列,和/或如何编码上述任务的快速动态内存分配,我将不会非常感激。
在此先感谢!
你有什么理由不能只用一个大的内存分配来代替许多小内存? – talonmies 2013-03-24 17:55:14
我打算使用很多小分配的原因是我希望信息的“结构”与邻接列表相似,也就是说,网络中的每个节点都有一个列表,告诉你它是哪个其他节点连接到(除了在我的情况下,它将是一个'矩阵',因为我有3行信息每个节点) - 我认为这将避免有许多零元素,如果我使用一个大型的3D数组。我是否认为这些零元素会耗尽内存? – Boyentenbi 2013-03-24 18:40:56
只有两种选择:使用可用的分配器(例如设备上的cudaMalloc或malloc)或创建您自己的分配器。如果你担心速度,并且有很多小的分配,那么创建你自己的分配器可能是一条可行的路。这将涉及发布'cudaMalloc'一次或少数次,然后根据需要通过指针索引分配到设备上的分配区域。一个大的3D阵列可以简化编码,但有可能浪费更多的空间。智能分配器只会剥离尽可能多的空间。 – 2013-03-24 21:16:18