此编译指示指示编译器完全展开循环。 仅当编译器可以确定循环包含的迭代次数时,它才有效。
可以使用 #pragma unroll_completely
展开向量化和非向量化循环。
即,#pragma unroll_completely
适用于 --no_vectorize
和 --vectorize
。
使用 -O3
-Otime
进行编译时,如果编译器认为展开循环比较有利,则会自动将其展开。
可以使用此编译指示请求编译器完全展开未自动完全展开的循环。
仅当有证据表明(例如,从 --diag_warning=optimizations
中),编译器本身没有以最优方式展开循环时,才应使用此 #pragma
。
使用 #pragma unroll_completely
时,只能将其紧靠 for 循环、while 循环或 do ... while 循环前面放置。
在外部循环中使用 #pragma unroll_completely
可防止向量化。
另一方面,在某些情况下,在内部循环中使用 #pragma unroll_completely
可能会有所帮助。