1

다음 코드가 있는데 크기가 다른 여러 행렬 곱셈의 실행 시간을 계산하려고합니다. 나는 100의 행렬 크기로 시작하여 500까지 움직였습니다. 그러나 1000을 시도하면 다음과 같은 오류 메시지가 나타납니다 : 분할 오류 (코어가 덤프 됨). 따라서 메모리와 함께해야한다고 가정합니다. 5000의 매트릭스와 심지어 10000의 실행 시간을 계산하고 싶습니다. 누구든지 내 문제를 해결할 수 있습니까?행렬 곱셈 오류 : 분할 오류 (코어 덤프 됨)

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
#define SIZE 1000 

int main(void) 
{ 
    int A[SIZE][SIZE], B[SIZE][SIZE], C[SIZE][SIZE] = {0}; 
    int i, j, k; 

    srand(time(NULL)); 

    for(i = 0; i < SIZE; i++) 
    { 
     for(j = 0; j < SIZE; j++) 
     { 
      A[i][j] = rand()%100; 
      B[i][j] = rand()%100; 
     } 
    } 

    clock_t begin, end; 
    double time_spent; 

    begin = clock(); 

    for(i = 0; i < SIZE; i++) 
     for(j = 0; j < SIZE; j++) 
      for(k = 0; k < SIZE; k++) 
       C[i][j] += A[i][k] * B[k][j]; 

    end = clock(); 

    time_spent = (double)(end - begin)/CLOCKS_PER_SEC; 

    printf("Elapsed time: %.2lf seconds.\n", time_spent); 

    return 0; 
} 

답변

2

이것은 고전적인 stack overflow - 당신은 약 12 ​​메가 바이트 총 3 개 지역 배열하여 스택 (32 비트의 int를 가정) 크기의 약 4메가바이트의 각이있다. 대부분의 최신 운영 체제에서 스택은 일반적으로 8MB 이하입니다. 변수를 static으로 설정하십시오.

static int A[SIZE][SIZE], B[SIZE][SIZE], C[SIZE][SIZE] = {0}; 

더 이상 스택에 없거나 동적으로 할당 할 수 있습니다.

+1

대단히 감사합니다! –