random_ints(a,N)做了什么以及如何在我的代码中使用它?

时间:2012-10-21 21:01:44

标签: c++ cuda

http://developer.download.nvidia.com/CUDA/training/GTC_Express_Sarah_Tariq_June2011.pdf

在上面的教程(幻灯片29)中,他们启动了3个指向int的指针:

int *a, *b, *c;

显然这是类型(int *),但它们以某种方式使内核可以使用语法a[index]访问其索引

他们还使用一些(对我来说)未知命令来初始化它们的值:

a = (int *)malloc(size); random_ints(a, N);

那么这个命令是做什么的?首先,它将指针* a转换为指向int(但稍后a神奇地变为向量)。我找不到任何关于random_int精确做什么的来源(我的编译器也不认识它,因为它可能需要一些包含)。我想它会使a长度为N的向量具有随机整数(尽管a的类型为int)。

我尝试用vector <int> * a;等做同样的事情来解决这个问题,但我仍然无法将其传递给我的内核(无论我尝试什么,它都不会添加元素)。

我在C ++工作。提前谢谢。

编辑:这可能是伪代码吗?因为显式的C ++示例以不同的(可理解的方式)

执行此操作

1 个答案:

答案 0 :(得分:7)

  • 您可以像普通数组一样使用C / C ++中的指针。参见:

实施例

int* p = new int[2];
p[1] = 2;  
*(p + 1) = 2; // same as line above - just other syntax
*(1 + p) = 2; // and other way
 1[p] = 2; // don't use it - but still valid
  • 您可以通过C ++中的malloc分配内存(它来自C方式),但仅适用于POD类型,例如int

实施例

int* p = (int*)malloc(12 * sizeof(int)); // C way equivalent to C++: new int [12]

请注意,您必须在free(p)之前释放此指针,而不是delete [] p

  • 我想这个函数的实现只是将N个随机数分配给由数组表示的int数组:

示例:

void random_ints(int* a, int N)
{
   int i;
   for (i = 0; i < N; ++i)
    a[i] = rand();
}