디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

Ada 프로그래밍: 4.2.5 병렬 루프 (Ada 2022)

나르시갤로그로 이동합니다. 2025.08.12 04:48:26
조회 104 추천 0 댓글 0

4.2.5 병렬 루프 (Ada 2022)

Ada 2022는 병렬 루프를 도입하여, for 루프의 반복들이 여러 논리적 제어 스레드에 의해 동시에 실행될 수 있게 합니다. 이 기능은 루프의 작업 부하를 분산시켜 멀티코어 프로세서에서 계산 집약적인 작업의 성능을 크게 향상시킬 수 있습니다.

구현 참고: 병렬 루프 기능은 Ada 2022 표준에 추가된 사항입니다. GCC 15 기준으로, GNAT 컴파일러는 아직 parallel키워드를 지원하지 않습니다. 따라서 다음 구문과 예제들은 Ada 2022 명세에 기반한 것이며, 현재의 GNAT 버전으로는 컴파일되지 않을 수 있습니다.

병렬 루프는 표준 for 루프 구문 앞에 오는 parallel 키워드로 표시됩니다. 런타임 시스템은 루프의 반복들을 하나 이상의 청크(chunk)로 분할하며, 각 청크는 별도의 논리적 스레드에 의해 처리됩니다. 어떤 형태의 병렬 루프에서도 reverse 키워드는 허용되지 않는다는 점에 유의해야 합니다.

Ada 2022는 세 가지 주요 형태의 병렬 반복을 정의합니다.

1. 이산 범위에 대한 병렬 for 루프

이것은 병렬 루프의 가장 직접적인 형태로, 이산 범위(예: 정수 또는 열거형 범위)에 대한 반복이 병렬화됩니다.

구문:

parallel for loop_parameter in discrete_subtype_definition loop
  -- 일련의 문장들
end loop;

예제:

-- 각 인덱스에 대한 독립적인 계산을 병렬로 수행
parallel for i in 1 .. 100 loop
  process_data (i);
end loop;

2. 배열 및 컨테이너를 위한 병렬 반복자

이 형태는 배열의 원소나 병렬 반복자 인터페이스를 제공하는 모든 컨테이너 타입(특히, Ada.Iterator_Interfaces.Parallel_Iterator에서 파생된 타입)에 대한 병렬 반복을 허용합니다.

구문:

parallel for element of Iterable_Container loop
  -- 일련의 문장들
end loop;

예제 (병렬 컴포넌트 반복): 이 예제는 2차원 배열의 각 원소를 병렬로 두 배로 만듭니다.

-- Board는 Float 타입의 2차원 배열
parallel for element of Board loop
  element := element * 2.0;
end loop;

3. 병렬 절차적 반복자

이 고급 형태는 프로시저를 사용하여 반복을 제어합니다. 지정된 프로시저가 Parallel_Iterator => True 애스펙트를 가지고 있다면 루프는 병렬화됩니다. 이는 프로시저 자체가 여러 스레드에서 루프 본문을 안전하게 호출하도록 설계되었음을 나타냅니다.

구문:

parallel for (parameters) of Iterator_Procedure loop
  -- 일련의 문장들
end loop;

청크 명세 (Chunk Specification)

프로그래머는 chunk_specification을 제공하여 작업 부하가 어떻게 분할되는지에 영향을 줄 수 있습니다. 이는 병렬 실행의 세분성을 미세 조정할 수 있게 합니다. 청크를 명시하는 두 가지 방법이 있습니다.

  1. 최대 개수로: 정수 표현식이 최대 청크 수를 정의합니다.
  2. 청크 서브타입으로: 이산 서브타입이 청크의 집합을 정의합니다. 이 형태는 또한 루프 내에서 특정 청크를 식별하는 데 사용할 수 있는 청크 파라미터를 암묵적으로 선언하여, 결과를 분할하는 데 유용합니다.

예제 (서브타입을 사용한 청크 명세): 이 루프는 최대 8개의 청크를 사용하여 부분 계산을 병렬로 수행합니다. Chunk_Number 타입의 Chunk 파라미터는 루프 내에서 어떤 스레드가 데이터의 어느 부분을 작업하고 있는지 구별하는 데 사용할 수 있습니다.

declare
  subtype Chunk_Number is Natural range 1 .. 8;
  partial_sum : array (Chunk_Number) of Natural := (others => 0);
  grid        : array (1 .. 1_000) of Boolean;
  -- ... grid가 초기화됨
begin
  parallel (chunk in Chunk_Number)
  for i in grid'range loop
    if grid(i) then
      -- 이 연산은 스레드-안전해야 함. 예제는 간결함을 위해 '@'를 사용했지만,
      -- 실제 구현에서는 스레드-안전한 업데이트를 위해 원자적 연산이나
      -- 보호 객체가 필요할 것임
      partial_sum(chunk) := @ + 1;
    end if;
  end loop;
  -- ... partial_sum으로부터 최종 결과를 집계
end;



https://nimfsoft.art/ko/books/ada-programming/#425-%EB%B3%91%EB%A0%AC-%EB%A3%A8%ED%94%84-ada-2022

 



추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 존재만으로도 웃음주는 최고의 '웃수저' 스타는? 운영자 25/08/25 - -
이슈 느린 여행으로 삶의 속도를 찾는 유튜버 꾸준 운영자 25/08/26 - -
AD MD's pick 상반기 인기 노트북 운영자 25/08/26 - -
2885109 이 사람들이 아침에 잠잠하냐? [1] 넥도리아(223.38) 10:44 35 0
2885108 나 루리웹에서 겁나 뛴다고 욕하던데 넥도리아(223.38) 10:35 20 0
2885107 비뇨기과가는길... 넥도리아(223.38) 10:30 22 0
2885106 UX는 어떻게 설정해야 유저의 이목이 뜰까 [1] ㅆㅇㅆ(124.216) 10:29 23 0
2885105 몸살 한번 걸리고나니, 너무 건강하고 싶은데 어떻게 하면 되냐?? [2] ㅇㅇ(223.38) 10:24 25 0
2885104 저희집 옥상방수공사 하고 있으세요. 넥도리아(222.233) 10:22 14 0
2885103 그건 말할 수 없다냥! ♥냥덩이♥갤로그로 이동합니다. 10:07 38 1
2885102 죄명이 한국에서처럼 거짓말치면 통할줄 알았나봄 ㅋㅅㅋ ♥냥덩이♥갤로그로 이동합니다. 09:57 26 0
2885101 찢재명 덮기 위해 눈돌리기용 ♥냥덩이♥갤로그로 이동합니다. 09:55 17 0
2885100 러스트는 설계 결함 및 버그를 숨기기 위해 가스라이팅을 합니다. 나르시갤로그로 이동합니다. 09:49 30 0
2885099 공장이 화이트칼라상위 직장이될날이 머지않았군 네오커헠(121.157) 09:48 38 0
2885097 러스트의 심각한 결점 / 버그 나르시갤로그로 이동합니다. 09:46 28 0
2885096 나도 러스트 접기로 했다 나르시갤로그로 이동합니다. 09:44 30 0
2885095 나님 등장 프갤러(49.174) 09:43 15 0
2885094 나도 .. 하기로 했다..ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 09:27 17 0
2885093 그냥월급쟁이계속할라면 FA윈폼질이 제일인듯 네오커헠(121.157) 09:27 50 0
2885092 c# 을 써야한다 [3] ㅇㅇ(211.193) 09:21 39 0
2885091 나도 러스트 접기로했다 [4] 헬마스터갤로그로 이동합니다. 09:13 52 0
2885090 애플 이벤트 D - 13 헤르 미온느갤로그로 이동합니다. 09:12 19 0
2885088 태연 ㅇㅅㅇ [1] 헤르 미온느갤로그로 이동합니다. 09:03 23 0
2885087 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 09:00 24 0
2885086 나 대기업 프리 4년차인데. [1] 찍먹갤로그로 이동합니다. 08:40 52 0
2885085 프갤러들 중에서 키 180 넘는 [10] 루도그담당(58.239) 08:32 63 0
2885084 러스트 지금 생각해보면 게거품인거 같음 프갤러(223.57) 07:59 34 0
2885071 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥냥덩이♥갤로그로 이동합니다. 05:57 24 0
2885056 개발 블로그 같은거 쓰는거 생각해보니 좀 대단한데 프갤러(106.241) 03:59 51 0
2885055 헌혈 하면 안되는 이유.jpg [5] 야옹아저씨갤로그로 이동합니다. 03:45 75 5
2885047 카톡 10대 인기 이모티콘이 임신했어요인 이유 [1] 발명도둑잡기갤로그로 이동합니다. 01:37 63 0
2885037 12시 이후엔 위워크에 사람이 없어서 [1] 꼬치의달인갤로그로 이동합니다. 00:47 63 0
2885036 괴변 후유증이 아물질않아요. gy갤로그로 이동합니다. 00:46 52 0
2885032 몸살 한번 걸리고나니, 너무 건강하고 싶은데 어떻게 하면 되냐?? ㅇㅇ(125.136) 00:04 39 0
2885031 머기업 서류 통과하고 과제 합격했음 [2] 꼬치의달인갤로그로 이동합니다. 08.27 111 0
2885030 나님 탈갤합니당☘+ [1] ♥냥덩이♥갤로그로 이동합니다. 08.27 59 0
2885029 커널 조작해서 [4] 루도그담당(58.239) 08.27 70 0
2885028 냥뎡이 너 오늘 뉴스에 나왔더라? [1] ㅇㅇ(223.38) 08.27 74 0
2885023 나님은 찐따야.. ♥냥덩이♥갤로그로 이동합니다. 08.27 42 0
2885022 러스트 60년 갈아넣으면 삼라만상을 깨우치고 신선이 될 수 있다. 프갤러(110.8) 08.27 47 0
2885017 멸공의칼날 결말.. [1] ♥냥덩이♥갤로그로 이동합니다. 08.27 60 0
2885015 술, 담배를 안하는게 생각보다 인생에 중요하다고 생각한다. [1] ㅇㅇ(221.155) 08.27 64 0
2885013 러스트 인생 40 년 갈아 넣었습니다. 프갤러(59.16) 08.27 36 0
2885010 저장용 ♥냥덩이♥갤로그로 이동합니다. 08.27 30 0
2885008 백준 문제 어케하면 잘풀수있음? [2] ㅇㅇ(220.80) 08.27 68 0
2885003 Hex Editor만 가지고 바이너리 분석하는 방법 정리해봄 [11] Butter(1.235) 08.27 89 1
2884998 마귀의 농간이라고밖에 못할 악재가 산더미였어요. gy갤로그로 이동합니다. 08.27 19 0
2884997 아스카의 1억 모으기 프로젝트는 계속 진행됩니다 [2] 아스카영원히사랑해갤로그로 이동합니다. 08.27 46 0
2884990 폰노의만의 저주 [2] ㅇㅇ(125.179) 08.27 69 1
2884989 누가 나님 냥덩이 만진거야? ♥냥덩이♥갤로그로 이동합니다. 08.27 67 0
2884988 언어별 철학.txt [3] 프갤러(106.101) 08.27 109 1
2884986 13년의 악재만 아니면 파탄까진 안갔겠는데요. gy갤로그로 이동합니다. 08.27 24 0
2884985 바이브코딩한거 결국 유지보수가 안되는데 riir하고 싶다. 프갤러(27.163) 08.27 33 0
뉴스 美 팝스타 스위프트 약혼한다… NFL선수 켈시와 동화 같은 결말 디시트렌드 10:00
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2