디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.08.12 04:48:26
조회 92 추천 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/18 - -
AD 전자제품 세일쇼! 운영자 25/08/19 - -
2882411 극좌재명 또 정통성 열등감에 자화자찬 세금낭비 무리수 ♥냥덩이♥갤로그로 이동합니다. 08.18 19 0
2882410 친중매국당 극좌청래 대한민국 부정 역사내란 일으켜 파문 [1] ♥냥덩이♥갤로그로 이동합니다. 08.18 21 0
2882408 다들 c언어 배워서 어디에 활용함? [5] ㅇㅇ갤로그로 이동합니다. 08.18 51 0
2882407 이은주, 어느덧 20주기…여전히 그립네 [1] 발명도둑잡기갤로그로 이동합니다. 08.18 23 0
2882406 멍유에게 속아 인생이 끝나버린 류류.. [1] ♥냥덩이♥갤로그로 이동합니다. 08.18 41 0
2882405 이동건 동생 호주서 피살, '단지 째려봤다고 사람을 죽이나?' 발명도둑잡기갤로그로 이동합니다. 08.18 21 0
2882403 OTL ♥냥덩이♥갤로그로 이동합니다. 08.18 17 0
2882402 C++ 와 자바의 문법 차이. [1] 프갤러(59.16) 08.18 35 0
2882401 차단 [1] 발명도둑잡기갤로그로 이동합니다. 08.18 27 0
2882399 방금 전 010-6585-571? 한테 전화가 와 받아보니 발명도둑잡기(118.235) 08.18 32 0
2882398 죄명이 재앙이한테 꼬랑지 내림 ㅇㅅㅇ ♥냥덩이♥갤로그로 이동합니다. 08.18 21 0
2882397 ㅂㅏ이브냥덩 편하당 편행 ♥냥덩이♥갤로그로 이동합니다. 08.18 18 0
2882396 스마트포인터 잘 안 쓰게 됌 [1] 루도그담당(118.235) 08.18 29 0
2882395 ㅇㅏ헤가오❤+ ♥냥덩이♥갤로그로 이동합니다. 08.18 25 0
2882394 피궁하구낭 애널 꿀잠각 ♥냥덩이♥갤로그로 이동합니다. 08.18 20 0
2882393 애초에 사람 대가리에 들어갈 수 있는 구현이란게 한계가 있음. [3] ㅆㅇㅆ(124.216) 08.18 38 0
2882392 C++ 어느정도 해야고수냐고 [6] 루도그담당(118.235) 08.18 62 0
2882391 나도 예전에는 구현 하나하나 외울랬거든? 근데 그거 의미없더라 [2] ㅆㅇㅆ(124.216) 08.18 48 0
2882390 친중매국당 지지율 폭락 ㅋㅅㅋ ♥냥덩이♥갤로그로 이동합니다. 08.18 25 0
2882389 이런말하면 그런데 동아시안 전반적으로 미개하다. 인터넷 문화가 ㅆㅇㅆ(124.216) 08.18 22 0
2882388 쳇지피티에 요즘 질문하면 코드 다 짜주지않음? [6] ㅇㅇ(121.128) 08.18 49 0
2882387 좆본뉴스보는데 좆본은 성상납이 기본이고 ㅋㅋㅋ [4] ㅆㅇㅆ(124.216) 08.18 44 0
2882386 한국 법 조까 [3] 주아갤로그로 이동합니다. 08.18 39 0
2882384 C++ 어느정도는 해야 고수냐 루도그담당(118.235) 08.18 28 0
2882383 최약 여주가 희롱당하는 야겜으만들고 십구나 [1] 주아갤로그로 이동합니다. 08.18 30 0
2882382 엑셀 갑자기 안뜨는 경우는 왜그럼? 프갤러(221.145) 08.18 14 0
2882381 윽액윽윽액 야겜 만들 시간을 달라 [4] 주아갤로그로 이동합니다. 08.18 29 0
2882380 Api 만든 애들 자체는 고맙지만 [4] 루도그담당(118.235) 08.18 53 0
2882379 야겜을 만들고 싶구나 [4] 주아갤로그로 이동합니다. 08.18 30 0
2882378 자동매매 설계해보면 해보면 API 설계 진짜 개좆같구나 느낌 [4] ㅆㅇㅆ(124.216) 08.18 52 0
2882377 입시비리 범죄자 극좌 조국 빤스런 ㅋㅅㅋ ♥냥덩이♥갤로그로 이동합니다. 08.18 19 0
2882376 좇센 커뮤 눈팅하면 인간의 특성 특히 좇센징에 대해서 연구할수있음 뒷통수한방(1.213) 08.18 17 0
2882375 단순 SQL이 아니라 API면 권한,토큰 인증이랑 제한 수치도 [3] ㅆㅇㅆ(124.216) 08.18 51 0
2882374 숨고에서 외주는 외주 등록말고도 코딩/레슨 서비스에도 등록해야함 [8] ㅆㅇㅆ(124.216) 08.18 42 0
2882373 우유먹자 주마다 1잔 넥도리아(223.38) 08.18 32 0
2882372 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥냥덩이♥갤로그로 이동합니다. 08.18 17 0
2882369 완공되면 엄청 좋을듯 경강선 넥도리아(222.233) 08.18 27 0
2882368 C++ 복기중이시다 루도그담당(118.235) 08.18 32 0
2882367 SQL 구축된거 API로 바꾸는게 왜 비싼건질 모르겠다 [4] 프갤러(59.25) 08.18 54 0
2882365 제조 it는 별론가 프갤러(39.7) 08.18 33 0
2882364 흠 앞으로 CS지식으로 가득찬 프갤을 재건해야겠군 [3] 네오커헠(1.237) 08.18 97 1
2882363 다이소 니퍼 수준 [1] 뒷통수한방(1.213) 08.18 36 0
2882362 넥도리아 김건희 특검사무실에 갈까 생각중... 넥도리아(119.195) 08.18 23 0
2882361 나님 구질구질한 사람 싫어함 ♥냥덩이♥갤로그로 이동합니다. 08.18 24 0
2882359 수면시간 부족하니 머리아푸넹;; ♥냥덩이♥갤로그로 이동합니다. 08.18 23 0
2882358 나 메이플할시간에공부하면 자기보다성공할거같다고 디코대화내역삭제당함 공기역학갤로그로 이동합니다. 08.18 34 0
2882357 OS커널구조는 임베디드개발자 에겐 익숙한 개념이네 네오커헠(1.237) 08.18 59 0
2882356 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥냥덩이♥갤로그로 이동합니다. 08.18 22 0
2882355 조언좀.. [1] ㅇㅇ(223.38) 08.18 47 0
2882354 흠 나는 로컬통신 네임드파이프+메시지팩으로하는데 네오커헠(1.237) 08.18 55 0
뉴스 신기루, '런닝맨' 출연! 엉뚱 매력 大폭발 “나는 대식가가 아니라 다식가” 디시트렌드 08.18
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2