делается
result_array;
foreach(k, post; posts.parallel) {
auto new_array = new int()[size];
int id = logicfunc(new_array, AA);
result_array[k] = posts[id];
}
В качестве проблемы мне кажется может быть, что каждый тред созданный через parallel будет обращаться к общему АА и еще и к общему глобальному массиву. И там может быть локи или дата рейсы возникать?
В общем оно работает почти с такой же скоростью что и без parallel.. вот думаю как понять в чем косяк :)
В идеале как-то наверное каждому треду дать свою копию данных и чтобы он с копией своей работал.. по памяти больше получится, но по скорости быстрее..
Еще если сделать хак и new_array сделать static как будто мы знаем размер - тоже быстрее сильно начинает работать, но размера мы не знаем по-настоящему и приходится на куче выделять.
Пробовал тыкать в разные места shared/__gshared но особо не дало эффекта - может не туда вставлял)
у тебя словарь только на чтение же? тогда параллельный доступ к нему не должен быть проблемой, но от реализации зависит, конечно, могут быть нюансы. так что все зависит от logicfunc, что она там делает и как.
Он обычный.. вот как его сделать только на чтение?
А чё ты пытаешься сделать?)
сделать параллельную версию кода =)
Обсуждают сегодня