cudaMemcpy能够用来拷贝链表吗?

在主机端创建了一个链表,能在GPU上也创建一个链表,然后拷贝过去吗?如果能,怎么在GPU上创建链表呢?还有,我指的是在kernel函数调用之前创建。

LZ您好:
1: 您标题中的问题“CUDAMEMCPY能否拷贝链表”,这个是不能直接拷贝的,cudamemcpy只能复制一段连续的地址空间,而链表的存储在空间上是不连续的。

2:您顶楼中询问的,能否在GPU端实现并维护一个链表,这个是可以的,您需要对每个节点cudaMalloc出空间,并cudaMemcpy进去合适的值,包括数据域的内容和指针域的内容。

大致如上,祝您好运~

原来是这样,这样的话,对于大量数据的并行计算,若采用链表的方式传递拷贝数据,反而有些得不偿失了……

是的,链表本来就是为了能随时增加/删除元素搞的,其访问的时候只能顺序寻找,加上存储空间的非连续性,在GPU上可能访存性能也受影响。
因此,链表可能确实不太适合在GPU上使用。

当然具体取舍需要您根据实际情况加以评估。

祝您编码顺利~

链表本就不是为效率而生的数据结构。

如果非要这么干的话,可以考虑改变下思路,变种一下,把链表元素集中存放,这样可以整块拷过去,也便于维护,比如:全部放在一个连续数组里,用数字下标替代链表指针的功能。

对,我本来就是这样做的,只是考虑到链表,就想问一问这方面的知识。

嗯嗯,既然LZ的算法可以用数组来搞定,那么就不必考虑折腾链表了。

祝您好运~