Я пишу программу 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?
OpenMP предназначен для такого рода вещи. '#pragma omp parallel for' - это все, что вам нужно сказать, и в основном это то, что вы хотите. – tmyklebu
вы также можете попробовать многопроцессорную обработку –
Еще один важный вопрос - как защитить от нескольких потоков, пытающихся одновременно обращаться к вашим файлам. – ryyker