【发布时间】:2019-04-29 23:39:52
【问题描述】:
为了练习,我正在 cuda 中制作一个简单的矩阵初始化程序。我做了一个小的顺序版本作为起点供参考。它只是创建一个 n x m 数组并用双精度数填充它。我一直在阅读其他帖子和文档,但我很困惑,我希望有人可以向我解释如何以 n x m 大小的类似方式初始化 cuda 中的二维数组,如下所示。如果有人愿意解释,我也将不胜感激有关如何填充该 cuda 矩阵的见解。
再次嗨,关于它可能是重复的,我应该详细说明。链接的帖子并没有真正解释任何东西,它只是示例代码,它是我之前查看但不理解的帖子之一,因为它没有解释。谢谢你。
顺序版本:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <assert.h>
int n,m, i, j;
double count;
void update(int n, int m, double arr[][m]){
for(i=0; i<n; i++){
for(j=0; j<m; j++){
count++;
arr[i][j] = count;
}
}
}
int main(int argc, char * argv[]) {
assert(argc==3);
n = atoi(argv[2]);
m = atoi(argv[1]);
double (*arr)[n][m] = malloc(sizeof *arr);
update(n,m,arr);
return 0;
}
【问题讨论】:
-
double (*arr)[m] = malloc(n * sizeof *arr);– 我不认为这和你想的一样。为什么所有变量都是全局变量?? -
详细信息;在 C 中,
double (*arr)[m]中的arr不是二维数组,而是pointer to an array m of doubles。double arr[n][m]是一个二维数组。 -
@chux pssst ... 指向 m 个双精度数组的指针。
-
要创建一个指向二维数组的指针,C 代码可以使用
double (*arr)[n][m] = malloc(sizeof *arr); -
@Swordfish 第二个想法,也许 OP 确实想要
double (*arr)[m] = malloc(n * sizeof *arr);,即使它不是一个合适的二维数组。嗯,来晚了。