Мне сказали, что PyRun, https://www.egenix.com/products/python/PyRun/ , также является опцией.
Глядя на ваш код, вы делаете огромное количество выделений в вашем узком цикле - в каждой итерации вы динамически выделяете два двухэлементных вектора, а затем выталкиваете их обратно в вектор результата (таким образом создавая копии обоих векторов); это последнее выталкивание будет иногда вызывать перераспределение и копирование содержимого вектора.
Распределение кучи происходит относительно медленно, даже если ваша реализация использует быстрый распределитель фиксированного размера для небольших блоков. В худшем случае распределитель общего назначения может даже использовать глобальную блокировку; если это так, то это сведет на нет все преимущества многопоточности, поскольку каждый поток будет тратить много времени на ожидание распределения кучи.
Конечно, профилирование покажет вам, ограничивает ли распределение кучи вашу производительность или это что-то другое. Я бы сделал два конкретных предложения по сокращению выделения кучи:
std:: array
(или std::tr1::array
или boost::array
); "контейнер" array
не использует выделение кучи для своих элементов (они хранятся как массив C). зарезервировать()
достаточно места для этих элементов перед их вставкой. Из вашего описания у нас мало что есть, однако, давайте посмотрим, смогу ли я помочь:
Сначала посмотрите на эти области.