Возможно, лучший способ ответить (1) заключается в том, что планирование Cilk - это первое, когда вы крадете задачу, но в противном случае глубже.
Ответ на (2) заключается в том, что планировщик задач Cilk не обращает внимания на сложность задач.
Ключевым принципом для понимания является «Лемма Брента» (обнаруженная ранее Грэмом). Лемма показывает, что (в соответствии с предположениями PRAM), которая давала жадный планировщик (тот, который никогда не позволяет работнику бездействовать, если есть работа), тогда абсолютное наилучшее возможное расписание не превышает 2x быстрее, чем самый худший график, независимо от того, каковы сложности задач.
Интуиция, стоящая за пределом 2x, заключается в том, что во время выполнения, если ни один работник не работает над задачей на критическом пути (жужжание по критическому пути), каждый рабочий занят (жует общую работу). Критический путь плюс общая работа не может превышать в два раза общую работу алгоритма.
Предполагается, что предположение PRAM является самым слабым звеном на реальных машинах, где промахи в кеше могут занимать порядка 100 раз больше времени, чем кеширование. Поэтому беспокоиться о сложности задач не так важно, как кэш. В зависимости от того, как используется Cilk, он очень хорошо работает с кешем (рекурсивными программами) или плохо (back-to-back cilk_for loop).
благодарит за ответ! Я проверил лемму Брента, но я не понимаю, как извлекается 2x ... Я понимаю, что локальность данных влияет на производительность, однако, что, если процессоры не являются однородными? не имеет значения, где вы выполняете определенную задачу? – user2609910
Я добавил абзац ответа, чтобы объяснить 2x slimit. Слайды 16 и 17 из http://courses.cs.vt.edu/cs5114/spring2010/notes0422.pdf получили более строгое ограничение 2x. –
спасибо, что имеет смысл. мне интересно подумать, можем ли мы иметь такое же предположение, когда мы используем кражу работы с гетерогенными ядрами ... – user2609910