9

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_ints 确切作用的来源(而且我的编译器也无法识别它,因为它可能需要一些包含)。我猜它a用随机整数创建了一个长度为 N 的向量(尽管a是 type int)。

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

我正在使用 C++。提前致谢。

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

4

1 回答 1

11
  • 您可以像普通数组一样在 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]

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

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

例子:

void random_ints(int* a, int N)
{
   int i;
   for (i = 0; i < N; ++i)
    a[i] = rand();
}
于 2012-10-21T22:27:07.390 回答