我需要编写一个程序来计算矩阵中的值,首先是顺序计算,然后使用openCL并行计算。
与我在普通C(使用MPI)中已经做过的事情相同
我想制作简单的函数来初始化Matrix和printMatrix等。
在C中我曾经非常简单地这样做:
// Matrix initialization
void initMatrix(size_t M, size_t N, double (*matrix)[M][N][2])
{
int i, j;
for (j = 0; j < N; ++j)
{
for (i = 0; i < M; ++i)
{
(*matrix)[i][j][0] = (double)(( i * ( M - i - 1 ) ) * ( j * ( N - j - 1 ) ));
(*matrix)[i][j][1] = (*matrix)[i][j][0];
}
}
printf("Matrix has been initialized\n");
}
我看到这会让我在C ++中出错,因为编译器想要在COMPILE TIME知道数组的大小(M和N大小作为参数传递给程序,因此我在编译时无法知道)。 / p>
如何在C ++中执行此操作?
我正在考虑使用Vectors,但我不确定这是不是一个好主意,因为我将不得不使用OpenCL库
答案 0 :(得分:2)
您可以通过模板传递引用/ const引用数组:
#include <iostream>
#include <cstddef> // for std::size_t
template <typename T, int M, int N, int P>
void f(T (&arr)[M][N][P]) // accepts 3-D arrays of arbitrary types
{
std::cout << "Size: " << M << " x " << N << " x " << P;
}
int main()
{
const std::size_t M = 2;
const std::size_t N = 3;
double arr[M][N][4];
f(arr);
}