У меня есть библиотека, которая имеет некоторые алгоритмы обработки изображений, включая алгоритм Region of Interest (crop). При компиляции с GCC автоматический векторный указатель ускоряет выполнение большого количества кода, но ухудшает производительность алгоритма Crop. Есть ли способ помечать определенный цикл для игнорирования векторизатором или есть лучший способ структурирования кода для лучшей производительности?Автоматическая векторная география Область интереса (культура)
for (RowIndex=0;RowIndex<Destination.GetRows();++RowIndex)
{
rowOffsetS = ((OriginY + RowIndex) * SizeX) + OriginX;
rowOffsetD = (RowIndex * Destination.GetColumns());
for (ColumnIndex=0;ColumnIndex<Destination.GetColumns();++ColumnIndex)
{
BufferSPtr=BufferS + rowOffsetS + ColumnIndex;
BufferDPtr=BufferD + rowOffsetD + ColumnIndex;
*BufferDPtr=*BufferSPtr;
}
}
Где SizeX
ширина источника OriginX
является левой области интереса OriginY
является вершиной области интереса
Я не уверен, что правильно задал вопрос. Вы хотите либо обозначить этот цикл, чтобы он не был векторизован, либо реструктурировал его для лучшей производительности? Кажется, это противоречие. Но что касается производительности: могут ли два диапазона перекрываться? Если нет: вы используете '__restrict' на указателе, чтобы сделать это ясным для компилятора? Pointeraliasing - большой демонстратор для оптимизации. Кроме того: подумали ли вы об использовании 'std :: copy' для вашего внутреннего цикла? Это может быть лучше оптимизировано и сделает ваш код короче. – Grizzly
Это похоже на противоречие, но это идея. Векторизация в настоящее время ухудшает производительность, поэтому либо отключить ее для этого цикла, либо улучшить код - это два варианта, о которых я мог подумать! Я дам ограничить и скопировать. – illumi
Возможно, вы захотите упомянуть, что производительность для урожая в этом случае ухудшается в вашем вопросе. В его основе я предполагал, что выполнение алгоритма Crop остается неизменным при векторизации.Если вы еще этого не знаете, флаг '-ftree-vectorizer-verbose = n' может помочь вам получить более конкретную информацию о том, что делает оптимизатор и почему. – Grizzly