Плохой — потому что рекурсия.
Если рассматривать работу приведенного алгоритма в терминах абсолютного параллелизма — все ок. Треды создаются — под них всегда есть место, они живут счастливо и им не тесно.
В системе с ограниченными ресурсами все станет грустно. Огребем постоянное переключение контекстов и наше параллельное приложение будет работать в разы меделеннее последовательной реализации. Решается это ограничением уровня вложенности.
Ну и алгортим приведенный — не лучший с точки зрения подсчета — многие вычисления дублируются по много десятков раз.
Подсчет чисел Фибоначчи — далеко не лучший пример для демонстрационного параллельного приложения. Хотя в академических кругах его любят.
Cilk+ — это не новый язык, это расширение языков С/С++ с помощью компилятора. По сути, тоже самое что и openmp.
Поддержка Cilk+ есть в GCC 4.7. Или тут: software.intel.com/en-us/articles/intel-cilk-plus/
Один раз из под одной консоли.
Запускаем cmd из под админа, вводим пароль один раз, ставим из консольки десяток програм, и не катим бочечку на семерочку.
Думаю взять пяток с самой интересной историей создания. Например, появишиеся в результате поиска реальных ошибок.
Тем более, многие правила очень всеобъемлющи и могут покрывать с десяток различных случаев. Не только указанные в примерах.
Примерно так:
cilk_for (int x = 0; x < 1000000; ++x) { … }
long fib_parallel(long n)
{
long x, y;
if (n < 2) return n;
x = cilk_spawn fib_parallel(n-1);
y = fib_parallel(n-2);
cilk_sync;
return (x+y);
}
OpenMP
long fib_parallel(long n)
{
long x, y;
if (n < 2) return n;
#pragma omp task default(none) shared(x,n)
{
x = fib_parallel(n-1);
}
y = fib_parallel(n-2);
#pragma omp taskwait
return (x+y);
}
PS И не надо спавнить оба треда — достаточно одного. Так будет быстрее.
В остальном все аналогично.
Плохой — потому что рекурсия.
Если рассматривать работу приведенного алгоритма в терминах абсолютного параллелизма — все ок. Треды создаются — под них всегда есть место, они живут счастливо и им не тесно.
В системе с ограниченными ресурсами все станет грустно. Огребем постоянное переключение контекстов и наше параллельное приложение будет работать в разы меделеннее последовательной реализации. Решается это ограничением уровня вложенности.
Ну и алгортим приведенный — не лучший с точки зрения подсчета — многие вычисления дублируются по много десятков раз.
Cilk+ — это не новый язык, это расширение языков С/С++ с помощью компилятора. По сути, тоже самое что и openmp.
Поддержка Cilk+ есть в GCC 4.7. Или тут: software.intel.com/en-us/articles/intel-cilk-plus/
Хотя правильный ответ: «Не знаю».
ЗЫ не увидел ничего кулхацкерного…
Да я понимаю, что вещь очень известная и простая, но многие их не знают. Очень многие.
Если наклейки нет и серийника тоже — смело в суд.
Скажите еще, что она не нужна.
Запускаем cmd из под админа, вводим пароль один раз, ставим из консольки десяток програм, и не катим бочечку на семерочку.
Тем более, многие правила очень всеобъемлющи и могут покрывать с десяток различных случаев. Не только указанные в примерах.