Итак, я написал программу, которая генерирует изображение mandelbrot. Затем я решил написать его таким образом, чтобы использовать определенное количество потоков для его ускорения. Это то, что я придумал:Темы в C++ не генерируют ускорение при обработке изображений mandelbrot
void mandelbrot_all(std::vector<std::vector<int>>& pixels, int X, int Y, int threadCount) {
using namespace std;
vector<thread> threads;
int numThreads = threadCount;
for(int i=0; i<numThreads; i++) {
threads.push_back(thread (mandelbrot_range, std::ref(pixels), i*X/numThreads, 0, X*(i+1)/numThreads, Y, X));
}
for(int i=0; i<numThreads; i++) {
threads[i].join();
}
}
Намерение разделить обработку на куски и обрабатывать каждую из них в отдельности. Когда я запускаю программу, она принимает число как аргумент, который будет использоваться как количество потоков, которые будут использоваться в программе для этого запуска. К сожалению, я получаю одинаковые времена для любого количества потоков.
Есть ли что-то о потоковом в C++, которое мне не хватает? Должен ли я добавить что-то или шаблонный шаблон, чтобы заставить потоки работать одновременно? Или это то, как я делаю темы просто глупыми?
Я пробовал использовать этот код на малине pi и моем четырехъядерном ноутбуке с такими же результатами.
Любая помощь будет оценена по достоинству.
Начальные потоки стоят немного дороже. Поэтому вы хотите сделать тест, который занимает больше нескольких секунд. Кроме того, если у вас есть мьютекс для защиты данных, он может сериализовать ваши потоки. –
Можете ли вы объяснить, что вы подразумеваете под «мьютексом для защиты данных»? – PoisonRain
Вопрос, аналогичный http://stackoverflow.com/questions/8535404/programming-for-multiple-cores-mandelbrot-set-c –