디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.08.12 04:48:26
조회 154 추천 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/11/03 - -
AD 저녁 뭐먹지? 오늘의 메뉴 추천! 운영자 25/10/31 - -
2884067 만 3년 프론트 이직성공 [4] 프갤러(123.109) 08.24 374 0
2884066 아니야.. 아니야.. 이게 아니야.. ♥지나가던냥덩이♥갤로그로 이동합니다. 08.24 98 0
2884065 나님이 글케 기여운가.. ㅇㅅㅇ 꼬치의달인갤로그로 이동합니다. 08.24 131 0
2884064 편식하지마 세상은 냉정해 프갤러(61.79) 08.24 120 0
2884059 나님 번아웃.. ♥지나가던냥덩이♥갤로그로 이동합니다. 08.24 169 0
2884058 유퀴즈에 빌게이츠 왜나옴? [3] ㅇㅇ(106.102) 08.24 206 0
2884057 데이터 확인하니 명확해짐 ♥지나가던냥덩이♥갤로그로 이동합니다. 08.24 167 0
2884056 나도 탈갤하고 뉴프로 간다! [1] 헬마스터갤로그로 이동합니다. 08.24 144 1
2884055 하 씨발 탈갤한다 [2] 아스카영원히사랑해갤로그로 이동합니다. 08.24 170 1
2884054 지난 밤 귀뚤맨한테 습격 당해서 잠 제대로 못 잣더니 몸상태 메롱 ♥지나가던냥덩이♥갤로그로 이동합니다. 08.24 144 0
2884049 [대한민국] 원칙보다 돈을 우선할 것인가? 이재명 세력의 의도 파악- 프갤러(121.172) 08.24 110 0
2884043 LLM 코드 쓰면서 느끼는데 LLM코드는 너무 장황하다 ㅆㅇㅆ(124.216) 08.24 123 0
2884041 충격.. ♥지나가던냥덩이♥갤로그로 이동합니다. 08.24 142 0
2884040 그리고 러스트 코드는 LLM으로 생산이 힘듬. 그래서 구려. ㅆㅇㅆ(124.216) 08.24 109 0
2884039 러스트가 생산성을 가질려면 보안/신뢰성 관점에서 가지는거지. ㅆㅇㅆ(124.216) 08.24 174 0
2884038 무라사키 ㄷㅅㄷ ♥지나가던냥덩이♥갤로그로 이동합니다. 08.24 148 0
2884037 오늘의 발명 실마리: 노트북 정보를 hdmi로 출력하는 장치 발명도둑잡기갤로그로 이동합니다. 08.24 156 0
2884036 러스트 웹 프레임워크, axum이 있다. [1] 프갤러(42.22) 08.24 142 0
2884035 그냥 러스트 해라 shave6300(175.201) 08.24 122 0
2884033 러스트는 전혀 비용 효율적인 언어가 아님 [2] ㅆㅇㅆ(124.216) 08.24 172 0
2884032 사장은 자바 좋아함 [1] 프갤러(223.63) 08.24 191 0
2884031 누가 냥덩이 빨아주는거야? [2] ♥지나가던냥덩이♥갤로그로 이동합니다. 08.24 139 0
2884030 러스트는 사장이 좋아한다 [2] shave6300(175.201) 08.24 170 0
2884024 츄릅 츄릅 츄베릅❤+ [1] ♥지나가던냥덩이♥갤로그로 이동합니다. 08.24 160 0
2884019 황현수 각축의 인생..ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 08.24 115 0
2884018 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 08.24 120 0
2884017 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 08.24 115 0
2884016 속보)북한 휴전선 침범, 국군 하사 사망 ♥지나가던냥덩이♥갤로그로 이동합니다. 08.24 133 0
2884015 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥지나가던냥덩이♥갤로그로 이동합니다. 08.24 111 0
2884010 바닷가에서 비키니가 벗겨진 채 윤간되는 야가미 마키노를 발견하면 어떻게 hymen갤로그로 이동합니다. 08.24 138 0
2884009 인지과학조져라 손발이시립디다갤로그로 이동합니다. 08.24 123 0
2884006 이젠 신분증 발급시에도 정신 똑바로 차려야함 [1] 야옹아저씨갤로그로 이동합니다. 08.24 149 0
2884005 웹개발자 프리로 뛰다 일끊겨서 부모 살해함ㄷㄷ [1] 프갤러(211.203) 08.24 217 0
2884002 C# 자바를 사용하지 말아야 하는 이유. 프갤러(59.16) 08.24 164 0
2883994 XP 이제 놓아 주자. 프갤러(59.16) 08.24 122 0
2883992 이번에 나무위키에 뭐 관리자 짤리고 했다고 난리나서 봤는데 ㅆㅇㅆ(124.216) 08.24 164 0
2883990 cmake에 감사합니다. [6] 프갤러(49.165) 08.24 162 0
2883988 슬슬 자야긋다 ㅆㅇㅆ(124.216) 08.24 97 0
2883978 음기 충전 발명도둑잡기갤로그로 이동합니다. 08.24 167 0
2883976 엡손삼보, 대우 워드프로세서 기기 발명도둑잡기갤로그로 이동합니다. 08.24 133 0
2883975 뉴프로 초대링크 기능안내 [2] 헬마스터갤로그로 이동합니다. 08.24 128 0
2883974 커널 공부나 해야지 루도그담당(58.239) 08.24 129 0
2883971 냥덩이 이제 꿀잠⭐+잘게양 ㅂㅂ [2] ♥지나가던냥덩이♥갤로그로 이동합니다. 08.24 161 0
2883970 나님 다 기억해 이제 너희 차례야.. ♥지나가던냥덩이♥갤로그로 이동합니다. 08.24 133 0
2883969 나님 귀뚤맨 다 잡은듯? ♥지나가던냥덩이♥갤로그로 이동합니다. 08.24 147 0
2883968 빨리 겨울이 오길.. ♥지나가던냥덩이♥갤로그로 이동합니다. 08.24 141 0
2883965 비엣남 다낭 1주일차 당최 할게없노 ㅇㅅㅇ... 뭐하는거지 [1] ㅇㅇ(121.140) 08.24 131 0
2883958 이 조그만한 녀석.. 울림통이 제법.. 덤프트럭 소리나넹.. ♥지나가던냥덩이♥갤로그로 이동합니다. 08.24 138 0
2883957 큰일이야.. 졸려서 눈이 침침해지기 시작햇어 ♥지나가던냥덩이♥갤로그로 이동합니다. 08.24 157 0
2883954 이새끼 더 크개 울기 시작햇어.. ♥지나가던냥덩이♥갤로그로 이동합니다. 08.24 125 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2