LocalazyLocalazy
Cilk é uma linguagem de programação paralela desenvolvida no MIT por Charles E. Leiserson, Keith H. Randall, e Silviu C. Craciunas. É baseada na linguagem de programação C e acrescenta algumas palavras-chave para apoiar o paralelismo. Os programas de leite são executados por um sistema de tempo de execução que gere um conjunto de filamentos de trabalhadores. Quando uma função Cilk é invocada, o sistema de tempo de execução gera um novo fio para executar a função. O fio desovado pode por sua vez desovar outros fios, criando uma árvore de fios. O sistema Cilk runtime foi concebido para funcionar com qualquer modelo de programação paralela, tal como memória partilhada ou passagem de mensagens. Contudo, o modelo mais comum é a memória partilhada, onde cada linha tem os seus próprios dados privados, mas pode também aceder a dados partilhados. Cilk fornece algumas palavras-chave para apoiar o paralelismo. A mais importante é "cilk_spawn", que despoleta um novo fio para executar uma função. O fio desovado pode, por sua vez, desovar outros fios, criando uma árvore de fios. A palavra-chave "cilk_sync" é utilizada para sincronizar todos os fios de um programa Cilk. Quando um fio atinge uma declaração "cilk_sync", espera que todos os fios de criança terminem antes de prosseguir. Isto assegura que todos os fios tenham terminado o seu trabalho antes de o programa continuar. O modelo de programação Cilk é baseado em "dividir e conquistar". Para paralelizar um problema, divide-se em sub-problemas menores, que são depois resolvidos em paralelo. Esta abordagem é bem adequada a problemas que podem ser divididos em sub-problemas independentes. Um exemplo simples de um programa Cilk é o programa "Olá, Mundo! #incluir <stdio.h> int principal() { cilk_spawn printf("Olá, "); printf("Mundo!\n"); cilk_sync; devolução 0; } Neste programa, o fio "Olá, Mundo!" é impresso por dois fios. O primeiro fio é gerado pela palavra-chave "cilk_spawn" e imprime o fio "Hello, ". O segundo fio, que é o fio principal, imprime a corda "Mundo! A palavra-chave "cilk_sync" sincroniza os dois fios, para que o fio "World!" não seja impresso até que o fio "Hello, " tenha sido impresso. O Cilk é uma ferramenta poderosa para a programação paralela, mas tem alguns inconvenientes. Primeiro, os programas de Cilk podem ser difíceis de compreender e de depurar. Segundo, o sistema Cilk runtime pode ser lento, especialmente quando se desovam muitos fios. Finalmente, Cilk não suporta alguns modelos importantes de programação paralela, tais como o paralelismo de dados.