matlab 병렬 연산 (병렬 컴 퓨 팅)

인터넷 에서 병행 계산 에 관 한 많은 것 을 찾 았 는데, 지금 나 는 나의 느낌 을 조금 정리 해 보 겠 다.
먼저 병렬 계산 과 분포 식 계산 을 구분 합 니 다.
나의 이 해 는 우리 컴퓨터 엔트로피 를 병행 계산 하 는 것 은 바로 몇 개의 스 레 드 를 더 켜 는 것 이다 (물론 다 핵심 컴퓨터 에서 효과 가 뚜렷 하 다).
분산 식 은 다 중 컴퓨터 협동 작업, 즉 하나의 호스트 가 server 로 job 를 분배 하고, 다른 job 를 받 은 client 는 호스트 의 요구 에 따라 계산 하여 결 과 를 서버 에 전달 합 니 다.
먼저 matlab pool 이라는 스 레 드 풀 (또는 matlab 의 작업 풀) 을 알 고 있 습 니 다. 원래 우 리 는 matlab 메 인 프로그램 만 시작 할 때 하나의 client 만 일 을 하고 있 었 습 니 다. 이 작업 풀 을 열 면 여러 개의 worker 를 연못 에 추가 하여 일 을 합 니 다.
먼저 영어 교과 과정 을 추천 합 니 다.http://people.sc.fsu.edu/~jburkardt/m_src/matlab_parallel/matlab_parallel.html  더 전면적 인 것 같 아 요.
parallel 은 로 컬 병렬 연산 이 라 고 불 립 니 다. 이 로 컬 병렬 연산 은 도구 상자 가 필요 합 니 다. MATLAB Parallel Computing Toolbox 의 지원 (방법 을 보고 ver 명령 을 입력 하면 볼 수 있 습 니 다)
물론 matlab 도 여러 대의 기계 로 분포 식 계산 을 지원 하 며 원 격 병렬 계산 이 라 고 불 린 다.위 공구 상자 외 에 도 MATLAB Distributed Computing Server 지원 이 필요 합 니 다.구체 적 으로 분포 식 에 관 한 계산 은 내 가 사용 하지 않 았 고 말 하지 않 았 다.이곳 에 서 는 주로 현지에서 병행 계산 하 는 방법 을 말한다.
환경: 적어도 MATLAB version 2008 a or later. 컴퓨터 의 가장 좋 은 핵심 수 는 1 보다 많 습 니 다. 그렇지 않 으 면 병렬 라 는 것 은 병발 일 뿐 입 니 다.
먼저 matlab 를 정상적으로 시작 합 니 다. 우리 가 시작 하 는 이 matlab 프로 세 스 는 client 라 고 부 릅 니 다. 잠시 후에 열 릴 여러 개의 lab (실험실, 우 리 는 우선 하위 프로 세 스 라 고 부 릅 니 다) 는 workers 라 고 부 릅 니 다.
그래서 병렬 연산 은 메 인 스 레 드 와 서브 스 레 드 의 임무 분배 와 집합의 실현 이다.이런 실현 과정 은 세 가지 기본 적 인 절차 가 필요 하 다.
1. 몇 명의 workers 를 만들어 야 합 니까?
2. 임 무 를 나 누 어 workers 에 게 배정 한다.
3. 통합 결과, workers 석방
이 과정 을 matlab 로 쓰 면 됩 니 다. (여기 matlaab pool 이 열 렸 을 때 자바. net. Unknown HostException 의 오 류 를 만 났 습 니 다. 본문 뒤에 해결 방안 을 제시 합 니 다.)
matlabpool open local 4
your_programme
matlabpool close
제한 은 4 라 는 것 을 기억 하 라. 가장 좋 은 것 은 몇 개의 핵심 이 있 으 면 몇 개 만 열 면 효율 이 높다 는 것 이다.
병렬 연산 의 가장 기본 적 인 용법 은 바로 parfor 순환 으로 for 순환 을 대체 하 는 것 이다. 이런 순환 은 몇 가지 설명 이 있다.
1. parfor 전 제 를 사용 하려 면 matlaab pool 을 켜 야 합 니 다. 그렇지 않 으 면 for 와 같 습 니 다.
2. parfor 는 for 처럼 다 층 으로 내 장 될 수 없습니다.
3. parfor 는 이전 순환 결과 와 관련 된 변 수 를 호출 할 수 없습니다. 그렇지 않 으 면 for 를 기다 릴 수 있 습 니 다.
total = 0.0;
        big = - Inf;
        for i = 1 : n
          total = total + x(i);
          big = max ( big, x(i) );
        end
for i = 1 : n
          angle = ( i - 1 ) * pi / ( n - 1 );
          t(i) = cos ( angle );
        end

위 에서 for 순환 을 parfor 로 바 꿀 수 있 습 니 다.
하지만 이전 순환 에 의존 한 결 과 는 parfor 로 바 꿀 수 없습니다.
그리고 break contine return 까지 이런 유형 은 parfor 를 사용 할 수 없습니다.
 dx = 0.25;
        x = zeros (1,n);
        for i = 2 : n
          x(i) = x(i-1) + dx;
        end

본인 의 검증 을 통 해 속 도 는 확실히 배로 올 랐 다.
이것 도 제 가 최근 에 '과학 연구' 를 할 때 겪 을 수 없 는 문제 입 니 다. 이미지 하 나 를 처리 하고 많은 알고리즘 을 사 용 했 습 니 다. 마지막 으로 종합 하여 3 분 동안 실 행 했 습 니 다. (당신 여동생) 은 이미 많은 최적화 방법 을 사 용 했 습 니 다. 그리고 스 레 드 로 최적화 되 었 습 니 다. 하하 30 분 동안 다른 사람과 똑 같 았 습 니 다.
------------------------------------------------------------------------
쓸데없는 소리 하지 마 세 요. 저 는 matlaab pool open 을 사용 할 때 문제 가 생 겼 습 니 다.
matlabpool Java exception occurred: java.net.UnknownHostException:  Your_Host_Name  at java.net.InetAddress.getLocalHost(Unknown Source)
나 는 구 글 에서 대련이공 의 BBS 에서 이 문제 의 해결 방법 을 찾 았 다 (http://bbs.dlut.edu.cn/nforum/article/LinuxUnix/54089): 사실은 local 호스트 이름 을 인식 할 수 없습니다. 저 희 는 보통 localhost 를 사용 합 니 다.
제 컴퓨터 는 Linux 64 비트 입 니 다. / etc / hosts 파일 에 로 컬 ip 과 호스트 이름 을 한 줄 추가 하면 됩 니 다. 위의 오류 알림 을 관찰 하 십시오. (Your Host Name 은 모든 컴퓨터 가 다 릅 니 다)
hosts 라 는 파일 에 만 추가 하면
4. 567913 이면 됩 니 다.예 를 들 어 제 힌트 는 Lab 001: Lab 001 입 니 다. 가입 하 겠 습 니 다.
127.0.0.1   Lab001
그리고 네트워크 를 다시 시작 하면 됩 니 다.
127.0.0.1   Your_Host_Name

좋은 웹페이지 즐겨찾기