디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.08.12 04:48:26
조회 107 추천 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 - -
AD 가전디지털, 신학기 페스타! 운영자 25/08/29 - -
2883549 Ai가 다 대체는 못함 [1] ♥냥덩Art♥갤로그로 이동합니다. 08.22 104 0
2883548 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥냥덩Art♥갤로그로 이동합니다. 08.22 80 0
2883547 공통파트 이동 제안들어왔는데 [1] 프갤러(211.44) 08.22 77 0
2883546 ada는 애초에 도태 언어임.. 타입 시스템도 정의하기 어렵고 문제고 [1] ㅆㅇㅆ(124.216) 08.22 93 0
2883545 rnd예산은 ai개발자나 그런 사람들이먹는거지 프갤러(106.102) 08.22 69 0
2883544 ada 사용처는 임베디드 말곤 없어보이는데 프갤러(218.154) 08.22 77 0
2883542 컴터공학은 공대도아님 - R&D 예산 늘리는것도 못먹음 [2] 프갤러(183.101) 08.22 87 2
2883541 오늘은 외주떄문에 바쁘다 [2] ㅆㅇㅆ(124.216) 08.22 95 0
2883540 R&D 보다 인문영역의 발달이 중요해 보인다- 프갤러(121.172) 08.22 63 0
2883539 고졸 이직 가능할까 프갤러(175.210) 08.22 179 0
2883538 nhn vs 쏘카 개발자 입장에서 [1] 프갤러(58.228) 08.22 125 0
2883537 golang Gin 마스터할까~ [4] 프갤러(106.101) 08.22 92 0
2883536 35살 직딩인데.. 이정도면 내 무기는 확실히 있는거지? [2] ㅇㅇ(118.235) 08.22 125 0
2883534 [SAP Korea] 2025 SAP CODE 아카데미 1기 모집 (~8 프갤러(14.32) 08.22 431 0
2883532 태어났는데 북쪽도 아니고 남쪽에서 태어남?? 씹 ㅅㅌㅊ??ㅋㅋㅋ 뒷통수한방(1.213) 08.22 64 0
2883531 오늘의 발명 실마리: 모니터 가상 분할 발명도둑잡기갤로그로 이동합니다. 08.22 66 0
2883529 대통령실 하정우미만은 잡 ㅇㅇ 뒷통수한방(1.213) 08.22 83 0
2883528 ㅇㅅㅇ ♥냥덩Art♥갤로그로 이동합니다. 08.22 71 0
2883526 고수님들 부탁이있어요 프갤러(112.145) 08.22 61 0
2883525 자기가 IME(입력기) 같은 걸 개발하면 Ada 언어를 나르시갤로그로 이동합니다. 08.22 61 0
2883524 [두산로보틱스] 로키부트캠프 AI·로봇 엔지니어 양성과정 6기 모집 (~ [1] 프갤러(14.32) 08.22 214 0
2883523 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥냥덩Art♥갤로그로 이동합니다. 08.22 62 0
2883522 X86의 인탤이 arm으로 ? ♥냥덩Art♥갤로그로 이동합니다. 08.22 77 0
2883521 Ada로 작성하면 코드수가 늘어납니다. 나르시갤로그로 이동합니다. 08.22 63 0
2883520 35살 이 스펙이면 어디가도 먹고사나? 무역경력은 5년차임 ㅇㅇ(58.229) 08.22 86 0
2883519 역대최고 R&d 예산인데 ??ㅋㅋㅋ내년에 또 늘어나는데?? [1] 뒷통수한방(1.213) 08.22 89 0
2883518 it 연봉작다는데 왜 자꾸 R&D예산 몇년째 늘어나는거임?? [4] 뒷통수한방(1.213) 08.22 112 0
2883517 Ada의 신뢰성과 안전성 관련된 글에 대한 생각- [2] 프갤러(121.172) 08.22 94 2
2883516 cefsharp으로 키오스크앱 만든적은 있음 [2] ㅇ.ㅇ(59.151) 08.22 92 0
2883515 러스트 왜 절름발이 언어인가? [5] 나르시갤로그로 이동합니다. 08.22 115 0
2883514 이민이 선택사항이라고 착각하는 애들 있다는게 충격 ♥냥덩Art♥갤로그로 이동합니다. 08.22 75 0
2883513 백자 달항아리 마주한 '케데헌' 감독 "아이디어가 떠오르네요" 발명도둑잡기갤로그로 이동합니다. 08.22 74 0
2883510 [애니뉴스] 1호 잡지 - 귀인환등초 오후우의 심층분석! 프갤러(121.172) 08.22 58 0
2883508 책 한권 읽는다고 인생이 달라지지 않구요. [1] ㅇㅇ(121.162) 08.22 78 0
2883506 Ada의 신뢰성과 안전성 나르시갤로그로 이동합니다. 08.22 90 0
2883505 세계에서 내로라 하는 인재들은 러스트가 아닌 c/c++ 나르시갤로그로 이동합니다. 08.22 61 0
2883504 어디가실것같나요?? [1] ㅇㅇ(39.7) 08.22 85 0
2883503 금요일은 자체 휴가냐? [1] ㅇㅇ(211.234) 08.22 76 0
2883502 윈폼이나 WPF에 [3] 루도그담당(211.184) 08.22 92 0
2883501 만 3년차 백엔드 조언 구함 [3] 프갤러(218.239) 08.22 118 0
2883500 그녹 개씨발련아 찢어죽이고싶네 씨발련 [1] ㅇㅇ(59.17) 08.22 98 0
2883496 외국년 소주먹이고 반응 ㅇㅇ(58.229) 08.22 85 0
2883494 이상하게.. ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 08.22 46 0
2883491 제조업 종특인가? 씨샾 닷넷 많이쓰네 [2] 프갤러(119.195) 08.22 118 0
2883479 어느 공원 ㅇㅅㅇ [2] 헤르 미온느갤로그로 이동합니다. 08.22 69 0
2883477 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 08.22 58 0
2883476 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 08.22 86 0
2883475 세계에서 내노라 하는 인재들은 러스트 잘 쓰고 있습니다. 프갤러(27.166) 08.22 56 0
2883474 제미나이 프롬프트 숨기는 크롬 확장 프로그램 만들었다 ㅇㅇ(112.140) 08.22 71 0
2883473 인지과학조져라 손발이시립디다갤로그로 이동합니다. 08.22 65 0
뉴스 Honor Flow Productions∙KORB∙오아, 8월 4주 차 위클리 키트앨범 스포트라이트 선정! 일상을 채우는 음악! 디시트렌드 08.29
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2