将__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;
}
}
}
}
答案 0 :(得分:0)
__restrict__
只能与指针一起使用。但是,可以使用指针来模拟二维阵列。与some_array[x*w + y]
而不是some_array[x][y]
类似,其中some_array定义为double *some_array[w]
。我认为这应该有用......
但老实说,为什么你甚至需要限制?