__restrict__
한정자에 2 차원 배열 참조를 지정하는 적절한 방법은 무엇입니까? 예를 들어 :배열 참조에 대한 C++ 제한 한정자
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;
}
}
}
}
C에서 참조가 없기 때문에 C 태그를 제거했습니다. 어떤 컴파일러가 C++에서이'__restrict__'를 지원합니까? 표준 C++의 일부는 아닙니다. –
James가 말했습니다. 참조는 C++에서만 가능하며'restrict' (밑줄 없음)는 C입니다. C 또는 C++ 확장을 사용하려는 경우 환경을 명시해야합니다. –
@James gcc, xlc, icc. http://stackoverflow.com/questions/776283/what-does-the-restrict-keyword-mean-in-c – Anycorn