인텔 제온 피 아키텍처에서 작동하는 간단한 매트릭스 곱셈 절차를 만들고 있습니다.이 절차는 다음과 같습니다 (매개 변수는 A, B, C). 타이밍에는 다음과 같은 내용이 포함되어 있지 않습니다. 초기화 :인텔 제온 파이에서 동적 메모리 속도가 느려짐
//start timing
for(int i = 0; i < size; i++){
for(int k = 0; k < size; k++) {
register TYPE aik = A[i][k];
for(int j = 0; j < size; j++) {
C[i][j] += aik * B[k][j];
}
}
}
//end timing
제한된 데이터 정렬 등을 사용하고 있습니다. 그러나 행렬이 동적 메모리 (posix_memalign)를 사용하여 할당 된 경우 계산은 TYPE = float에 대해 심각한 속도 저하가 발생하며 512x512 행렬은 동적 경우에는 ~ 0.55s를 사용하고 다른 경우에는 ~ 0.25를 사용합니다. 다른 아키텍처 (Intel Xeon E5)에서는 느려지 기는하지만 거의 눈에 띄지 않습니다 (약 0.002 초).
도움이 필요합니다.
이 모든 배열의 크기는 어떻게됩니까? 어쩌면 캐시 또는 캐시 라인에 모두 들어 맞지 않을 수 있습니까? 두 개의 외부 루프를 전환 해 보셨습니까? –
또한 ['register' 저장소 지정자] (http://en.cppreference.com/w/cpp/language/storage_duration)는 더 이상 사용되지 않습니다. –
빠른 매트릭스 곱셈을하고 싶다면 BLAS 라이브러리를 직접 코딩하지 말고 (힌트 : 순진 알고리즘이 이것을 수행하는 가장 빠른 방법은 아닙니다!). Intel이 제온 파이를 위해 고도로 조정 된 것을 가지고 있다고 확신합니다. –