5

我有一个指针,它引用了我想复制到设备int *h_a的大量数据点(在主机上)。N所以我这样做:

thrust::host_vector<int> ht_a(h_a, h_a + N);
thrust::device_vector<int> dt_a = ht_a;

但是,创建ht_a似乎隐含地复制 h_a而不是引用它,这是低效的,因为我不需要h_a.

我只想创建ht_a这样一个&ht_a[0]指向h_a[0]- 怎么做?

非常感谢。

或者,由于除了复制到设备内存之外,我实际上并没有做任何事情ht_a,我很想知道我们是否可以直接在 and 之间int*进行thrust::device_vector<int>

4

1 回答 1

5

编辑代码以显示如何从设备复制回主机:

#include <stdio.h>
#include <thrust/device_vector.h>
#include <thrust/copy.h>

int main() {

 int N = 10;
 int *h_a;
 int *h_b;
 h_a = (int *)malloc(N*sizeof(int));
 h_b = (int *)malloc(N*sizeof(int));
 for (int i=0; i<N; i++) {
   h_a[i] = i;
   h_b[i] = 0;
   }

 thrust::device_vector<int> dt_a(h_a, h_a + N);

 thrust::copy(dt_a.begin(), dt_a.end(), h_b);

 for (int i=0; i<N; i++)
   printf("h_b[%d] = %d\n", i, h_b[i]);
 return 0;
}
于 2013-01-14T22:59:46.950 回答