C ++限制数组引用的限定符

时间:2011-02-16 22:29:55

标签: c++ optimization

__restrict__限定符赋予二维数组引用的正确方法是什么? 例如:

void function(double (&)[3][3]);

据我所知,g++编译以下内容(但没有性能差异):

void function(double (& __restrict__)[3][3]);

是正确的吗?

完整细分:

template<class A, class B, class C>
static void
multiply(const A (&a)[L][L], const B (&b)[L][L],
        C (&c)[L][L]) {
// C (&__restrict__ c)[L][L]) {
    for (size_t j = 0; j < L; ++j) {
        // C __restrict__ *cj = c[j];
        for (size_t k = 0; k < L; ++k) {
            double b_jk = b[j][k];
            for (size_t i = 0; i < L; ++i) {
                c[j][i] += a[k][i]*b_jk;
                // cj[i] += a[k][i]*b_jk;
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

__restrict__只能与指针一起使用。但是,可以使用指针来模拟二维阵列。与some_array[x*w + y]而不是some_array[x][y]类似,其中some_array定义为double *some_array[w]。我认为这应该有用......

但老实说,为什么你甚至需要限制?