最简单/最有效的方法是初始化这些双打块,最好是在编译时:
#define N 1000
double mul1[N][N] __attribute__ ((aligned (64)));
double mul2[N][N] __attribute__ ((aligned (64)));
它们用于“const
”只读测试数据。
答案 0 :(得分:4)
对于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;
}
}
您是否计划过简单的解决方案,看看它是否足够快?如果没有,它需要多快?