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

Jan*_* M. 7 c++ cuda

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

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

int *a, *b, *c;
Run Code Online (Sandbox Code Playgroud)

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

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

a = (int *)malloc(size); random_ints(a, N);
Run Code Online (Sandbox Code Playgroud)

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

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

我在C++工作.提前致谢.

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

Pio*_*ycz 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
Run Code Online (Sandbox Code Playgroud)
  • 您可以在C++中通过malloc分配内存(它是从C方式派生的),但仅适用于POD类型 int

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

请注意,您必须释放此指针free(p),而不是通过delete [] p.

  • 我想这个函数的实现只是将N个随机数赋给指针所代表的int数组:

例:

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