最有效的方法来初始化C中的大块双精度

时间:2009-12-29 12:14:15

标签: c unit-testing initialization

最简单/最有效的方法是初始化这些双打块,最好是在编译时:

#define N 1000
double mul1[N][N] __attribute__ ((aligned (64)));
double mul2[N][N] __attribute__ ((aligned (64)));

它们用于“const”只读测试数据。

4 个答案:

答案 0 :(得分:4)

有一个名为Designated Initializers

的GCC(非标准C!)功能

对于1D阵列,它只是:

double array[N] = {[0 ... (N-1)] = MY_DOUBLE_VALUE};

对于2D有点棘手:

double array[N][N] = { [0 ... (N-1)] = {[0 ... (N-1)] = MY_DOUBLE_VALUE}};

答案 1 :(得分:3)

静态数组初始化(我认为它就是你想要的)总是在编译时执行,所以你像其他任何数组一样初始化它们。

答案 2 :(得分:1)

如果只需要这两个数组,我更喜欢生成一个填充了make文件中默认值的文件。

如果您需要更复杂的内容,可以使用Boost.Preprocessor库。 您可以使用BOOST_PP_WHILE和BOOST_PP_ARRAY_PUSH_FRONT。

我认为它会起作用:)

答案 3 :(得分:1)

最容易和最有效的有时是不兼容的。它需要多高效?

最简单的是一个循环。在一个简单的循环中,一百万个任务真的太慢了​​吗?

int i, j;
for (i = 0; i < N; ++i) {
  for (j = 0; j < N; ++j) {
    mul1[i][j] = INITIAL_VALUE_1;
    mul2[i][j] = INITIAL_VALUE_2;
  }
}

您是否计划过简单的解决方案,看看它是否足够快?如果没有,它需要多快?