0

我想知道是否可以设置多个指向已在内存中分配的单个数据的指针?我问这个的原因是因为我在推力向量的帮助下用 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 的事实,这可能是访问速度慢的问题

非常感谢这方面的任何帮助。

4

1 回答 1

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;
}

不知道该说什么关于加速。在您发布的一小段代码的上下文中加速对我来说没有多大意义。

于 2013-04-08T06:49:12.000 回答