LocalazyLocalazy
Cilk je paralelný programovací jazyk, ktorý na MIT vyvinuli Charles E. Leiserson, Keith H. Randall a Silviu C. Craciunas. Je založený na programovacom jazyku C a pridáva niekoľko kľúčových slov na podporu paralelizmu. Programy Cilk sa vykonávajú pomocou runtime systému, ktorý spravuje fond pracovných vlákien. Keď sa zavolá funkcia Cilk, runtime systém vytvorí nové vlákno na vykonanie funkcie. Založené vlákno môže následne založiť ďalšie vlákna, čím sa vytvorí strom vlákien. Runtime systém Cilk je navrhnutý tak, aby fungoval s akýmkoľvek modelom paralelného programovania, ako je zdieľaná pamäť alebo odovzdávanie správ. Najbežnejším modelom je však zdieľaná pamäť, kde má každé vlákno svoje vlastné súkromné údaje, ale môže pristupovať aj k zdieľaným údajom. Cilk poskytuje niekoľko kľúčových slov na podporu paralelizmu. Najdôležitejším je "cilk_spawn", ktorý vytvorí nové vlákno na vykonávanie funkcie. Zrodené vlákno môže následne zrodiť ďalšie vlákna, čím sa vytvorí strom vlákien. Kľúčové slovo "cilk_sync" sa používa na synchronizáciu všetkých vlákien v programe Cilk. Keď vlákno dosiahne príkaz "cilk_sync", počká, kým všetky podriadené vlákna skončia, a až potom pokračuje. Tým sa zabezpečí, že všetky vlákna dokončia svoju prácu pred pokračovaním programu. Programovací model Cilk je založený na princípe "rozdeľ a panuj". Na paralelizáciu sa problém rozdelí na menšie podproblémy, ktoré sa potom riešia paralelne. Tento prístup je vhodný pre problémy, ktoré možno rozdeliť na nezávislé podproblémy. Jednoduchým príkladom programu Cilk je program "Hello, World!": #include <stdio.h> int main() { cilk_spawn printf("Hello, "); printf("World!\n"); cilk_sync; return 0; } V tomto programe sa reťazec "Hello, World!" vypisuje dvoma vláknami. Prvé vlákno je spustené kľúčovým slovom "cilk_spawn" a vytlačí reťazec "Hello, ". Druhé vlákno, ktoré je hlavným vláknom, vytlačí reťazec "World!". Kľúčové slovo "cilk_sync" synchronizuje tieto dve vlákna, takže reťazec "World!" sa nevytlačí, kým sa nevytlačí reťazec "Hello, ". Cilk je výkonný nástroj na paralelné programovanie, ale má niekoľko nevýhod. Po prvé, programy Cilk môžu byť náročné na pochopenie a ladenie. Po druhé, runtime systém Cilk môže byť pomalý, najmä pri spúšťaní mnohých vlákien. Nakoniec, Cilk nepodporuje niektoré dôležité modely paralelného programovania, napríklad dátový paralelizmus.