Cilk, Cilk++ і Cilk Plus є мовами програмування загального призначення розроблені для багатопотокових паралельних обчислень. Вони засновані на мовах C і , які вони розширюють конструкціями для створення паралельних потоків та fork–join методологією.
Cilk | |
---|---|
Парадигма | імперативне програмування, Паралельні обчислення, процедурне програмування і структурне програмування |
Дата появи | 1994 |
Розробник | Чарлз Ерік Лейзерсон |
Система типізації | статична, слабка типізація[d] і d |
Під впливом від | C |
Вебсайт | cilkplus.org |
Спочатку мова була розроблена в 1990-і роки в Массачусетському технологічному інституті (MIT) в групі Чарльза Лейзерсона. Пізніше Cilk була розширена в Cilk ++ компанією Cilk Arts. Ця компанія згодом була придбана компанією Intel, що дозволило збільшити сумісність з існуючим C і C ++ кодом.
Історія
MIT Cilk
Мова програмування Cilk утворилася внаслідок об'єднання трьох окремих проектів МІТ:
- Теоретична робота з планування багатопотокових програм.
- StarTech - паралельна шахова програма побудована для запуску на Thinking Machines Corporation's Connection Machine моделі CM-5
- PCM/Threaded-C – оснований на С пакет для планування continuation-passing потоків на СМ-5
У квітні 1994 року ці три проекти були об'єднані в "Cilk". Перший компілятор Cilk-1 був випущений у вересні 1994 року.
Оригінальний Cilk мову був заснований на ANSI C, з додаванням до Cilk спеціальних ключових слів, для можливості здійснювати паралельність програм.
Cilk був реалізований як транслятор на C, орієнтований на GNU C Compiler (GCC). Остання версія, Cilk 5.4.6, доступна в MIT в лабораторії комп'ютерних наук та штучного інтелекту (CSAIL), але більше не підтримується.
Cilk Arts та Cilk++
До 2006, ринок Cilk був обмежений для високопродуктивних обчислень. Поява багатоядерних процесорів в звичайних обчислювальних системах та продажі сотні мільйонів нових паралельних комп'ютерів, які поставляються з кожним роком все більше і більше, наштовхнула Cilk Arts створити і вивести на ринок сучасну версію Cilk, яка підтримуватиме комерційні потреби програмістів нового покоління. В жовтні 2007 року компанія закрила фінансування компіляторів серії А, і випустила новий продукт — Cilk ++ 1.0, який почав поставлятися в грудні 2008 року.
Cilk ++ відрізняється від Cilk декількома рішеннями: підтримка C ++, підтримка циклів, і hyperobjects — нової конструкції, призначеної для вирішення проблеми в паралельному доступі до глобальних змінних. Cilk ++ був пропрієтарним програмним забезпеченням. Як і його попередник, він був реалізований як компілятор Cilk-to-C ++. Вона підтримує компілятори Microsoft і GNU.
Intel Cilk Plus
31 липня 2009, Cilk Arts оголосила на своєму вебсайті, що її продукти і технічна команда в даний час входять до складу Intel Corp. Intel і Cilk Arts об'єднали свої передові технології, що в подальшому призвело до виходу Intel Cilk Plus у вересні 2010 року. Cilk Plus отримує значні спрощення в конструкціях, запропонованих Cilk Arts в Cilk ++, щоб усунути необхідність в декількох вихідних ключових словах Cilk, додаючи можливість spawn функції мати справу зі змінними, які беруть участь в операціях по скороченню. Cilk Plus відрізняється від Cilk і Cilk ++ додаванням масиву розширень, які включаються в комерційний компілятор (від Intel), а також сумісністю з існуючими відладчиками.
Відмінності між версіями
У початковій реалізації MIT Cilk, ключовим словом, яке визначало функцію написану на Cilk було слово cilk. В цій версії Cilk-процедури можуть безпосередньо викликати C-процедури, але C-процедури не можуть викликати або створювати процедури Cilk. Тому дане ключове слово було необхідне, щоб відрізнити Cilk код від коду C. Cilk Plus знімає ці обмеження, так що функції С і С ++ можуть викликатися в Cilk Plus коді і навпаки.
Функції мови
Принципом конструкції мови Cilk є те, що програміст повинен сам визначити паралельні блоки програми, які можуть безпечно виконуватися паралельно; при цьому вони повинні бути позначені в середовищі виконання, зокрема,в планувальнику, який вирішує, під час виконання, як розділити роботу між процесорами. Саме тому, що обов'язки розділені між процесорами, програма на Cilk може працювати без перезапису на будь-якій кількість процесорів, в тому числі і на одному
Завдання паралелізму: spawn and sync
Головним доповненням до Cilk C є два ключових слова, які в сукупності дозволяють писати паралельні програми
- spawn дозволяє безпечно викликати і запускати функції в паралельному потоці.
- Ключове слово sync вказує на те, що поточна функція не може виконуватись поки не завершаться всі функції, які були викликані раніше.
(В Cilk Plus, ключові слова описуються як _Cilk_spawn і _Cilk_sync або cilk_spawn і cilk_sync, якщо включені заголовки Cilk Plus)
Нижче наведено код рекурсивної реалізації функції Фібоначчі в Cilk, з паралельним викликом рекурсивних функцій, що демонструє використання ключових слів, spawn та sync.
cilk int fib(int n) { if (n < 2) { return n; } else { int x, y; x = spawn fib(n - 1); y = spawn fib(n - 2); sync; return x + y; } }
Cilk Arts та Cilk++
До 2006, ринок Cilk був обмежений для високопродуктивних обчислень. Поява багатоядерних процесорів в звичайних обчислювальних системах та продажі сотні мільйонів нових паралельних комп'ютерів, які поставляються з кожним роком все більше і більше, наштовхнула Cilk Arts створити і вивести на ринок сучасну версію Cilk, яка підтримуватиме комерційні потреби програмістів нового покоління. В жовтні 2007 року компанія закрила фінансування компіляторів серії А, і випустила новий продукт — Cilk ++ 1.0, який почав поставлятися в грудні 2008 року.
У початковій реалізації MIT Cilk, ключовим словом, яке визначало функцію написану на Cilk було слово cilk. В цій версії Cilk-процедури можуть безпосередньо викликати C-процедури, але C-процедури не можуть викликати або створювати процедури Cilk. Тому дане ключове слово було необхідне, щоб відрізнити Cilk код від коду C. Cilk Plus знімає ці обмеження, так що функції С і С ++ можуть викликатися в Cilk Plus коді і навпаки.
Паралельні цикли
В Cilk ++ були додані додаткові конструкції, однією із них є паралельний цикл, який позначається cilk_for в Cilk Plus.
cilk int fib(int n) { if (n < 2) { return n; } else { int x, y; x = spawn fib(n - 1); y = spawn fib(n - 2); sync; return x + y; } }
Цей алгоритму реалізує паралельний цикл, який має таке трактування: тіло циклу, в даному випадку, викликає деяку функцію F, яка отримує як параметр деяке значення з масиву а, виконується для кожного значення і від нуля до n в невизначеному порядку. Специфікація Cilk не визначає точну поведінку конструкції, типова реалізація виконується за принципом "розділяй і володарюй".
Редуктори та гіпероб'єкти
(В Cilk Plus, ключові слова описуються як _Cilk_spawn і _Cilk_sync або cilk_spawn і cilk_sync, якщо включені заголовки Cilk Plus)
Найбільш поширеним типом hyperobject є редуктор, що відповідає пункту відновлення в OpenMP або алгебраїчному поняттю моноїд. Кожен редуктор має одиничний елемент і асоціативну операцію, яка поєднує в собі два значення. Архетипний редуктор є підсумовувачем чисел: одиничний елемент визначається, як рівний нулю, а асоціативна функція обчислює суму. Цей редуктор вбудований в Cilk ++ і Cilk Plus:
// Compute ∑ foo(i) for i from 0 to N, in parallel. cilk::reducer_opadd<float> result(0); cilk_for (int i = 0; i < N; i++) result += foo(i);
Масиви значень
Intel Cilk Plus додає позначення для вираження високорівневих операцій над цілими масивами або секціями масивів
// y ← α x + y void axpy(int n, float alpha, const float *x, float *y) { for (int i = 0; i < n; i++) { y[i] += alpha * x[i]; } }
В Cilk Plus може бути виражено, як:
y[0:n] += alpha * x[0:n];
Це позначення допомагає компіляторові ефективно векторизувати додатки. Intel Cilk Plus дозволяє використовувати С/C++ операції до кількох елементів масиву паралельно, а також надає набір вбудованих функцій, які можуть бути використані для виконання векторизованих зрушень, обернень і скорочень. Подібна функціональність існує в Fortran 90; Cilk Plus відрізняється тим, що він ніколи не виділяє тимчасові масиви, тому використання пам'яті легше передбачити.
Елементарні функції
В Cilk Plus елементарними функціями є регулярні функції, які можна викликати або зі скалярними аргументами або із елементами масиву паралельно. Вони аналогічні функціям в OpenCL.
#pragma simd
Прагма дає дозвіл компіляторові векторизувати цикл навіть у тих випадках, коли автоматична векторизація може призвести до збою. Це найпростіший спосіб вручну застосувати векторизацію.
Дивитись також
- Grand Central Dispatch
- Intel Concurrent Collections (CnC)
- Intel Parallel Building Blocks (PBB)
- Intel Array Building Blocks (ArBB)
- Intel Parallel Studio
- NESL
- OpenMP
- Parallel computing
- Sieve C++ Parallel Programming System
- Threading Building Blocks (TBB)
- Unified Parallel C
Література
- . Архів оригіналу за 26 червня 2015. Процитовано 11 листопада 2016.
- "The Cilk Project" [ 22 листопада 2016 у Wayback Machine.].
- "Intel Cilk Plus: A quick, easy and reliable way to improve threaded performance" [ 22 липня 2012 у Wayback Machine.], Intel.
Посилання
- Official website [ 17 січня 2021 у Wayback Machine.] for Cilk Plus
- Cilk Project website at MIT [ 22 листопада 2016 у Wayback Machine.]
- Arch D. Robison, "Cilk Plus: Language Support for Thread and Vector Parallelism" [ 3 березня 2016 у Wayback Machine.] and "Parallel Programming with Cilk Plus" [ 27 березня 2016 у Wayback Machine.], July 16, 2012.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Cilk Cilk i Cilk Plus ye movami programuvannya zagalnogo priznachennya rozrobleni dlya bagatopotokovih paralelnih obchislen Voni zasnovani na movah C i C yaki voni rozshiryuyut konstrukciyami dlya stvorennya paralelnih potokiv ta fork join metodologiyeyu CilkParadigma imperativne programuvannya Paralelni obchislennya procedurne programuvannya i strukturne programuvannyaData poyavi 1994Rozrobnik Charlz Erik LejzersonSistema tipizaciyi statichna slabka tipizaciya d i dPid vplivom vid CVebsajt cilkplus org Spochatku mova bula rozroblena v 1990 i roki v Massachusetskomu tehnologichnomu instituti MIT v grupi Charlza Lejzersona Piznishe Cilk bula rozshirena v Cilk kompaniyeyu Cilk Arts Cya kompaniya zgodom bula pridbana kompaniyeyu Intel sho dozvolilo zbilshiti sumisnist z isnuyuchim C i C kodom IstoriyaMIT Cilk Mova programuvannya Cilk utvorilasya vnaslidok ob yednannya troh okremih proektiv MIT Teoretichna robota z planuvannya bagatopotokovih program StarTech paralelna shahova programa pobudovana dlya zapusku na Thinking Machines Corporation s Connection Machine modeli CM 5 PCM Threaded C osnovanij na S paket dlya planuvannya continuation passing potokiv na SM 5 U kvitni 1994 roku ci tri proekti buli ob yednani v Cilk Pershij kompilyator Cilk 1 buv vipushenij u veresni 1994 roku Originalnij Cilk movu buv zasnovanij na ANSI C z dodavannyam do Cilk specialnih klyuchovih sliv dlya mozhlivosti zdijsnyuvati paralelnist program Cilk buv realizovanij yak translyator na C oriyentovanij na GNU C Compiler GCC Ostannya versiya Cilk 5 4 6 dostupna v MIT v laboratoriyi komp yuternih nauk ta shtuchnogo intelektu CSAIL ale bilshe ne pidtrimuyetsya Cilk Arts ta Cilk Do 2006 rinok Cilk buv obmezhenij dlya visokoproduktivnih obchislen Poyava bagatoyadernih procesoriv v zvichajnih obchislyuvalnih sistemah ta prodazhi sotni miljoniv novih paralelnih komp yuteriv yaki postavlyayutsya z kozhnim rokom vse bilshe i bilshe nashtovhnula Cilk Arts stvoriti i vivesti na rinok suchasnu versiyu Cilk yaka pidtrimuvatime komercijni potrebi programistiv novogo pokolinnya V zhovtni 2007 roku kompaniya zakrila finansuvannya kompilyatoriv seriyi A i vipustila novij produkt Cilk 1 0 yakij pochav postavlyatisya v grudni 2008 roku Cilk vidriznyayetsya vid Cilk dekilkoma rishennyami pidtrimka C pidtrimka cikliv i hyperobjects novoyi konstrukciyi priznachenoyi dlya virishennya problemi v paralelnomu dostupi do globalnih zminnih Cilk buv propriyetarnim programnim zabezpechennyam Yak i jogo poperednik vin buv realizovanij yak kompilyator Cilk to C Vona pidtrimuye kompilyatori Microsoft i GNU Intel Cilk Plus 31 lipnya 2009 Cilk Arts ogolosila na svoyemu vebsajti sho yiyi produkti i tehnichna komanda v danij chas vhodyat do skladu Intel Corp Intel i Cilk Arts ob yednali svoyi peredovi tehnologiyi sho v podalshomu prizvelo do vihodu IntelCilk Plus u veresni 2010 roku Cilk Plus otrimuye znachni sproshennya v konstrukciyah zaproponovanih Cilk Arts v Cilk shob usunuti neobhidnist v dekilkoh vihidnih klyuchovih slovah Cilk dodayuchi mozhlivist spawn funkciyi mati spravu zi zminnimi yaki berut uchast v operaciyah po skorochennyu Cilk Plus vidriznyayetsya vid Cilk i Cilk dodavannyam masivu rozshiren yaki vklyuchayutsya v komercijnij kompilyator vid Intel a takozh sumisnistyu z isnuyuchimi vidladchikami Vidminnosti mizh versiyami U pochatkovij realizaciyi MIT Cilk klyuchovim slovom yake viznachalo funkciyu napisanu na Cilk bulo slovo cilk V cij versiyi Cilk proceduri mozhut bezposeredno viklikati C proceduri ale C proceduri ne mozhut viklikati abo stvoryuvati proceduri Cilk Tomu dane klyuchove slovo bulo neobhidne shob vidrizniti Cilk kod vid kodu C Cilk Plus znimaye ci obmezhennya tak sho funkciyi S i S mozhut viklikatisya v Cilk Plus kodi i navpaki Funkciyi moviPrincipom konstrukciyi movi Cilk ye te sho programist povinen sam viznachiti paralelni bloki programi yaki mozhut bezpechno vikonuvatisya paralelno pri comu voni povinni buti poznacheni v seredovishi vikonannya zokrema v planuvalniku yakij virishuye pid chas vikonannya yak rozdiliti robotu mizh procesorami Same tomu sho obov yazki rozdileni mizh procesorami programa na Cilk mozhe pracyuvati bez perezapisu na bud yakij kilkist procesoriv v tomu chisli i na odnomu Zavdannya paralelizmu spawn and sync Golovnim dopovnennyam do Cilk C ye dva klyuchovih slova yaki v sukupnosti dozvolyayut pisati paralelni programi spawn dozvolyaye bezpechno viklikati i zapuskati funkciyi v paralelnomu potoci Klyuchove slovo sync vkazuye na te sho potochna funkciya ne mozhe vikonuvatis poki ne zavershatsya vsi funkciyi yaki buli viklikani ranishe V Cilk Plus klyuchovi slova opisuyutsya yak Cilk spawn i Cilk sync abo cilk spawn i cilk sync yaksho vklyucheni zagolovki Cilk Plus Nizhche navedeno kod rekursivnoyi realizaciyi funkciyi Fibonachchi v Cilk z paralelnim viklikom rekursivnih funkcij sho demonstruye vikoristannya klyuchovih sliv spawn ta sync cilk int fib int n if n lt 2 return n else int x y x spawn fib n 1 y spawn fib n 2 sync return x y Cilk Arts ta Cilk Do 2006 rinok Cilk buv obmezhenij dlya visokoproduktivnih obchislen Poyava bagatoyadernih procesoriv v zvichajnih obchislyuvalnih sistemah ta prodazhi sotni miljoniv novih paralelnih komp yuteriv yaki postavlyayutsya z kozhnim rokom vse bilshe i bilshe nashtovhnula Cilk Arts stvoriti i vivesti na rinok suchasnu versiyu Cilk yaka pidtrimuvatime komercijni potrebi programistiv novogo pokolinnya V zhovtni 2007 roku kompaniya zakrila finansuvannya kompilyatoriv seriyi A i vipustila novij produkt Cilk 1 0 yakij pochav postavlyatisya v grudni 2008 roku U pochatkovij realizaciyi MIT Cilk klyuchovim slovom yake viznachalo funkciyu napisanu na Cilk bulo slovo cilk V cij versiyi Cilk proceduri mozhut bezposeredno viklikati C proceduri ale C proceduri ne mozhut viklikati abo stvoryuvati proceduri Cilk Tomu dane klyuchove slovo bulo neobhidne shob vidrizniti Cilk kod vid kodu C Cilk Plus znimaye ci obmezhennya tak sho funkciyi S i S mozhut viklikatisya v Cilk Plus kodi i navpaki Paralelni cikli V Cilk buli dodani dodatkovi konstrukciyi odniyeyu iz nih ye paralelnij cikl yakij poznachayetsya cilk for v Cilk Plus cilk int fib int n if n lt 2 return n else int x y x spawn fib n 1 y spawn fib n 2 sync return x y Cej algoritmu realizuye paralelnij cikl yakij maye take traktuvannya tilo ciklu v danomu vipadku viklikaye deyaku funkciyu F yaka otrimuye yak parametr deyake znachennya z masivu a vikonuyetsya dlya kozhnogo znachennya i vid nulya do n v neviznachenomu poryadku Specifikaciya Cilk ne viznachaye tochnu povedinku konstrukciyi tipova realizaciya vikonuyetsya za principom rozdilyaj i volodaryuj Reduktori ta giperob yekti V Cilk Plus klyuchovi slova opisuyutsya yak Cilk spawn i Cilk sync abo cilk spawn i cilk sync yaksho vklyucheni zagolovki Cilk Plus Najbilsh poshirenim tipom hyperobject ye reduktor sho vidpovidaye punktu vidnovlennya v OpenMP abo algebrayichnomu ponyattyu monoyid Kozhen reduktor maye odinichnij element i asociativnu operaciyu yaka poyednuye v sobi dva znachennya Arhetipnij reduktor ye pidsumovuvachem chisel odinichnij element viznachayetsya yak rivnij nulyu a asociativna funkciya obchislyuye sumu Cej reduktor vbudovanij v Cilk i Cilk Plus Compute foo i for i from 0 to N in parallel cilk reducer opadd lt float gt result 0 cilk for int i 0 i lt N i result foo i Masivi znachen Intel Cilk Plus dodaye poznachennya dlya virazhennya visokorivnevih operacij nad cilimi masivami abo sekciyami masiviv y a x y void axpy int n float alpha const float x float y for int i 0 i lt n i y i alpha x i V Cilk Plus mozhe buti virazheno yak y 0 n alpha x 0 n Ce poznachennya dopomagaye kompilyatorovi efektivno vektorizuvati dodatki Intel Cilk Plus dozvolyaye vikoristovuvati S C operaciyi do kilkoh elementiv masivu paralelno a takozh nadaye nabir vbudovanih funkcij yaki mozhut buti vikoristani dlya vikonannya vektorizovanih zrushen obernen i skorochen Podibna funkcionalnist isnuye v Fortran 90 Cilk Plus vidriznyayetsya tim sho vin nikoli ne vidilyaye timchasovi masivi tomu vikoristannya pam yati legshe peredbachiti Elementarni funkciyi V Cilk Plus elementarnimi funkciyami ye regulyarni funkciyi yaki mozhna viklikati abo zi skalyarnimi argumentami abo iz elementami masivu paralelno Voni analogichni funkciyam v OpenCL pragma simd Pragma daye dozvil kompilyatorovi vektorizuvati cikl navit u tih vipadkah koli avtomatichna vektorizaciya mozhe prizvesti do zboyu Ce najprostishij sposib vruchnu zastosuvati vektorizaciyu Divitis takozhGrand Central Dispatch Intel Concurrent Collections CnC Intel Parallel Building Blocks PBB Intel Array Building Blocks ArBB Intel Parallel Studio NESL OpenMP Parallel computing Sieve C Parallel Programming System Threading Building Blocks TBB Unified Parallel CLiteratura Arhiv originalu za 26 chervnya 2015 Procitovano 11 listopada 2016 The Cilk Project 22 listopada 2016 u Wayback Machine Intel Cilk Plus A quick easy and reliable way to improve threaded performance 22 lipnya 2012 u Wayback Machine Intel PosilannyaOfficial website 17 sichnya 2021 u Wayback Machine for Cilk Plus Cilk Project website at MIT 22 listopada 2016 u Wayback Machine Arch D Robison Cilk Plus Language Support for Thread and Vector Parallelism 3 bereznya 2016 u Wayback Machine and Parallel Programming with Cilk Plus 27 bereznya 2016 u Wayback Machine July 16 2012