실크 플러스
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
실크 플러스는 MIT에서 개발된 실크 프로그래밍 언어를 기반으로, 인텔이 실크 아츠를 인수하여 개발한 병렬 프로그래밍 기술이다. 다중 스레드 애플리케이션 스케줄링 연구를 통해 시작되어, C/C++ 언어 확장을 통해 병렬 처리를 지원한다. 핵심 요소로는 `cilk_for`, `cilk_spawn`, `cilk_sync` 등의 키워드와 리듀서, 배열 표기법, `#pragma simd` 등이 있으며, 이를 통해 병렬 프로그래밍의 효율성을 높인다. 피보나치 수 계산 및 단순 반복문 병렬화 예시를 통해 실크 플러스의 활용 방식을 보여준다.
더 읽어볼만한 페이지
- C 프로그래밍 언어 계열 - C (프로그래밍 언어)
C는 하드웨어 제어와 이식성이 뛰어난 고급 절차적 프로그래밍 언어로서, 다양한 분야에서 사용되며 후속 언어에 영향을 주었고, 성능과 효율성이 높지만 안전성 문제 개선이 필요한 언어이다. - C 프로그래밍 언어 계열 - 펄
펄은 래리 월이 개발한 텍스트 조작에 강점을 가진 다목적 프로그래밍 언어이며, 1987년 펄 1.0이 처음 공개된 이후 여러 버전 업데이트를 거쳐 객체 지향 프로그래밍과 유니코드 지원 기능을 추가했고, 현재 펄 5가 널리 사용되며 CPAN을 통해 방대한 모듈 생태계를 제공한다. - 인텔 제품 - 센트리노
센트리노는 초기 노트북 플랫폼에서 프로세서, 칩셋, 무선랜 모듈 결합체로 시작하여 코어 듀오, 코어 2 듀오 등을 지원하며 발전했고, 2010년부터는 인텔의 무선 LAN 모듈 브랜드로 재정의되어 Wi-Fi 및 WiMAX 어댑터 제품군을 지칭한다. - 인텔 제품 - 3D XPoint
3D XPoint는 인텔과 마이크론이 개발한 비휘발성 메모리 기술로, 전기 저항을 사용하여 데이터를 저장하며 높은 속도와 내구성을 특징으로 하지만, 현재는 개발이 중단되었다.
실크 플러스 - [IT 관련 정보]에 관한 문서 | |
---|---|
기본 정보 | |
이름 | 실크 플러스(Cilk Plus) |
영어 | Cilk Plus |
설명 | 실크의 확장판 |
프로그래밍 언어 정보 | |
패러다임 | 명령형 절차적 구조적 병렬 |
발표 연도 | 2010년 |
설계자 | 인텔 |
개발자 | 인텔 |
최신 버전 | 패러럴 스튜디오 2010 |
최신 출시일 | 2010년 9월 2일 |
타이핑 | 정적 약한 명시적 |
영향을 받은 언어 | C 실크 |
웹사이트 | www.cilkplus.org software.intel.com/en-us/intel-cilk-plus |
2. 역사
실크 프로그래밍 언어는 MIT 컴퓨터 공학 연구소에서 진행된 세 가지 개별 프로젝트에서 발전하였다.
- 다중 스레드 애플리케이션 스케줄링에 대한 이론 작업
- StarTech - Thinking Machines Corporation의 Connection Machine 모델 CM-5에서 동작하도록 작성된 병렬 체스 프로그램
- PCM/Threaded-C - CM-5에서 continuation-passing-style 스레드들의 스케줄링을 위한 C 기반 패키지
1994년 4월, 세 프로젝트가 통합되어 실크(Cilk)로 명명되었다. 실크(Cilk)라는 이름은 약어가 아니며 "좋은 실"(비단, silk) 과 C 프로그래밍 언어를 빗댄 말이다. 1994년 9월, 실크-1 시스템이 발표되었으며, 현재는 실크-5.3 버전까지 개발되어 [http://supertech.csail.mit.edu/cilk/intro.html MIT Computer Science and Artificial Intelligence Laboratory (CSAIL)]에서 관리되었으나, 현재는 지원되지 않는다.
2006년, 실크 아츠(Cilk Arts)는 MIT로부터 상용 C++를 위한 목적으로 실크 기술을 라이선스했다. 2008년 12월, 실크++ v1.0이 윈도 비주얼 스튜디오와 GCC/C++를 지원하는 제품으로 발표되었다. 2009년 7월 31일, 실크 아츠는 인텔에 인수되었다. 인텔과 실크 아츠는 통합되어 더욱 개선되었으며, 2010년 9월 인텔 실크 플러스라는 이름으로 새롭게 발표되었다. 인텔 실크 플러스는 배열 확장이 추가됨으로써 실크와 실크++와는 다르며, 상용 인텔 컴파일러에서 지원되고 기존의 디버거와 호환된다.
3. 핵심 요소
3. 1. 키워드
`cilk_for`는 루프의 반복을 병렬로 실행할 수 있도록 지정한다. `cilk_spawn`은 함수를 비동기적으로 실행하도록 지정하며, 호출한 함수가 완료될 때까지 기다리지 않는다. 병렬화를 강제하는 명령어가 아니라 병렬화를 할 수 있는 기회에 대한 표현이다. 인텔 실크 플러스 런타임은 호출한 함수가 병렬로 동작할 수 있을지 없을지를 선택한다. `cilk_sync`는 함수에서 생성된(spawn) 모든 호출이 완료되어야 프로그램 실행을 계속할 수 있음을 나타낸다. cilk_spawn을 포함하고 있는 모든 함수의 끝에 cilk_sync가 암묵적으로 포함된다.3. 2. 리듀서 (Reducer)
인텔 실크 플러스는 프로그램 병렬화를 쉽게 하기 위해 리듀서(Reducer)를 제공한다. 기존 병렬 프로그램은 공유 변수를 보호하기 위해 록(Lock)을 사용하는데, 이는 데드락이나 성능 저하를 유발할 수 있다. 리듀서는 병렬 코드가 변수를 프라이빗 뷰에서 사용하고 록 없이 작업할 수 있도록 한다. 변수 병합은 다음 동기화(sync) 시점에 순차적으로 이루어져 애플리케이션의 시맨틱을 유지한다.3. 3. 배열 표기법 (Array Notation)
인텔 실크 플러스는 배열의 전체 또는 일부에 대한 연산을 지원하는 배열 표기법(Array Notation)을 제공한다. 이는 컴파일러가 효과적으로 벡터화를 수행하도록 돕는다. 인텔 실크 플러스는 C/C++에서 여러 배열 요소를 병렬화할 수 있도록 지원한다. 또한 벡터화된 이동, 회전, 제거 등과 같은 내장 기능을 제공한다.3. 4. #pragma simd
이 프래그마는 컴파일러가 자동 벡터화에 실패하는 경우에도 루프를 벡터화할 수 있도록 한다. 프로그래머가 직접 벡터화를 적용할 수 있는 방법을 제공한다.4. 프로그램 예
4. 1. 피보나치 수 계산 (`cilk_spawn`, `cilk_sync`)
피보나치 수를 계산하는 함수이다. 다른 많은 효율적인 알고리즘이 있지만 이 예는 간단한 점화식(Recursive function) 함수이다.```c
int fib(int n)
{
if (n < 2)
return n;
int x = fib(n-1);
int y = fib(n-2);
return x + y;
}
```
병렬화를 아래처럼 간단한 변경으로 할 수 있다. 함수 fib(n-1)의 계산을 fib(n-2)과 아무런 간섭없이 병렬로 실행할 수 있다.
```c
int fib(int n)
{
if (n < 2)
return n;
int x = cilk_spawn fib(n-1);
int y = fib(n-2);
cilk_sync;
return x + y;
}
```
`cilk_spawn`을 사용하여 `fib(n-1)` 함수 호출을 병렬화하고, `cilk_sync`를 사용하여 결과를 동기화한다.
4. 2. 단순 반복문 (`cilk_for`)
`cilk_for`를 사용하면 일반 `for` 루프를 병렬화할 수 있다.C 언어 코드 예시는 다음과 같다.
for (int i = 0; i < 8; ++i)
{
do_work(i);
}
`cilk_for`를 사용하여 병렬화하면 다음과 같다.
cilk_for (int i = 0; i < 8; ++i)
{
do_work(i);
}
5. 한국에서의 활용 및 영향
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com