hotchpotch/wikipedia-multilingual-ir-related-paragraph-pairs huggingface dataset:
영국 총리의 역사
Section: 동등한 자들 중 첫째

벤저민 디즈레일리와 윌리엄 유어트 글래드스턴은 대중에게 자신들의 "이미지"를 투영함으로써 이 새로운 역할을 더욱 발전시켰다. "디지"와 "위대한 노인"이라는 별명으로 알려진 그들은 제국주의 대 반제국주의, 선거권 확대, 노동 개혁, 아일랜드 자치 운동 등 그 시대의 쟁점에 대한 다채롭고 때로는 격렬한 개인적, 정치적 경쟁을 1881년 디즈레일리 사망까지 거의 20년 동안 지속했다. 페니 프레스, 사진, 정치 만화에 의해 기록된 그들의 경쟁은 특정 인물과 총리직을 대중의 마음속에 연결시켰고 그 위상을 더욱 높였다.

종종 "모범 총리"라고 불리는 로버트 필은 이 새로운 역할을 처음으로 인식했다. 1841년 보수당의 성공적인 선거 운동 후, J. W. 크로커는 필에게 보낸 편지에서 "선거는 경이롭고, 흥미로운 점은 모든 것이 로버트 필 경의 이름에 달려 있다는 것이다. 우리 역사상 국민이 군주를 위해 첫 번째 장관을 선택한 것은 내가 기억하는 한 처음이다. 84년의 피트 경의 사례가 가장 가깝지만, 그때는 국민이 군주의 선택을 확인했을 뿐이었다. 여기서는 모든 보수당 후보가 자신을 로버트 필 경의 사람이라고 명확하게 공언했으며, 그 이유로 선출되었다"고 말했다.
영국 총리의 역사
Section: 그레이트브리튼 아일랜드 연합, 1801년

1918년 영국 총선에서, 아일랜드의 결과는 신 페인이라는 아일랜드 공화주의 정당의 압승을 보여주었고, 이 정당은 선언문에서 독립 아일랜드 공화국을 수립할 것을 맹세했다. 이에 따라 신 페인 의원들은 외견상 하원에 앉도록 선출되었음에도 불구하고, 웨스트민스터에 자리를 차지하는 것을 거부하고, 대신 1919년에 모여 아일랜드 독립을 선언하고 독립 아일랜드 공화국을 위한 혁명적인 단원제 의회인 달 에런을 구성했으며, 이는 차례로 자체 정부인 달 에런 내각을 수립했다. 동시에, 달 에런의 통제를 받게 된 아일랜드 의용군은 아일랜드 공화국군으로 알려지게 되었고 아일랜드 독립 전쟁에서 영국 국가군에 맞서 싸웠다. 1920년까지 아일랜드 공화국군과 아일랜드 공화국 경찰은 아일랜드의 32개 주 중 21개 주에 주둔했으며, 영국의 권한은 도시 지역에서만 행사되었다. 따라서 1919년 아일랜드 공화국이 공식적으로 선포될 때와 1920년 아일랜드가 효과적으로 장악될 때 모두 총리였던 데이비드 로이드 조지는 영국과 아일랜드 전체에서 효과적인 권한을 행사한 마지막 총리였다.

1798년 아일랜드 반란 이후, 영국 총리 윌리엄 피트는 아일랜드 민족주의 증가에 대한 해결책이 그레이트브리튼 왕국과 아일랜드 왕국의 연합이라고 믿었다. 영국은 당시 잉글랜드 웨일스와 스코틀랜드를 포함했지만, 아일랜드는 자체 의회와 정부를 가지고 있었으며, 이는 확고히 앵글로-아일랜드인으로 구성되어 대부분의 아일랜드인의 열망을 대변하지 못했다. 이러한 이유 등으로 피트는 자신의 정책을 추진했고, 1782년 헌법 하에서 아일랜드에 대한 통제권을 포기하도록 아일랜드 정치 계층을 설득하는 데 다소 어려움을 겪은 후, 1800년 연합법에 의해 새로운 연합이 만들어졌다. 1801년 1월 1일부터 그레이트브리튼과 아일랜드는 단일 왕국인 그레이트브리튼 아일랜드 연합왕국으로 통합되었고, 아일랜드 의회는 폐지되었으며, 1922년까지 영국 장관들은 영국 제도 내 세 왕국 모두에 책임이 있었다.
일본-필리핀 관계
Section: 문헌

Trinidad, Dennis D. "Domestic Factors and Strategic Partnership: Redefining Philippines‐Japan Relations in the 21st Century." Asian Politics & Policy 9.4 (2017): 613–635. online

Samonte, Elena (1991). 《Philippine-Japan national perceptions from the 1900s to the present: A socio-psychological analysis》 (PDF). 《Asian Studies》 29 (Asian Center, 필리핀 대학교 딜리만).
일본-필리핀 관계
Section: 1986년 이후

코라손 아키노 필리핀 대통령은 1986년 11월 일본을 방문하여 쇼와 천황을 만났고, 천황은 제2차 세계 대전 중 일본이 저지른 잘못에 대해 사과했다. 이 방문 기간 동안 새로운 해외 원조 협정도 체결되었다. 아키노는 1989년 쇼와 천황의 장례식과 1990년 아키히토 천황 즉위식에 참석하기 위해 일본을 다시 방문했다.

일본은 1980년대에도 주요 개발 자금, 무역, 투자, 관광의 원천으로 남아 있었으며, 양국 간에는 외교 정책 분쟁이 거의 없었다.

코라손 아키노 필리핀 대통령의 행정부가 피플 파워 혁명의 결과로 수립되었을 때, 일본은 새로운 필리핀 정부에 지지를 표명한 첫 번째 국가 중 하나였다.
일본-필리핀 관계
Section: 초기 역사

2009년, 스미토모 재단이 후원하는 볼존 고고학 프로젝트에 참여한 산 카를로스 대학교와 필리핀 국립 박물관의 일본 및 필리핀 고고학자들은 1700년대 초부터 존재했던 것으로 추정되는 고대 일본 도자기를 발견했다. 그곳에서 발견된 고대 일본 도자기는 일본과 세부주 필리핀 섬 사이에 16세기부터 무역 활동이 있었다는 것을 증명한다.

17세기(1633년 및 1635년)에 일본은 고립주의(사코쿠) 정책을 수립했고, 양국 간의 접촉은 1854년 일본의 개항 이후까지 단절되었다. 16세기와 17세기에 수천 명의 일본인 무역업자들도 필리핀으로 이주하여 현지 인구에 동화되었다. 1888년, 필리핀의 민족 영웅 호세 리살은 일본에 도착하여 사무라이의 딸인 우스이 세이코(오세이산)와 관계를 맺었다.
대만-조선민주주의인민공화국 관계
Section: 냉전 이후

유엔 비회원국인 중화민국은 대북 유엔 제재에 구속되지 않는다. 그러나 중화민국 정부는 대북 무역에 대한 유엔 및 미국의 제재를 반영하는 여러 법률 및 규제를 시행했다.

2016년 조선민주주의인민공화국이 중화민국에 잠수함 설계를 판매하려 했다는 보도가 있었다. 중화민국 국방부는 "우리의 잠수함 개발에 조선민주주의인민공화국과의 접촉은 없었고, 지금도 없으며 앞으로도 없을 것이다. 모든 지원은 유럽과 미국의 중요한 국가들로부터 제공된다"고 부인했다.

조선민주주의인민공화국은 1987년 일본 본토에서 션징위라는 이름의 대만 여성을 납치하여 조선민주주의인민공화국으로 데려갔다.

라이칭더 중화민국 행정원장은 2017년 9월 중화민국과 조선민주주의인민공화국 간의 전면적인 무역 금지를 승인했다. 대만 사업가들은 조선민주주의인민공화국에 석탄, 석유, 가스를 판매하고 북한산 섬유를 수입하며 대만 어선에 북한인들을 고용했다는 혐의를 받았다.
중화민국-필리핀 관계
Section: 분쟁

2007년 12월 23일, 대만 타임즈가 첸 훙위가 작성한 "대만이 바타네스주에 대한 영유권을 주장한다"는 기사를 게재하면서 필리핀과 대만 간의 갈등이 시작되었다. 이 기사는 필리핀이 자국 최북단 지방에 대해 "취약한 주장"을 하고 있다고 주장했으며, 필리핀이 이를 통제하고 있다고 언급했다. 이 기사는 또한 대만 정부가 1783년 스페인령 필리핀이 처음 주장하고 나중에 18세기에 어떤 국가의 반대 없이 필리핀에 통합 및 관리된 필리핀 통제 섬들을 점령할 것을 권장했다.

2013년 5월 9일, 대만 선박이 필리핀 측의 여러 차례 철수 요청에도 불구하고 필리핀에 더 가까운 수역을 떠나기를 거부했다. 이 대치 상황으로 인해 필리핀 해안경비대가 대만 어선에 발포하여 어부 1명이 사망했다. 사건 후 필리핀 정부는 총격이 자국 영해에서 발생했다고 주장했다. 이 사건 이후 대만은 필리핀에 제재를 가했으며, 여기에는 필리핀인 고용 동결이 포함되었다. 대만 해안경비대는 이후 해당 수역에서 주기적인 순찰을 실시했으며, 필리핀 해안경비대도 순찰대를 파견했다. 8월 7일, 필리핀 당국은 관련된 해안경비대원들에 대해 살인 혐의를 권고했다. 8월 8일, 양측 관계를 정상화하기 위해 필리핀 특사가 피해자 가족에게 사과했고, 이에 따라 대만은 제재를 해제했다.
중화민국-필리핀 관계
Section: 양자 관계

필리핀인들은 관광 및 사업 목적으로 대만 입국 시 14일까지 비자 면제를 누린다. 이는 2017년 11월 1일에 발효되었고 2018년 7월 31일에 만료될 예정이었으나 2019년 7월 31일까지 연장되었다. 이전에 필리핀인들은 대만 여행 전에 여행 허가증이나 전자 비자를 확보해야 했다. 반면 대만 방문객들은 MECO를 통해 필리핀 여행 전에 전자 비자를 확보해야 한다.

2023년 필리핀의 야당 상원의원 리사 혼티베로스는 대만을 방문하여 대만 총통과 만나 양국의 양자 관계를 재확인했다. 2024년, 필리핀 대통령은 대만 새 총통의 선거 승리를 축하하며 베이징의 반발을 불러일으켰다. 혼티베로스는 베이징의 외교적이지 못한 발언에 대해 경고하며, 필리핀이 "하나의 중국 정책"을 재검토할 필요가 있다고 강조했다. 베이징이 필리핀 지도자의 대만 축하 발언보다 필리핀에 더 많은 해를 끼쳤다는 점을 지적했다.
중화민국-필리핀 관계
Section: 역사

최근 몇 년 동안 필리핀은 역내 중화인민공화국-대만 분쟁을 예방하거나 최소화하기 위해 인도-태평양 동맹에서 수동적인 역할에서 능동적인 역할로 전환했다. 대만과 필리핀은 모두 중화인민공화국의 긴장 고조 움직임에 관해 군사 정보를 교환했다.

2018년 1월, 대만은 필리핀의 전쟁 피해 도시 마라위의 민다나오섬 재건을 돕기 위해 원조를 제공했다. 대만은 또한 입법원장과 다수의 의원들을 필리핀에 파견하여 양국 간의 의회 교류 및 관계를 더욱 증진했다. 최근 설문조사에 따르면 필리핀 인구의 대다수가 대만의 독립을 지지하는 것으로 나타났다.
최광희 (성직자)
Section: 사제와 주교

2025년 7월 8일, 교황 레오 14세는 서울대교구 보좌주교로  서울대교구 문화홍보국장 겸 대변인인 최광희 신부를 임명하였다.  최광희 주교에 대한 주교 서품식은 추후  명동대성당에서 정순택 서울대교구장 집전으로 열릴예정이다.

사목 연수를 받은 최광희 주교는 2020년 9월 부터 2021년 2월 까지 안식년을 가졌다.  이후 성 앵베르센터 부센터장, 서울대교구 문화홍보국장 겸 홍보위원회 총무, 서울대교구 대변인을 역임하였다.
앨버토 곤잘러스
Section: 어린 시절 및 교육

맥아더 고등학교에서 우등생이었던 곤잘러스는 텍사스주 해리스군 비법인지구 출신으로, 1973년 미국 공군에 4년 복무 조건으로 입대했다. 그는 알래스카주 포트유콘의 외딴 레이더 기지에서 다른 미군 병사 100명과 함께 1년간 복무했다. 이후 그는 미국 공군사관학교 예비학교에 진학하기 위해 현역 복무에서 해제되었고, 그 후 미국 공군사관학교에 임관되었다. 사관학교에서 3학년을 시작하기 전, 추가 복무 의무가 발생하게 되는 것을 앞두고 그는 학교를 떠났고, 입대 계약에서 해제되었다. 그는 휴스턴에 있는 라이스 대학교로 편입했으며, 러벳 칼리지에 거주했다. 이후 그는 정치학에서 찰스 파크힐 장학생으로 선발되었고, 1979년 정치학 학사 학위를 우등으로 받았다. 그리고 1982년 하버드 법학대학원에서 법무박사 학위를 취득했다.

곤잘러스는 텍사스주 샌안토니오에서 가톨릭 가정에서 태어나 휴스턴 외곽의 도시인 텍사스주 험블에서 자랐다. 멕시코계 혈통인 그는 마리아 (로드리게스)와 파블로 M. 곤잘러스 사이에서 태어난 여덟 형제 중 둘째였다. 1982년에 사망한 그의 아버지는 초등학교 2학년 교육을 받은 후 이주 노동자와 건설 노동자로 일했다. 어머니는 초등학교 6학년 교육을 받았으며 집에서 여덟 자녀를 돌보았다. 곤잘러스와 열 명의 가족은 아버지와 삼촌들이 지은 작은 2베드룸 집에서 살았으며, 전화기나 온수가 없는 환경이었다. 곤잘러스에 따르면, 멕시코에서 태어나 미국에 불법적으로 입국 및 거주했을 가능성이 있는 세 조부모의 이민 서류 존재 여부는 알지 못한다고 한다.
앨버토 곤잘러스

앨버토 R. 곤잘러스(영어: Alberto R. Gonzales, 스페인어: Alberto R. Gonzales 알베르토 R. 곤살레스[*], 1955년 8월 4일~)는 미국의 변호사, 정치인으로, 2005년부터 2007년까지 제80대 미국 법무부 장관을 지냈으며, 2025년 마코 루비오가 국무장관으로 임명되기 전까지 미국 역사상 행정부 내 최고위직에 오른 히스패닉계 미국인이었다. 그는 이전에 텍사스 주 국무장관, 텍사스 주 대법원 판사, 백악관 법률고문을 역임하였으며, 해당 직책을 맡은 최초의 히스패닉계 인사였다.

곤잘러스는 법무장관 재임 기간 동안 미국 시민에 대한 영장 없는 감시 및 9·11 테러 이후 "테러와의 전쟁" 과정에서 고문으로 간주되는 "강화된 심문 기법"의 법적 승인과 관련한 논란의 중심에 있었다. 또한 그는 정치적 반대자들에 대한 기소를 지시하는 백악관의 비공식적인 요구를 거부한 몇몇 연방 검사들의 해임을 감독했으며, 이로 인해 법무부의 정치적 중립성이 훼손되었다는 비판을 받았다. 해임 요구가 거세지자 곤잘러스는 2007년 8월 27일, 법무부의 "최선의 이익을 위하여" 법무장관직에서 사임하였고, 이는 2007년 9월 17일부로 발효되었다.
도키 요리토
Section: 생애

일본의 군키모노가타리 《태평기》(太平記)에 따르면, 요리토가 현지 미노에서 싸울 것을 주장하여 발발한 아오노가하라 전투에서, 아키이에가 이끄는 오슈의 '50만 기'라고도 불리던 대군을 상대로 아시카가측의 다른 부대가 모두 무너져 내리는 와중에도 요리토는 정병(精兵) 1천 기를 이끌고 귀신처럼 분전하였다고 한다.

엔겐(延元) 원년/겐무(建武) 3년(1336년)의 다타라하마 전투(多々良浜の戦い)에서는 기쿠치 다케토시(菊池武敏), 같은 해의 교토에서 닛타 요시사다(新田義貞), 랴쿠오(暦応) 원년(1338년)의 기타바타케 아키이에(北畠顕家)와의 아오노가하라 전투(青野原の戦い), 나아가 닛타 요시사다의 동생 와키야 요시스케(脇屋義助)와의 합전 등, 북조 - 아시카가측으로써 남조와의 수많은 합전에 참가한다.
기능 모델
Section: 관련 모델 유형

일반적인 참조 모델은 어떤 것의 기본 목표나 아이디어를 구현하고 다양한 목적으로 참조될 수 있는 모델이다. 비즈니스 참조 모델은 조직의 조직 구조와 독립적으로 비즈니스 운영을 설명하는 수단이다. 다른 유형의 비즈니스 참조 모델은 비즈니스 프로세스, 비즈니스 기능, 비즈니스 영역의 비즈니스 참조 모델 간의 관계를 나타낼 수도 있다. 이러한 참조 모델은 계층으로 구성될 수 있으며, 서비스 구성 요소, 기술, 데이터 및 성능 분석의 기초를 제공한다.

운영자 기능 모델(OFM)은 인적 요인 엔지니어가 사용하는 전통적인 과업 분석 기술의 대안으로 제안되었다. 운영자 기능 모델은 운영자가 복잡한 시스템을 더 간단한 부분으로 분해하고 제어 동작 및 시스템 구성을 조정하여 허용 가능한 전체 시스템 성능을 달성하는 방법을 수학적 형태로 표현하려고 시도한다. 이 모델은 복잡한 시스템의 지식 표현, 정보 흐름 및 의사결정의 기본 문제를 나타낸다. 밀러(1985)는 네트워크 구조가 시스템에 대한 운영자의 내부 모델과 운영자 제어 기능을 구성하는 결정 문제를 해결하는 데 모델이 어떻게 사용되는지를 지정하는 제어 구조의 가능한 표현으로 간주될 수 있다고 제안한다.
기능 모델

시스템 공학, 소프트웨어 공학 및 컴퓨터 과학 분야에서 기능 모델(Function model)은 모델링된 시스템 또는 주제 영역 내의 기능(활동, 작업, 프로세스, 운영)을 구조적으로 표현한 것이다.

기능 모델은 활동 모델 또는 프로세스 모델과 유사하게 정의된 범위 내에서 사업의 기능을 그래픽으로 표현한 것이다. 기능 모델의 목적은 기능 및 프로세스를 설명하고, 정보 요구 사항 발견을 돕고, 기회를 식별하며, 제품 및 서비스 비용을 결정하는 기초를 마련하는 것이다.
기능 모델
Section: 기능 모델링 주제

시스템 공학 및 소프트웨어 공학에서 기능 모델은 기능적 모델링 관점으로 생성된다. 기능적 관점은 비즈니스 프로세스 모델링에서 가능한 관점 중 하나이며, 다른 관점으로는 행동, 조직 또는 정보적 관점이 있다.

기능적 모델링 관점은 동적 시스템을 설명하는 데 중점을 둔다. 이 모델링 관점의 주요 개념은 프로세스이며, 이는 기능, 변환, 활동, 작업, 태스크 등이 될 수 있다. 이 관점을 사용하는 모델링 언어의 잘 알려진 예시로는 데이터 흐름 다이어그램이 있다.
프로세스 모델링
Section: 방법의 품질

또한 Rossi 등 (1996)이 제안한 복잡성 메트릭으로 알려진 모델링 기술의 품질 측정에 대한 체계적인 접근 방식도 있다. 메타 모델의 기술은 이러한 복잡성 메트릭을 계산하는 기본으로 사용된다. 크로그스티가 제안한 품질 프레임워크와 비교할 때, 품질 측정은 개별 모델 수준보다는 기술 수준에 더 초점을 맞춘다.

Q-ME 프레임워크의 품질을 평가하기 위해, 조직의 동적 필수 요소 모델링(DEMO) 비즈니스 모델링 기술의 품질을 설명하는 데 사용되었다.

Q-ME 프레임워크를 DEMO 모델링 기술에 대한 평가 결과 Q-ME의 단점이 드러났다고 명시되어 있다. 특히 비즈니스 모델링 기술의 품질을 표현하는 정량화할 수 있는 측정 기준이 포함되어 있지 않아 전반적인 평가에서 다른 기술의 품질을 비교하기 어렵게 만든다.
프로세스 모델링
Section: 개요

규범적
원하는 프로세스와 그것이 어떻게 수행되어야/할 수/있을 수 있는지 정의한다
규칙, 지침 및 행동 패턴을 설정하며, 이를 따르면 원하는 프로세스 성능으로 이어진다. 이는 엄격한 강제에서 유연한 안내까지 다양하다

프로세스 모델의 목표는 다음과 같다:

서술적
프로세스 중에 실제로 일어나는 일을 추적한다
프로세스가 수행된 방식을 살펴보고 더 효과적 또는 효율적으로 수행하기 위해 만들어져야 할 개선 사항을 결정하는 외부 관찰자의 관점을 취한다
프로세스 모델링
Section: 프로세스 모델의 분류

전략적 프로세스
어떤 일을 하는 대안적인 방법을 조사하고 궁극적으로 그것을 하기 위한 계획을 세운다
종종 창의적이며 인간의 협력이 필요하다; 따라서 대안 생성 및 대안 선택은 매우 중요한 활동이다

전술적 프로세스
계획 달성을 돕는다
계획 개발보다는 실제 계획 달성을 위해 채택될 전술에 더 관심이 있다

구현 프로세스
가장 낮은 수준의 프로세스이다
계획 구현의 내용과 방법에 대한 세부 사항에 직접적으로 관련된다
배리어 (컴퓨터 과학)

병행 컴퓨팅에서 배리어는 상승 또는 하강 상태일 수 있다. '래치'라는 용어는 때때로 상승 상태로 시작하여 하강 상태가 되면 다시 상승할 수 없는 배리어를 지칭하는 데 사용된다. '카운트다운 래치'라는 용어는 미리 정해진 수의 스레드/프로세스가 도착하면 자동으로 하강하는 래치를 지칭하는 데 사용되기도 한다.

많은 집단 루틴과 지시문 기반 병렬 언어는 암시적 배리어를 부과한다. 예를 들어, OpenMP가 포함된 포트란의 병렬 do 루프는 마지막 반복이 완료될 때까지 어떤 스레드에서도 계속할 수 없다. 이는 프로그램이 루프 완료 직후의 결과에 의존하는 경우에 대비하기 위함이다. 메시지 전달에서, (리덕션 또는 스캐터와 같은) 모든 전역 통신은 배리어를 암시할 수 있다.
배리어 (컴퓨터 과학)
Section: 구현

이 스레드 배리어 방법은 "중앙 배리어" 앞에서 대기해야 하는 스레드들이 예상된 수의 스레드가 배리어에 도달할 때까지 배리어가 해제되지 않는다는 점에서 중앙 집중식 배리어라고도 불린다.

다음은 POSIX 스레드를 사용하여 스레드 배리어를 구현한 C 코드이며, 이 절차를 보여준다:

이 프로그램에서 스레드 배리어는 struct _thread_barrier라는 구조체로 정의되며, 여기에는 다음이 포함된다:
배리어 (컴퓨터 과학)
Section: POSIX 스레드 배리어 함수

다음 예제(C로 pthread API를 사용하여 구현됨)는 스레드 배리어를 사용하여 메인 프로세스의 모든 스레드를 차단하고 따라서 전체 프로세스를 차단할 것이다:

이 소스 코드의 결과는 다음과 같다:

스레드 배리어를 파괴하여 자원을 다시 해제한다.

pthread_barrier_wait()

이 함수를 호출하면 pthread_barrier_init()에서 지정한 수의 스레드가 pthread_barrier_wait()를 호출하여 배리어를 해제할 때까지 현재 스레드가 차단된다.
C++ AMP
Section: 기능

새로운 언어 기능 외에 C++ AMP의 나머지 기능은 동시성(concurrency) 네임스페이스의 <amp.h> 헤더 파일을 통해 사용할 수 있다. 주요 C++ AMP 클래스는 다음과 같다: array(가속기의 데이터 컨테이너), array_view(데이터 래퍼), index(N차원 점), extent(N차원 크기), accelerator(메모리를 할당하고 실행할 GPU와 같은 계산 리소스), accelerator_view(가속기의 뷰). 전역 함수 parallel_for_each는 병렬 루프를 작성할 수 있도록 한다.

마이크로소프트는 C++ AMP 가속기에서 함수가 실행될 수 있음을 선언하기 위해 어떤 함수(람다 포함)에도 적용할 수 있는 restrict(amp) 기능을 추가했다. 컴파일러는 관리 및 별도의 언어를 사용할 필요 없이 자동으로 컴퓨트 커널을 생성한다. restrict 키워드는 컴파일러에게 함수가 대부분의 GPU에서 지원되는 언어 기능만 사용하는지 정적으로 확인하도록 지시한다. 예를 들어, void myFunc() restrict(amp) {…} 와 같이 사용할 수 있다.
마이크로소프트 또는 개방형 C++ AMP 사양의 다른 구현자는 C++ AMP와 관련 없는 목적을 포함하여 다른 목적을 위한 다른 restrict 지정자를 추가할 수 있다.
C++ AMP

마이크로소프트의 초기 C++ AMP 릴리스는 최소 윈도우 7 또는 윈도우 서버 2008 R2를 필요로 한다. C++ AMP는 개방형 사양이므로 시간이 지남에 따라 마이크로소프트 외부에서도 구현이 등장할 것이다. 이러한 초기 사례 중 하나는 클랭–LLVM 및 오픈 컴퓨팅 언어(OpenCL)에서 C++ AMP를 인텔의 실험적 구현인 Shevlin Park이다.

C++ AMP(C++ Accelerated Massive Parallelism)는 C++ 프로그래밍 언어와 해당 런타임 라이브러리의 요소를 포함하는 네이티브 프로그래밍 모델이다. 이 모델은 데이터 병렬 하드웨어(예: 그래픽 카드 및 그래픽 처리 장치(GPU))에서 컴파일 및 실행되는 프로그램을 쉽게 작성하는 방법을 제공한다.
핍홀 최적화

예시:

레지스터를 스택에 푸시한 다음 즉시 값을 레지스터로 다시 팝하는 대신, 두 명령어를 모두 제거한다.

x에 2를 곱하는 대신 x << 1을 수행한다.

부동 소수점 레지스터에 8을 곱하는 대신 부동 소수점 레지스터의 지수에 3을 더한다.

핍홀 최적화(Peephole optimization)는 핍홀 또는 윈도우로 알려진 소규모 컴파일러 생성 명령어 집합에 대해 수행되는 최적화 기법으로, 해당 명령어를 더 나은 성능을 가진 논리적으로 동등한 집합으로 대체하는 것을 포함한다.
핍홀 최적화
Section: 예시

다음 소스 코드:

는 간단히 다음과 같이 컴파일된다:

하지만 다음으로 최적화할 수 있다:

컴파일러가 서브루틴을 호출하기 전에 레지스터를 스택에 저장하고 반환할 때 복원하는 경우, 연속적인 서브루틴 호출에는 중복된 스택 명령어가 있을 수 있다.

다음 자바 바이트코드:

은 더 빠르게 실행되는 다음 코드로 대체될 수 있다:

대부분의 핍홀 최적화와 마찬가지로, 이는 다른 명령어들의 상대적 효율성을 기반으로 한다. 이 경우, `dup` (스택의 맨 위를 복제하고 푸시하는)은 `aload` (지역 변수를 로드하고 스택에 푸시하는)보다 더 효율적인 것으로 알려져/가정된다.
루프 불변 코드 이동
Section: 장점

그러나 너무 많은 변수가 생성되면, 특히 32비트 X86과 같이 레지스터가 적은 프로세서에서는 레지스터 압박이 높아진다. 컴파일러가 레지스터를 다 소진하면 일부 변수는 레지스터 스필링된다. 이를 상쇄하기 위해 역최적화인 재자료화가 수행될 수 있다.

루프 밖으로 이동된 루프 불변 코드는 더 적게 실행되어 속도를 향상시킨다. 이 변환의 또 다른 효과는 상수를 레지스터에 저장하고 각 반복마다 주소를 계산하고 메모리(또는 캐시 라인)에 접근할 필요가 없다는 것이다.
루프 언롤링
Section: 동적 언롤링

코드 중복은 더프의 장치와 같이 두 부분을 함께 작성하여 피할 수 있다.

출처:

다음 예시는 double 타입의 100개 항목 벡터 A와 B의 스칼라곱을 계산할 것이다. C 언어 코드는 다음과 같다:

다음은 루프 언롤링을 구현하기 전에 100개 항목의 벡터 A와 B의 스칼라곱을 계산하는 MIPS 어셈블리어 코드이다. 아래 코드는 루프 초기화를 생략한다.

루프 카운트($7)를 100으로 초기화한다.
루프 언롤링
Section: 장점

실행되는 명령어의 감소가 프로그램 크기 증가로 인한 성능 저하를 상쇄하면 상당한 이득을 얻을 수 있다.

분기 페널티가 최소화된다.

루프 내의 명령문이 서로 독립적이라면(즉, 루프에서 먼저 발생하는 명령문이 그 뒤에 오는 명령문에 영향을 주지 않는 경우), 명령문은 잠재적으로 병렬로 실행될 수 있다.

"타이트한" 루프의 오버헤드는 종종 배열의 다음 요소에 대한 포인터나 인덱스를 증가시키는 명령어(포인터 연산)와 "루프 종료" 테스트로 구성된다. 최적화 컴파일러나 어셈블러가 개별적으로 참조되는 각 배열 변수에 대한 오프셋을 미리 계산할 수 있다면, 이들은 기계어 명령어에 직접 내장될 수 있으므로 런타임에 추가적인 산술 연산이 필요하지 않다.
루프 언롤링

루프 언롤링(Loop unrolling) 또는 루프 언와인딩(loop unwinding)은 프로그램의 이진 크기를 늘리는 대신 실행 속도를 최적화하려는 루프 변환 기술로, 이는 공간-시간 트레이드오프라고 알려진 접근 방식이다. 변환은 프로그래머가 수동으로 수행하거나 최적화 컴파일러가 수행할 수 있다. 최신 프로세서에서는 루프 언롤링으로 인해 코드 크기가 증가하여 캐시 미스가 더 많이 발생할 수 있으므로 역효과를 낼 때가 많다. 더프의 장치를 참고하라.

루프 언와인딩의 목표는 각 반복에서 포인터 연산 및 "루프 끝" 테스트와 같이 루프를 제어하는 명령어를 줄이거나 제거하여 프로그램의 속도를 높이는 것이다. 분기 페널티를 줄이고, 메모리에서 데이터를 읽는 지연을 포함한 대기 시간을 숨기는 것이다. 이러한 계산 오버헤드를 제거하기 위해 루프는 유사한 독립적인 명령문의 반복 시퀀스로 다시 작성될 수 있다.
강도 감소
Section: 코드 분석

루프 불변: 루프 본문 내에서 변경되지 않는 값.

유도 변수: 루프를 통해 매번 반복되는 값.

루프 불변은 본질적으로 루프 내에서 상수이지만, 그 값은 루프 외부에서 변경될 수 있다. 유도 변수는 알려진 양만큼 변경된다. 이 용어는 특정 루프에 상대적이다. 루프가 중첩될 때, 바깥쪽 루프의 유도 변수는 안쪽 루프의 루프 불변이 될 수 있다.

프로그램 실행 시간의 대부분은 일반적으로 코드의 작은 부분(핫 스팟이라고 불림)에서 소비되며, 이 코드는 종종 반복적으로 실행되는 루프 내에 있다.

컴파일러는 루프를 식별하고 해당 루프 내의 레지스터 값 특성을 인식하는 방법을 사용한다. 강도 감소를 위해 컴파일러가 관심을 갖는 것은 다음과 같다.
강도 감소
Section: 강도 감소 예제

값 r8*8(0118번 줄)은 초기화(0056번 줄)하고 r8이 증가할 때 8*r2를 더하여(0386번 줄) 강도 감소할 수 있다.

레지스터 r20은 루프를 통과할 때마다 0117번 줄에서 불변/상수 r2에 의해 증가하고 있다. 증가된 후 8을 곱하여 0119번 줄에서 r22를 생성한다. 이 곱셈은 루프를 통과할 때마다 8*r2를 더함으로써 강도 감소할 수 있다.

이제 두 루프는 외부 루프 내에 하나의 곱셈 연산(0330번 줄)만 남고 내부 루프에는 곱셈 연산이 없다.

0320번 줄에서 r14는 r8과 r1의 합이며, r8과 r1은 루프 내에서 증가하고 있다. 레지스터 r8은 r2(=n)만큼 증가하고 r1은 1만큼 증가한다. 결과적으로 r14는 루프를 통과할 때마다 n+1만큼 증가한다. 0330번 줄의 마지막 루프 곱셈은 루프를 통과할 때마다 (r2+1)*8을 더함으로써 강도 감소될 수 있다.
강도 감소
Section: 유도 변수 (고아)

유도 변수 또는 재귀적 강도 감소는 체계적으로 변하는 변수의 함수를 함수의 이전 값을 사용하여 더 간단한 계산으로 대체한다. 절차형 프로그래밍 언어에서는 루프 변수를 포함하는 표현식에 적용되며, 선언형 프로그래밍 언어에서는 재귀 함수의 인수에 적용된다. 예를 들어,

는 다음과 같이 된다.

여기서 수정된 재귀 함수 f′는 두 번째 매개변수 z = 3 ** x를 사용하여 비용이 많이 드는 계산 (3 ** x)을 더 저렴한 (3 * z)로 대체할 수 있게 한다.
공통 부분식 제거
Section: 원리

평가 후 p 전에 b 또는 c에 대한 할당이 없는 경우.

옵티마이저가 수행하는 비용/편익 분석은 tmp에 저장하는 비용이 곱셈 비용보다 적은지 계산한다. 실제로 어떤 값이 어떤 레지스터에 저장되어 있는지와 같은 다른 요인들도 중요하다.

컴파일러 개발자들은 두 가지 종류의 CSE를 구분한다.

지역 공통 부분식 제거는 단일 기본 블록 내에서 작동한다.

전역 공통 부분식 제거는 전체 프로시저에 대해 작동한다.

두 가지 모두 프로그램의 어떤 지점에서 어떤 식이 사용 가능한지에 대한 데이터 흐름 분석에 의존한다.
상수 폴딩
Section: 최적화의 작동 방식

상수 전파를 한 번 적용한 다음 상수 폴딩을 적용하면 다음과 같다.

두 단계를 두 번 반복하면 다음과 같다.

변수 a와 b의 모든 사용을 상수로 대체했으므로 컴파일러의 불필요한 코드 제거가 해당 변수에 적용되어 다음과 같이 남는다.

(불리언 구성은 언어와 컴파일러마다 다르지만, 참의 상태, 원본 및 표현과 같은 세부 사항은 이러한 최적화 원칙에 영향을 미치지 않는다.)

전통적인 상수 전파는 더 이상의 최적화를 생성하지 않는다. 프로그램을 재구성하지 않는다.
상수 폴딩
Section: 상수 폴딩

대부분의 컴파일러는 이 문장에 대해 실제로 두 개의 곱셈 명령과 하나의 저장 명령을 생성하지 않는다. 대신 이러한 구문을 식별하고 컴파일 타임에 계산된 값(이 경우 2,048,000)으로 대체한다.

상수 폴딩은 런타임에 계산하는 대신 컴파일 타임에 상수 표현식을 인식하고 평가하는 과정이다. 상수 표현식의 항은 일반적으로 정수 리터럴 2와 같은 단순 리터럴이지만, 컴파일 타임에 값이 알려진 변수일 수도 있다. 다음 문장을 살펴보자.
정적 단일 대입 형식
Section: 장점

SSA 사용으로 가능해지거나 크게 향상된 컴파일러 최적화 알고리즘은 다음과 같다:

상수 폴딩 – 계산을 런타임에서 컴파일 시간으로 변환하는 것. 예를 들어, a=3*4+5; 명령을 a=17;처럼 처리한다.

값 범위 전파 – 계산이 가질 수 있는 잠재적 범위를 미리 계산하여 분기 예측을 미리 생성할 수 있게 한다.

희소 조건부 상수 전파 – 일부 값의 범위 확인을 통해 테스트가 가장 가능성 있는 분기를 예측할 수 있도록 한다.
정적 단일 대입 형식
Section: SSA 형식을 사용하는 컴파일러

얼랭 컴파일러는 OTP 22.0에서 "정적 단일 할당(SSA)을 기반으로 한 중간 표현을 내부적으로 사용"하도록 재작성되었으며, 향후 릴리스에서 SSA를 기반으로 한 추가 최적화가 계획되어 있다.

모노는 미니라고 불리는 JIT 컴파일러에서 SSA를 사용한다.

웹킷은 JIT 컴파일러에서 SSA를 사용한다.

스위프트는 LLVM IR 위에 SIL(Swift Intermediate Language)이라는 자체 SSA 형식을 정의한다.
정적 단일 대입 형식
Section: SSA 형식에서 벗어나기

SSA 형식에서 최적화를 수행하면 일반적으로 얽힌 SSA 웹이 발생하며, 이는 피연산자가 모두 동일한 루트 피연산자를 갖지 않는 Φ 명령어가 있음을 의미한다. 이러한 경우 컬러아웃(color-out) 알고리즘이 SSA에서 벗어나기 위해 사용된다. 순진한 알고리즘은 Φ에 다른 루트 심볼의 소스를 놓는 각 선행 경로를 따라 복사본을 도입한다. 복사본을 적게 사용하여 SSA에서 벗어나는 여러 알고리즘이 있으며, 대부분은 간섭 그래프 또는 그 근사치를 사용하여 복사본 병합을 수행한다.

SSA 형식은 일반적으로 직접 실행에 사용되지 않으며(SSA를 해석하는 것이 가능하긴 하지만), 종종 직접적으로 대응하는 다른 IR "위에" 사용된다. 이는 기존 IR의 부분(기본 블록, 명령어, 피연산자 등)과 SSA 대응 부분 사이를 매핑하는 일련의 함수로 SSA를 "구성"함으로써 달성할 수 있다. SSA 형식이 더 이상 필요 없을 때, 이러한 매핑 함수는 버려져서 이제 최적화된 IR만 남게 된다.
개인 보안

개인의 안보는 1948년 유엔이 채택한 세계 인권 선언에서 보장하는 기본적인 권리이다. 또한 유럽 인권 조약, 캐나다의 헌법, 남아프리카 공화국의 헌법 및 전 세계의 다른 법률에 의해 명시적으로 정의되고 보장되는 인권이기도 하다.

일반적으로 개인의 안보에 대한 권리는 자유와 관련이 있으며, 부당하게 투옥될 경우 인신보호청원과 같은 구제책을 받을 권리를 포함한다. 개인의 안보는 고문과 잔인하고 비정상적인 형벌 금지에 기반한 권리의 확장으로 볼 수도 있다. 개인의 안보에 대한 권리는 덜 치명적인 행위를 막을 수 있으며, 수감자 권리와 관련하여 사용될 수 있다.
개인 보안
Section: 캐나다

1982년, 개인의 안보에 대한 권리가 헌법에 추가되었다. 이는 캐나다 권리 및 자유 헌장의 제7조에 포함되었는데, "모든 사람은 생명, 자유 및 개인의 안전에 대한 권리와 기본적 정의의 원칙에 따르지 아니하고는 이를 박탈당하지 않을 권리를 가진다."고 규정하고 있다. 제7조의 개인의 안보는 신체와 건강의 사생활에 대한 권리와 개인의 "심리적 완전성"을 보호하는 권리로 구성된다. 즉, 이 권리는 개인의 정신 상태에 대한 정부에 의한 중대한 해( 스트레스 )로부터 보호한다. (블렌코 대 브리티시컬럼비아 인권위원회 사건, 2000년)

이 권리는 상당한 판례를 만들어냈다. 캐나다의 낙태는 R. 대 모르겐탈러 (1988) 사건에서 대법원이 치료적 낙태 위원회가 여성의 건강을 위협하여 개인의 안보를 침해했다고 판결한 후 합법화되었다. 일부 판사들은 또한 신체에 대한 통제권이 개인의 안보 내에 있는 권리이며, 낙태법에 의해 침해되었다고 느꼈다. 작전 해체 대 국왕 (1985) 사건에서 순항 미사일 시험은 핵전쟁 위험을 야기하여 개인의 안보를 침해한다는 주장이 제기되었으나 실패했다. 쇼이 대 퀘벡주 (법무장관) (2005) 사건에서 일부 대법원 판사들은 퀘벡주의 민간 의료 금지가 의료 지연이 신체적 및 심리적 결과를 초래할 수 있기 때문에 개인의 안보를 침해한다고 간주하기도 했다.
명령어 스케줄링
Section: 컴파일러 예시

지연 시간 및 포트 사용 정보 출처는 다음과 같다.

GCC 및 LLVM

아그네르 포그, x86 아키텍처에 대한 광범위한 데이터를 수집한다.

InstLatx64는 AIDA64를 사용하여 x86 CPU에 대한 데이터를 수집한다.

버전 12.0.0까지 LLVM/Clang의 명령어 스케줄링은 명령어 집합 및 스케줄링 모두에 대해 -march(LLVM 용어로 target-cpu라고 함) 스위치만 허용했다. 버전 12부터 x86에 대해서만 -mtune(tune-cpu) 지원이 추가되었다.
명령어 스케줄링
Section: 알고리즘

위상 정렬을 찾는 가장 간단한 알고리즘은 자주 사용되며 리스트 스케줄링으로 알려져 있다. 개념적으로, 이 알고리즘은 종속성 그래프의 소스를 반복적으로 선택하여 현재 명령어 스케줄에 추가하고 그래프에서 제거한다. 이로 인해 다른 정점이 소스가 될 수 있으며, 이들도 스케줄링을 위해 고려된다. 그래프가 비어 있으면 알고리즘이 종료된다.

좋은 스케줄을 만들기 위해서는 지연을 방지해야 한다. 이는 스케줄링될 다음 명령어의 선택에 따라 결정된다. 일반적으로 다음과 같은 휴리스틱이 사용된다.

이미 스케줄링된 명령어가 사용하는 프로세서 리소스가 기록된다. 후보가 점유된 리소스를 사용하면 우선순위가 떨어진다.
명령어 스케줄링

명령어 순서를 재배열하여 파이프라인 지연을 방지한다.

불법적이거나 의미상 모호한 작업(일반적으로 미묘한 명령어 파이프라인 타이밍 문제 또는 비연동 리소스와 관련됨)을 피한다.

파이프라인 지연은 구조적 위험(프로세서 리소스 제한), 데이터 위험(한 명령어의 출력이 다른 명령어에 의해 필요함), 제어 위험(분기)으로 인해 발생할 수 있다.

컴퓨터 과학에서 명령어 스케줄링(Instruction scheduling)은 명령어 수준 병렬성을 향상시키기 위해 사용되는 컴파일러 최적화 기법으로, 명령어 파이프라인을 사용하는 시스템의 성능을 향상시킨다. 간단히 말해서, 코드의 의미를 변경하지 않으면서 다음을 수행하려고 한다.
레지스터 할당
Section: 컨텍스트

따라서 레지스터 할당은 런타임에 변수를 어디에 저장할지, 즉 레지스터 내부 또는 외부에 저장할지 선택하는 것으로 구성된다. 변수를 레지스터에 저장해야 하는 경우 할당자는 이 변수가 어떤 레지스터에 저장될지 결정해야 한다. 궁극적으로 또 다른 과제는 변수가 동일한 위치에 얼마나 오랫동안 머물러야 하는지 결정하는 것이다.

또한, 일부 컴퓨터 설계는 자주 접근하는 레지스터를 캐시한다. 따라서 가능한 한 `move` 명령어의 원본과 대상에 동일한 레지스터를 할당함으로써 프로그램을 더욱 최적화할 수 있다. 컴파일러가 정적 단일 대입 형식(SSA)과 같은 중간 표현을 사용하는 경우 특히 중요하다. 특히 SSA가 완전히 최적화되지 않은 경우 인위적으로 추가적인 `move` 명령어를 생성할 수 있다.
레지스터 할당
Section: 레지스터 할당 기술

선형 스캔은 또 다른 전역 레지스터 할당 접근 방식이다. 이는 1999년 포레토(Poletto) 등이 처음 제안했다. 이 접근 방식에서는 코드가 그래프로 변환되지 않는다. 대신, 모든 변수를 선형적으로 스캔하여 간격으로 표현되는 활성 범위를 결정한다. 모든 변수의 활성 범위가 파악되면 간격을 시간 순서대로 순회한다. 이 순회가 활성 범위가 충돌하는 변수를 식별하는 데 도움이 될 수 있지만, 간섭 그래프는 구축되지 않으며 변수는 탐욕스러운 방식으로 할당된다.

채틴 스타일 그래프 색칠 접근 방식의 한 가지 나중 개선점은 브릭스(Briggs) 등이 발견한 것이다. 이는 보존적 통합(conservative coalescing)이라고 불린다. 이 개선점은 두 활성 범위가 병합될 수 있는 시점을 결정하기 위한 기준을 추가한다. 주로, 비간섭 요구 사항 외에도 두 변수는 병합이 추가적인 스필링을 유발하지 않는 경우에만 통합될 수 있다. 브릭스 등은 채틴의 작업에 두 번째 개선점인 편향 색칠(biased coloring)을 도입한다. 편향 색칠은 복사 관련 활성 범위에 그래프 색칠에서 동일한 색상을 할당하려고 시도한다.
리머티리얼라이제이션

컴퓨터 과학에서 리머티리얼라이제이션(rematerialization) 또는 리맷(remat)은 값을 메모리에서 로드하는 대신 재계산하여 시간을 절약하는 컴파일러 최적화 기법이다. 이는 일반적으로 레지스터 할당과 밀접하게 통합되어 있으며, 레지스터를 메모리로 스필링하는 대안으로 사용된다. 이 개념은 그레고리 차이틴, 마크 아우스랜더, 아쇼크 찬드라, 존 코크, 마틴 홉킨스 및 피터 마크스타인에 의해 고안되었으며 1970년대 후반 801 미니컴퓨터용 Pl.8 컴파일러에 구현되었다. 이후 1992년 프레스턴 브릭스, 키스 D. 쿠퍼, 린다 토르크존에 의해 개선되었다.

공통 부분식 제거 및 루프 불변 코드 이동과 같은 전통적인 최적화는 종종 중복 계산을 제거하는 데 중점을 둔다. 계산은 CPU 사이클을 필요로 하므로 이는 일반적으로 좋은 일이지만, 변수의 라이브 범위를 늘리고 많은 새로운 변수를 생성하여 레지스터 할당 중 스필링을 초래할 수 있는 잠재적으로 파괴적인 부작용이 있다. 리머티리얼라이제이션은 거의 정반대이다. 즉, CPU 계산량을 늘려 레지스터 압력을 줄인다. 불필요한 계산 시간을 추가하는 것을 피하기 위해 리머티리얼라이제이션은 컴파일러가 이점이 있다고 확신할 때만 수행된다. 즉, 메모리로 레지스터 스필링이 발생할 경우에만 수행된다.
불필요한 코드 제거
Section: 예시

또한 첫 번째 return 문이 무조건 실행되고 그 뒤에 "goto"가 도달할 수 있는 레이블이 없으므로, 두 번째 b에 대한 할당에 도달하는 실행 경로는 존재하지 않는다. 따라서 해당 할당은 도달 불가능하며 제거될 수 있다.
만약 해당 프로시저에 return 문 뒤에 레이블이 있고 프로시저의 다른 곳에 goto와 같은 더 복잡한 제어 흐름이 있었다면, b에 대한 할당에 도달할 수 있는 실행 경로가 존재했을 수도 있다.

다음은 C로 작성된 예시이다.

값 사용에 대한 간단한 분석은 첫 번째 할당 후 b의 값이 foo 내부에서 사용되지 않음을 보여준다. 게다가 b는 foo 내부에 지역 변수로 선언되었으므로 foo 외부에서는 그 값을 사용할 수 없다. 따라서 변수 b는 불필요하며 최적화 프로그램은 해당 저장 공간을 회수하고 초기화를 제거할 수 있다.
별칭 분석
Section: 개요

여기에는 세 가지 가능한 별칭 사례가 있다:

변수 p와 q는 별칭 처리될 수 없다 (즉, 결코 동일한 메모리 위치를 가리키지 않는다).

변수 p와 q는 반드시 별칭 처리되어야 한다 (즉, 항상 동일한 메모리 위치를 가리킨다).

일반적으로 별칭 분석은 별개의 메모리 참조가 메모리의 동일한 영역을 가리키는지 여부를 결정한다. 이를 통해 컴파일러는 프로그램의 어떤 변수가 특정 문장에 의해 영향을 받을지 결정할 수 있다. 예를 들어, 구조체 멤버에 접근하는 다음 코드 섹션을 고려해 보자:
별칭 분석

별칭 분석(alias analysis)은 컴파일러 이론에서 저장 위치가 두 가지 이상의 방식으로 접근될 수 있는지 확인하는 데 사용되는 기술이다. 두 포인터가 동일한 위치를 가리키는 경우 별칭 처리된다고 말한다.

별칭 분석 기술은 일반적으로 흐름 민감도와 문맥 민감도에 따라 분류된다. 이는 may-alias 또는 must-alias 정보를 결정할 수 있다. 별칭 분석이라는 용어는 특정 사례인 포인터 분석과 종종 상호 교환적으로 사용된다.
별칭 분석
Section: 별칭 분석 수행

컴파일되는 언어가 타입 안전하고, 컴파일러의 타입 검사기가 정확하며, 언어가 지역 변수를 참조하는 포인터를 생성하는 기능이 부족하다면 (예: ML, 하스켈, 또는 자바), 유용한 최적화를 수행할 수 있다. 두 메모리 위치가 다른 별칭 클래스에 있어야 한다고 아는 많은 경우가 있다:

별칭 분석에서 우리는 프로그램의 메모리를 별칭 클래스로 나눈다. 별칭 클래스는 서로 별칭 처리될 수 없는 위치들의 분리된 집합이다. 여기서는 여기서 수행되는 최적화가 프로그램의 저수준 중간 표현에서 발생한다고 가정한다. 즉, 프로그램이 이진 연산, 점프, 레지스터 간 이동, 레지스터에서 메모리로 이동, 메모리에서 레지스터로 이동, 분기, 함수 호출/반환으로 컴파일되었다는 의미이다.
이스케이프 분석
Section: 최적화

동기화 생략. 객체가 단일 스레드에서만 접근 가능한 것으로 판명되면, 해당 객체에 대한 작업은 동기화 없이 수행될 수 있다.

객체 분할 또는 스칼라 대체. 객체가 순차적인 메모리 구조로 존재할 필요가 없는 방식으로 접근되는 것으로 판명될 수 있다. 이는 객체의 일부(또는 전체)를 메모리 대신 CPU 레지스터에 저장할 수 있도록 한다.

컴파일러는 이스케이프 분석 결과를 기반으로 최적화를 수행할 수 있다.

힙 할당을 스택 할당으로 변환. 객체가 서브루틴에 할당되고 객체에 대한 포인터가 절대 이스케이프하지 않는다면, 그 객체는 힙 할당 대신 스택 할당의 후보가 될 수 있다. 가비지 컬렉션 언어에서는 이로 인해 컬렉터가 실행되어야 하는 빈도를 줄일 수 있다.
이스케이프 분석
Section: 실용적 고려 사항

자바 프로그래밍 언어의 인기로 인해 이스케이프 분석은 관심의 대상이 되었다. 자바의 힙 전용 객체 할당, 내장 스레딩, 썬 핫스팟 동적 컴파일러, 그리고 OpenJ9의 JIT 컴파일러 (JIT)의 조합은 이스케이프 분석 관련 최적화를 위한 후보 플랫폼을 제공한다 (자세한 내용은 자바의 이스케이프 분석 참조). 이스케이프 분석은 자바 표준 에디션 6에 구현되어 있다. 일부 JVM은 함수의 특정 경로에서 객체가 이스케이프하더라도 할당된 객체의 스칼라 대체를 가능하게 하는 부분 이스케이프 분석이라는 더 강력한 이스케이프 분석 변형을 지원한다.

객체 지향 프로그래밍 언어에서 동적 컴파일러는 이스케이프 분석을 수행하는 데 특히 적합하다. 전통적인 정적 컴파일에서는 메소드 오버라이딩으로 인해 이스케이프 분석이 불가능할 수 있다. 이는 호출된 모든 메소드가 포인터를 이스케이프시킬 수 있는 버전으로 오버라이드될 수 있기 때문이다. 동적 컴파일러는 오버로딩에 대한 가용한 정보를 사용하여 이스케이프 분석을 수행할 수 있으며, 관련 메소드가 동적 코드 로딩에 의해 오버라이드될 때 분석을 다시 수행할 수 있다.
이스케이프 분석

서브루틴이 객체를 할당하고 그 객체에 대한 포인터를 반환하는 경우, 해당 객체는 프로그램 내의 불특정한 위치에서 접근될 수 있다. 즉, 포인터가 "이스케이프"한 것이다. 포인터는 또한 전역 변수나 현재 프로시저를 벗어나는 다른 데이터 구조에 저장될 때도 이스케이프할 수 있다.

컴파일러 최적화에서 이스케이프 분석(Escape analysis)은 포인터의 동적 범위를 결정하는 방법이다. 이 분석은 프로그램 내에서 포인터가 어디에 접근될 수 있는지를 파악한다. 이는 포인터 분석 및 형태 분석과 관련이 있다.
전자 회로 시뮬레이션
Section: 어드미턴스 행렬을 이용한 시뮬레이션

각 요소 Y 파라미터는 아래 규칙에 따라 연결된 노드에 합산하여 노달 어드미턴스 행렬에 삽입된다.

Y11은 대각선의 n x n 노드에 합산되며, 여기서 n은 첫 번째 핀(핀 1)이 연결된 노드이다.

두 번째 노드가 0이 아닌 경우, 즉 접지가 아닌 경우:

Y22는 대각선의 m x m 노드에 합산되며, 여기서 m은 두 번째 핀(핀 2)이 연결된 노드이다.

Y12는 n x m 노드 위치에 합산된다.
전자 회로 시뮬레이션
Section: 유형

혼합 모드 시뮬레이터가 제공하는 이벤트 기반 알고리즘은 범용이며 비디지털 유형의 데이터를 지원한다. 예를 들어, 요소는 실제 또는 정수 값을 사용하여 DSP 기능 또는 샘플링된 데이터 필터를 시뮬레이션할 수 있다. 이벤트 기반 알고리즘이 표준 SPICE 매트릭스 솔루션보다 빠르기 때문에 아날로그 모델 대신 이벤트 기반 모델을 사용하는 회로의 시뮬레이션 시간이 크게 단축된다.

혼합 모드 시뮬레이션은 세 가지 수준으로 처리된다. 타이밍 모델과 내장된 12 또는 16 상태 디지털 논리 시뮬레이터를 사용하는 원시 디지털 요소, 집적 회로의 실제 트랜지스터 토폴로지를 사용하는 서브서킷 모델, 그리고 마지막으로 인라인 불 논리 표현식이다.
전자 회로 시뮬레이션

전자 회로 시뮬레이션(Electronic circuit simulation)은 실제 전자 장치나 회로의 동작을 복제하기 위해 수학적 모델을 사용한다.

시뮬레이션 소프트웨어는 회로 동작 모델링을 가능하게 하며 귀중한 분석 도구이다. 높은 정확도의 모델링 능력 덕분에 많은 대학교에서 이 유형의 소프트웨어를 전자기술자 및 전자공학 프로그램 교육에 활용한다. 전자 시뮬레이션 소프트웨어는 사용자를 학습 경험에 통합시킴으로써 사용자를 참여시킨다. 이러한 종류의 상호작용은 학습자가 내용을 분석하고, 합성하고, 구성하고, 평가하도록 적극적으로 참여시켜 학습자가 자신의 지식을 구성하게 한다.

실제로 회로를 구축하기 전에 회로의 동작을 시뮬레이션하는 것은 결함이 있는 설계를 알려주고 전자 회로 설계의 동작에 대한 통찰력을 제공함으로써 설계 효율성을 크게 향상시킬 수 있다. 특히 집적 회로의 경우, 툴링(포토마스크)은 비싸고, 브레드보드는 비실용적이며, 내부 신호의 동작을 탐침하는 것은 매우 어렵다. 따라서 거의 모든 IC 설계는 시뮬레이션에 크게 의존한다. 가장 잘 알려진 아날로그 시뮬레이터는 SPICE이다. 아마도 가장 잘 알려진 디지털 시뮬레이터는 베릴로그 및 VHDL 기반의 시뮬레이터일 것이다.
계산사회과학
Section: 정의

계산사회과학은 과학적 방법의 두 가지 근본적인 축, 즉 빅 데이터를 통한 실증적 연구를 혁신한다. 특히 온라인 사회 활동을 통해 남겨진 디지털 발자국을 분석하고, 과학 이론은 사회 시뮬레이션을 통한 컴퓨터 시뮬레이션 모델 구축을 통해 혁신한다. 이는 고급 정보 기술을 통한 정보 처리에 중점을 둔 사회 조사의 다학제적 통합 접근 방식이다. 계산 작업에는 사회 연결망, 사회 지리 시스템, 소셜 미디어 콘텐츠 및 전통 미디어 콘텐츠의 분석이 포함된다.

계산사회과학 작업은 현재 여러 학제 간 프로젝트에서 구축 및 유지 관리하고 있는 대규모 데이터베이스의 가용성 증가에 점차 의존하고 있다. 여기에는 다음이 포함된다.

세샤트: 글로벌 역사 데이터뱅크(Seshat: Global History Databank)는 인간 집단의 정치 및 사회 조직과 시간이 지남에 따라 사회가 어떻게 진화했는지에 대한 최신 설명을 권위 있는 데이터뱅크로 체계적으로 수집한다. 세샤트는 "진화 과학을 사용하여 실제 문제를 해결"하는 비영리 싱크탱크인 진화 연구소(Evolution Institute)와도 제휴하고 있다.