我有一个非常基本的问题,涉及编译器(在我的例子中是 gcc)使用 -O 标志进行的优化。我想在这里只关注循环的矢量化。假设一个简单的 for 循环,没有指针别名/竞争条件的危险。是否可以重写此循环,使带有 -O0 标志的编译器生成的代码与循环由编译器矢量化时一样快?
很可能:不。使用 -O0 为编译器提供全权委托,使代码尽可能低效。当然,它并不是什么邪恶的野兽想惹你,但除非你告诉它,否则它不会努力。
一些优化通常必须由编译器完成。一般来说,通过源代码中的微优化,您无法获得与使用积极的编译器优化相同的性能。
关于您的具体示例:是的,您可以在代码中包含向量指令以强制使用向量指令。但是,如果您这样做,您的代码可能无法在所有平台上运行,除非您非常清楚自己在做什么并且始终提供后备。