C 언어 행 우선 과 열 우선 문제 에 대한 심도 있 는 분석

C 언어 행 우선 과 열 우선 문제 에 대한 심도 있 는 분석
요약
본 고 는 주로'행 우선'원칙 과'열 우선'원칙 의 문 제 를 연구한다.
1.배경
먼저'행 우선'과'열 우선'의 지식 을 알 아 본다.이 두 가지 방식 은 수학 적 으로 다음 과 같이 직관 적 으로 설명 하고 다음 과 같은 행렬 을 정한다.

줄 우선 원칙 에 따라 정렬 방식 은?

열 우선 원칙 에 따라 정렬 방식 은?

2.컴퓨터 분야 의 응용
행렬 우선 원칙 은 컴퓨터 분야 에서 주로 다음 과 같다.줄 우선 순위 나 열 우선 순 위 는 좋 고 나 쁨 이 없 지만 메모리 에 있 는 데이터 에 대한 가장 좋 은 저장 접근 방식 과 직 결 됩 니 다.메모리 사용 에 있어 서 프로그램 이 접근 하 는 메모리 주소 간 의 연속 성 이 좋 을 수록 프로그램의 접근 효율 이 높 기 때문이다.이에 따라 프로그램 이 접근 하 는 메모리 주소 간 의 연속 성 이 떨어진다.따라서 우 리 는 줄 우선 체제 의 컴 파일 러,예 를 들 어 C/C++,CUDA 등에 서 줄 우선 데이터 저장 방식 을 사용 해 야 한다.열 우선 체제 의 컴 파일 러,예 를 들 어 Foortune,Matlab 등에 서 열 우선 데이터 저장 방식 을 사용한다.그러나 이런 사상 이 프로 그래 밍 에 침투 하면 코드 의 질 이 한 단계 높아진다.
3.행렬 계산 을 예 로 들 면(Matlab 컴 파 일 러 에서 테스트)

% data 
A = [ 1 1 
   2 2 
   3 3  
   4 4 
   5 5 
   6 6 
   7 7 
   8 8 
   9 9]; 
B = [ 1 2 3 4 5 6 7 8 9 
   1 2 3 4 5 6 7 8 9]; 
C = zeros(9,9); 
 
% The method of matrix multiplication in Matlab 
tic  
C = A*B; 
toc 
 
 
% Our impletation method of matrix multiplication 
tic 
for ra = 1:9 % raws of the matrix A 
  for cb = 1:9 % columns of the matrix B 
    for len = 1:2  
      C(ra,cb) = A(ra,len)*B(len,cb)+C(ra,cb);  
    end 
  end 
end 
toc 
 
 
% Optimal method 1  
tic 
for cb = 1:9 % columns of the matrix B 
  for ra = 1:9 % raws of the matrix A 
    for len = 1:2  
      C(ra,cb) = A(ra,len)*B(len,cb)+C(ra,cb);  
    end 
  end 
end 
toc 
 
 
% Advanced optimal method 2 
A = A'; % you can also directly given A = [ 1 2 3 4 5 6 7 8 9  
    %                  1 2 3 4 5 6 7 8 9]; 
B = [ 1 2 3 4 5 6 7 8 9 
   1 2 3 4 5 6 7 8 9]; 
tic 
for i = 1:9 % columns of the matrix A 
  for j = 1:9 % columns of the matrix B 
    for len = 1:2 
      C(i,j) = A(len,i)*B(len,j)+C(i,j); 
    end 
  end 
end      
toc 
4.테스트 와 분석

테스트 결 과 는 위의 그림 에서 보 듯 이 첫 번 째 시간 은 Matlab 자체 의 곱셈 연산 이 고 두 번 째 는 우리 가 원시 적 으로 실현 한 곱셈 계산 이 며 세 번 째 는 순환 중의 행렬 변환(열 우선 컴 파일 러 의 처리 에 적응)이다.
가장 중요 한 것 은 네 번 째 는 본인 이 창작 한 행렬 곱셈 방법 입 니 다.쉽게 말 하면 A 행렬 을 옮 긴 다음 에 해당 하 는 알고리즘 을 설계 하여 행렬 곱셈 연산 을 실현 하 는 것 입 니 다.이 점 에서 원 리 를 이해 하 는 기초 위 에서 독자 에 게 약간의 깨 우 침 을 줄 수 있 기 를 바란다.본 사례 에서 이렇게 하 는 효율 이 가장 높 은 이 유 는 본 사례 에서 원시 데이터 구조 가 나 에 게 이렇게 처리 하기에 적합 하기 때문이다.그 이 유 는 두 번 째 로 이렇게 하 는 목적 은 모든 키 곱셈 의 처리 에 있어 두 곱셈 이 있 는 메모리 공간 이 연속 이 아니 라 연속(주의:이것 은 본 고의 핵심 이 고 독자 들 이 이해 하면 반드시 수확 이 있 을 것 이 며 제 가 제시 한 절차 가 실현 되 는 것 을 진지 하 게 보 는 것 입 니 다.이것 은 핵심 입 니 다.모 르 는 것 은 사상 을 교류 할 수 있 습 니 다)!
또한 본 고 에서 제 가 제시 한 이 방법 은 행렬 곱셈 에서 가장 좋 은 방법 입 니 다.적어도 수학 논리 적 으로 는 이 렇 습 니 다.Matlab 자체 의 곱셈 계산 이 성능 이 좋 은 이 유 는 Matlab 자체 의 연산 이 모두 최적화 되 었 기 때 문 입 니 다.하드웨어 가속,시스템 가속 등 자체 디자인 의 응용 이 가속 방법 을 호출 할 수 있 기 때 문 입 니 다.
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기