- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 CUDA 的新手,正在尝试对大量数组进行一些处理。每个数组是一个大约 1000 个字符的数组(不是字符串,只是存储为字符),最多可以有 100 万个字符,因此要传输大约 1 GB 的数据。这些数据已经全部加载到内存中,我有一个指向每个数组的指针,但我认为我不能依赖内存中的所有数据,所以我不能只通过一次调用就将它们全部传输。
我目前用推力做了第一次尝试,我的解决方案基于 this message ...我用分配所有内存的静态调用创建了一个结构,然后每个单独的构造函数复制该数组,并且我有一个转换调用,它接收带有指向设备数组的指针的结构。
我的问题是这显然非常慢,因为每个数组都是单独复制的。我想知道如何更快地传输这些数据。
在 this question (这个问题大多无关,但我认为用户正在尝试做类似的事情)talonmies 建议他们尝试使用 zip 迭代器,但我不知道这将如何帮助传输大量数组。
我在写这个问题时也刚刚发现了 cudaMemcpy2DToArray 和 cudaMemcpy2D,所以也许这些就是答案,但我没有立即看到它们是如何工作的,因为它们似乎都没有将指向指针的指针作为输入......
欢迎任何建议...
最佳答案
一种方法是按照 marina.k 的建议,仅在您需要时对传输进行批处理。由于您说每个数组仅包含大约 1000 个字符,您可以将每个字符分配给一个线程(因为在 Fermi 上,我们可以为每个块分配 1024 个线程)并让每个数组由一个块处理。在这种情况下,您可以在一次调用中传输一个“回合”的所有数组 - 您可以使用 FORTRAN 样式,在其中创建一个巨大的数组并获得“第三个”1000 个字符数组的第 5 个元素走:
third_array[5] = big_array[5 + 2*1000]
关于cuda - 如何最好地将大量字符数组传输到 GPU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10590595/
我是一名优秀的程序员,十分优秀!