我有一个指针int *h_a,它引用了N我要复制到设备的大量数据点(在主机上).所以我这样做:
thrust::host_vector<int> ht_a(h_a, h_a + N);
thrust::device_vector<int> dt_a = ht_a;
Run Code Online (Sandbox Code Playgroud)
然而,创建ht_a似乎隐含地复制 h_a而不是引用它,这是低效的,因为我不需要另一个副本h_a.
我只是想创造ht_a这样的&ht_a[0]指向h_a[0]- 如何做到这一点?
非常感谢.
或者,因为ht_a除了复制到设备内存之外,我实际上并没有做任何事情,我有兴趣知道我们是否可以直接在int*和之间进行操作thrust::device_vector<int>.
编辑的代码还显示如何从设备复制回主机:
#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;
}
Run Code Online (Sandbox Code Playgroud)