私はこのclang referenceに従ってclangで以下の関数をベクトル化しようとしています。バイト配列のベクトルをとり、this RFCに従ってマスクを適用します。clangの関数をベクトル化する
static void apply_mask(vector<uint8_t> &payload, uint8_t (&masking_key)[4]) {
#pragma clang loop vectorize(enable) interleave(enable)
for (size_t i = 0; i < payload.size(); i++) {
payload[i] = payload[i]^masking_key[i % 4];
}
}
次のフラグが打ち鳴らすために渡されます。
-O3
-Rpass=loop-vectorize
-Rpass-analysis=loop-vectorize
をしかし、ベクトル化が次のエラーで失敗します
WebSocket.cpp:5:
WebSocket.h:14:
In file included from boost/asio/io_service.hpp:767:
In file included from boost/asio/impl/io_service.hpp:19:
In file included from boost/asio/detail/service_registry.hpp:143:
In file included from boost/asio/detail/impl/service_registry.ipp:19:
c++/v1/vector:1498:18: remark: loop not vectorized: could not determine number
of loop iterations [-Rpass-analysis]
return this->__begin_[__n];
^
c++/v1/vector:1498:18: error: loop not vectorized: failed explicitly specified
loop vectorization [-Werror,-Wpass-failed]
私はループのためにこれをベクトル化するにはどうすればよいですか?
あなたはループの外ベクトルの大きさをキャプチャし、ループ条件のためにそれを使用した場合はどうなりますか? – NathanOliver
すでに試しました。助けにならない! – rahul
このループは、ベクトル化するのが簡単です。コンパイラが明示的に '-03'を暗黙的に実行するかどうかチェックしましたか? –