通过未知大小的多维数组来运行

时间:2015-04-02 17:21:23

标签: c++ visual-studio opencl

我需要编写一个程序来计算矩阵中的值,首先是顺序计算,然后使用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库

1 个答案:

答案 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);
}