如何初始化CUDA推力矢量而不隐式调用';复制';?

如何初始化CUDA推力矢量而不隐式调用';复制';?,cuda,gpgpu,thrust,Cuda,Gpgpu,Thrust,我有一个指针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+N); 推力:装置矢量dt_a=ht_a; 然而,创建ht\u a似乎隐含地复制h\u a而不是引用它,这是低效的,因为我不需要另一份h\u a 我只想创建ht\u a,这样&ht

我有一个指针
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+N);
推力:装置矢量dt_a=ht_a;
然而,创建
ht\u a
似乎隐含地复制
h\u a
而不是引用它,这是低效的,因为我不需要另一份
h\u a

我只想创建
ht\u a
,这样
&ht\u a[0]
就指向
h\u a[0]
-怎么做

非常感谢


或者,由于除了复制到设备内存之外,我实际上并没有使用
ht\u a
做任何事情,因此我想知道我们是否可以直接在
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;
}
#包括
#包括
#包括
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));

对于(int i=0;iYes),您可以直接从两个
int*
初始化
device\u vector
,就像您在示例中对
host\u vector
所做的那样。谢谢,但是如何从
dt\u a
返回到
h\u a
(即
推力::device\u vector
到主机
int*/code>)?谢谢。这些操作是同步的吗?是的,我上面展示的所有推力复制操作都是同步的(创建
dtu a
时的隐式复制和没有执行策略的显式
推力::复制
)意思控制不返回主机线程,直到函数完成C++中代码“代码> MalOC < /代码>??即使在2013代码>新的< /代码>是……(现在它将是代码> STD::UNQUICHYPTR < /代码>)内存泄漏BTW.