Я пробую несколько переключателей компилятора для программы, которая выполняет свёртку ядра sobel на двух изображениях (2000Hx3000W и 6800Hx8500W).Есть некоторые наблюдения, которые я не могу интерпретировать, ниже приведены флаги компилятора данных и время, измеренное в секундах (пожалуйста, обратите внимание на последний столбец, так как это означает свертку по оси Y для большего изображения):
O2-march=barcelona 0.1483326 0.833264 1.6018882 28.6711242
O2-ftree-vectorize 0.1462104 0.847973 1.506708 26.628592
O2 0.1468406 0.8368156 1.5999718 20.61377564
O2-ftree-vectorize-march=barcelona 0.1441898 0.827366 1.4687354 15.2572644
Я ожидал, что -O2-март = барселона будет умеренно лучше, учитывая, что машина, на которой я работаю, является AMD в Барселоне.Любые идеи о том, почему -O2 лучше, чем -O2 -march?
О -ftree-vectorize, он должен иметь возможность выполнять инструкции параллельно, поскольку мой цикл не зависит от зависимостей.Но тогда, -O2-ftree-vectorize-march = barcelona является лучшим из лота, когда индивидуально есть разумные различия во времени.
Было бы замечательно, если бы я мог понять это поведение.
С уважением,
Саян