我想知道是否有可能设置多个指针已分配到内存中的单个数据?我问这个的原因是因为我在推力矢量的帮助下用gpu实现词法排序(并且在时间方面失败了)
例如,我试图获得相当于这些c ++的声明
unsigned int * pword; //setting up the array of memory for permutations of word
pword = new unsigned int [N*N];
unsigned int* * p_pword; //pointers to permutation words
p_pword = new unsigned int* [N];
//setting up the pointers on the locations such that if N=4 then 0,4,8,12,...
int count;
for(count=0;count<N;count++)
p_pword[count]=&pword[count*N];
我不是要求有人向我提供代码,我只想知道是否有任何方法可以设置指向单个数据数组的指针。 PS:我尝试过以下方法,但根本没有实现任何加速
int * raw_ptr = thrust::raw_pointer_cast(&d_Data[0]); //doing same with multiple pointers
但我想由于我指向device_vector这可能是访问速度慢的问题
对此方面的任何帮助表示高度赞赏。
答案 0 :(得分:1)
这没有任何意义:
int * raw_ptr = thrust::raw_pointer_cast([0]);
^ what is this??
我认为该行无法正确编译。
但是你可以做出类似的事情:
#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/device_ptr.h>
#include <thrust/sequence.h>
int main(){
int N=16;
thrust::device_vector<int> d_A(4*N);
thrust::sequence(d_A.begin(), d_A.end());
thrust::device_ptr<int> p_A[N];
for (int i=0; i<N; i++)
p_A[i] = &(d_A[4*i]);
thrust::host_vector<int> h_A(N);
thrust::copy(p_A[4], p_A[8], h_A.begin());
for (int i=0; i<N; i++)
printf("h_A[%d] = %d\n", i, h_A[i]);
return 0;
}
不确定如何说说加速。在你发布的一小段代码的背景下加速对我来说没有多大意义。