Что означает слишком много BB в цикле, не может векторизовать? - PullRequest
4 голосов
/ 07 мая 2011

Короче говоря, ситуация такова: я пытался скомпилировать код C с опцией gcc -O2 -ftree-vectorize -msse4 -ftree-vectorizer-verbose=10 -march=core2 -g -c.Для некоторых вложенных циклических конструкций внутри кода gcc жалуется

не векторизация: слишком много BB в цикле.

Я прошу прощения за мое очень ограниченное понимание компиляторов и векторизации.

Некоторые начальные поиски принесли мне этот результат в список рассылки gcc, который говорит, что BB является аббревиатурой от стандартного блока.Оттуда, проверяя внутреннюю документацию GCC, я обнаружил, что gcc использует BB для построения графика потока управления (CFG).

Может кто-нибудь объяснить, что подразумевается под BB в цикле?

Кроме того, я не могу сказать, сколько слишком больших BB на самом деле приводит к сбою векторизации gcc?

1 Ответ

3 голосов
/ 07 мая 2011

BB означает «базовый блок».См. http://en.wikipedia.org/wiki/Basic_block для более подробного объяснения того, чем они являются.

Я представляю, что если слишком много базовых блоков, поток управления таков, что делает невозможным векторизацию операции.См. http://en.wikipedia.org/wiki/Vectorization_(parallel_computing) и, в частности, раздел «При наличии потока управления» , чтобы узнать, почему это влияет на векторизацию.

...