관심 영역 (자르기) 알고리즘을 포함하여 일부 이미지 처리 알고리즘이있는 라이브러리가 있습니다. GCC로 컴파일 할 때, 자동 벡터 라이저는 많은 코드를 가속화하지만 Crop 알고리즘의 성능을 악화시킵니다. 특정 루프를 벡터화 기가 무시하도록 플래그를 지정하는 방법이 있습니까? 아니면 더 나은 성능을 위해 코드를 구성하는 더 좋은 방법이 있습니까? SizeX
소스 OriginX
의 폭자동 벡터화 관심 영역 (자르기)
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;
}
}
내가 최적화 변경에 대한 아무것도 발견하지 않았습니다 관심
나는 귀하의 질문을 정확하게 undestand 모르겠습니다. 루프를 벡터화하지 않도록 플래그를 지정하거나 더 나은 성능을 위해 구조를 재구성하고 싶습니까? 나에 대한 모순처럼 보입니다. 성능과 관련하여 : 두 범위가 겹칠 수 있습니까? 그렇지 않다면 포인터에'__restrict'를 사용하여 컴파일러에게 알리려합니까? Pointeraliasing은 최적화를위한 큰 진수입니다. 게다가 : 내부 루프에'std :: copy'를 사용하는 것에 대해 생각해 보셨습니까? 그게 더 잘 최적화되고 코드가 더 짧아 질 수 있습니다. – Grizzly
그것은 모순처럼 보입니다,하지만 그 생각입니다. 현재 벡터 라이 제이션은 성능을 저하 시키므로이 루프를 사용하지 않도록 설정하거나 코드를 향상 시키면 내가 생각할 수있는 두 가지 옵션이 있습니다! 나는 제한하고 사본을 줄 것이다. – illumi
이 경우 질문에 작물의 성능이 나 빠졌다는 것을 언급하고 싶을 수도 있습니다. 그것이 의미하는대로 나는 자르기 알고리즘의 성능이 벡터화에 의해 변하지 않은 것으로 가정했다.당신이 아직 그것을 모르는 경우에,'-ftree-vectorizer-verbose = n' 플래그는 옵티마이 저가 무엇을하고 있는지에 대한 더 구체적인 정보를 얻는 데 도움을 줄 것입니다. – Grizzly