2014-02-04 2 views
0

Я пишу программу C, которая выглядит следующим образом:Автоматическая многопоточная обработка?

for (int i=0;i<n;i++){ 
    [makes new file for i: i.txt] 
    [runs a long and intensive computation] 
    [writes to i.txt] 
    [closes i.txt]} 

где п некоторое большое число. Очевидно, что сразу несколько итераций могут выполняться параллельно, так как они не зависят друг от друга. У меня на моем процессоре восемь ядер, поэтому мне кажется, что я хочу, чтобы моя программа распространяла итерации на восьми ядрах, поэтому она работает как можно быстрее. Это означает, что я хочу, чтобы программа была многопоточной.

Мой вопрос заключается в том, нужно ли вручную многопоточно обрабатывать этот процесс на C, или многопоточность выполняется на определенном уровне автоматически. Я собираюсь с GCC, и я знаю, что GCC оптимизируется хорошо, но я не знаю, автоматически ли он будет многопоточным. Я также не знаю, может ли моя ОС (Debian Linux) автоматически не распространять программу на все восемь ядер моего процессора. Если нет, есть ли способ, которым я могу получить его в многопоточном режиме, не имея на самом деле написать многопоточный код в C?

+5

OpenMP предназначен для такого рода вещи. '#pragma omp parallel for' - это все, что вам нужно сказать, и в основном это то, что вы хотите. – tmyklebu

+1

вы также можете попробовать многопроцессорную обработку –

+0

Еще один важный вопрос - как защитить от нескольких потоков, пытающихся одновременно обращаться к вашим файлам. – ryyker

ответ

2

Вы можете многопоточно его вручную, если хотите, или можете использовать библиотеки и инструменты, которые берут на себя как можно меньше или меньше ответственности. OpenMP, безусловно, стоит посмотреть.

1

Простой ответ: GCC не делает автоматическую многопоточность сама по себе. Многопоточность определяется в слоях, строго выше C, поэтому GCC делает это как бы нарушение уровня.

Это, как говорится, есть много библиотек, которые облегчают работу (не для того, чтобы вручную использовать многопоточность для вашего конкретного случая - это большая работа), а некоторые из них более тесно интегрируются на уровне языка. OpenMP упоминается другими.

0

Вы можете также рассмотреть новые дополнения к C11 standard относительно применения многопоточности

Смежные вопросы