В чем разница между parallel_for_each и parallel_for в среде выполнения параллелизма MSVC? - PullRequest
4 голосов
/ 14 декабря 2011

parallel_for_each имеет форму:

Concurrency::parallel_for_each(start_iterator, end_iterator, function_object);

, но parallel_for также имеет аналогичную форму:

Concurrency::parallel_for(start_value, end_value, function_object);

, так в чем разница между Concurrency::parallel_for иConcurrency::parallel_for_each алгоритмы, используемые в программировании для нескольких ядер?

1 Ответ

7 голосов
/ 14 декабря 2011

Я не знаю, о какой библиотеке вы говорите, но похоже, что эта требует итераторов:

Concurrency::parallel_for_each(start_iterator, end_iterator, function_object);

И, вероятно, имеет тот же эффект, что и этот (хотя и не обязательно в том же порядке):

for(sometype i = start_iterator; i != end_iterator; ++i) {
    function_object(*i);
}

Например:

void do_stuff(int x) { /* ... */ }
vector<int> things;
// presumably calls do_stuff() for each thing in things
Concurrency::parallel_for_each(things.begin(), things.end(), do_stuff);

Другой принимает значения, поэтому, скорее всего, он имеет такой же эффект (но, опять же, без гарантированного порядка):

for(sometype i = start_value; i != end_value; ++i) {
    function_object(i);
}

Попробуйте запустить это:

void print_value(int value) {
    cout << value << endl;
}

int main() {
    // My guess is that this will print 0 ... 9 (not necessarily in order)
    Concurrency::parallel_for(0, 10, print_value);
    return 0;
}

РЕДАКТИРОВАТЬ: Вы можете найти подтверждение этого поведения в Ссылки параллельного алгоритма .

...