Мой вопрос здесь заключается в том, какую структуру данных я должен использовать, чтобы распределить работу между потоками и получить из них вычисленное значение. Первое, что у меня на уме, это заполнить вектор [0] .. vector [63999] (для 800×800 пикселей) структурой, которая содержит x, y и iterate_value. Передайте эти векторы каждому узлу -> затем разделите данный вектор на каждое ядро (Os-поток) -> затем разделите данный вектор на каждый поток. Есть ли другой возможный способ отправить и получить значения? а также, если я делаю это векторным способом, я должен передать вектор за передачей по значению или передать по ссылке, какой из них будет лучше в этом случае?
Разные точки набора Мандельброта требуют различного количества времени для вычисления (точки возле края стоят дороже), поэтому если у каждого работника четное количество пикселей, некоторые из них будут заканчиваться быстрее, чем другие.
Разбейте изображение на маленькие прямоугольники (плитки). Создайте рабочий список, используя многопоточную очередь, и заполните его плитками. Каждый рабочий поток зацикливается, выбирая плитку из рабочего списка и отправляя результаты, пока рабочий список не станет пустым.
Пиксели расположены равномерно, так зачем отправлять координаты для каждого? Просто скажите каждому узлу координаты x и y его нижнего левого пикселя, расстояние между пикселями и количество пикселей. Таким образом, спецификация вашей рабочей единицы имеет небольшой постоянный размер.
Что касается более крупного проекта, нет смысла иметь больше рабочих потоков, чем физических ядер для работы. Переключение контекста нескольких потоков на ядро только снижает производительность.