Автоматическая векторизация условных выражений оптим...
This presentation is the property of its rightful owner.
Sponsored Links
1 / 9

Автоматическая векторизация условных выражений оптимизирующим компилятором PowerPoint PPT Presentation


  • 82 Views
  • Uploaded on
  • Presentation posted in: General

Автоматическая векторизация условных выражений оптимизирующим компилятором. Ермолицкий Александр Викторович [email protected] Векторизация линейного кода. for ( i=0; i<N; i++ ) c[i] = a[i] + b[i];. for ( i=0; i<N; i+=8 ) c[i…i+7] = PADDB( a[i…i+7], b[i…i+7]);. a. LDd. LDb. b.

Download Presentation

Автоматическая векторизация условных выражений оптимизирующим компилятором

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


3943163

Автоматическая векторизация условных выражений оптимизирующим компилятором

Ермолицкий Александр Викторович

[email protected]


3943163

Векторизация линейного кода

for( i=0; i<N; i++ )

c[i] = a[i] + b[i];

for( i=0; i<N; i+=8 )

c[i…i+7] = PADDB( a[i…i+7], b[i…i+7]);

a

LDd

LDb

b

LDb

LDd

+

+

+

+

+

+

+

+

+

+

PADDB

ADDs

c

STb

STd


3943163

Векторизация условного кода

for( i=0; i<N; i++ )

c[i] = (a[i] > 0) ? a[i] : b[i];

1

1

2

2

3

3

4

4

гамак

линейный участок


3943163

Сведение потоков данных

for( i=0; i<N; i++ )

c[i] = (a[i] > 0) ? a[i] : b[i];

Сведение потоков данных в скалярном цикле

Сведение потоков данных в векторизованном цикле

CMP

b[i]

a[i...i+7]

PCMP

a[i]

b[i...i+7]

merge

AND

ANDN

c[i]

OR

c[i...i+7]


3943163

Векторные предикаты

Pn

Pn

Pe1

Pe2

PeN

Pcmp= PCMP…

true

false

Pe(t)

Pe(f)

Pe = Pn

Pe(f) = Pn & ~Pcmp

Pn = Pe1 | Pe2 | … | PeN

Pe(t) = Pn & Pcmp

R1

R2

RN

Pe1

Pe2

PeN

R0 = (R1 & Pe1) | (R2 & Pe2) | … | (RN & PeN)


3943163

Схема векторизации цикла

for( i=0; i<N; i++ )

c[i] = (a[i] > 0) ? a[i] : b[i];

  • анализ возможности векторизации

  • определение фактора раскрутки

  • эвристика

  • раскрутка цикла

  • генерация векторных операций

  • удаление скалярных операций и узлов УГ цикла

for( i=0; i<N; i+=8 ){

c[i+0] = (a[i+0] > 0) ? a[i+0] : b[i+0];

c[i+1] = (a[i+1] > 0) ? a[i+1] : b[i+1];

c[i+7] = (a[i+7] > 0) ? a[i+7] : b[i+7];

}

for( i=0; i<N; i+=8 ) {

R1 = PCMPGTB( a[i…i+7], 0 );

R2 = a[i…i+7] & R1;

R3 = b[i…i+7] & ~R1;

c[i…i+7] = R2 | R3;

}


3943163

Частные случаи

for( i=0; i<N; i++ ) {

if( a[i] > 0 )

b[i] = a[i];

}

for( i=0; i<N; i++ ) {

if( a[i] > 0 )

res = 1;

}

for( i=0; i<N; i+=8 ) {

R1 = PCMPGTB( a[i…i+7], 0 );

R2 = a[i…i+7] & R1;

R3 = b[i…i+7] & ~R1;

b[i…i+7] = R2 | R3;

}

R2 = 0;

for( i=0; i<N; i+=8 ) {

R1 = PCMPGTB( a[i…i+7], 0 );

R2 = R2 | R1;

}

if( R2 )

res = 1;


3943163

Результаты

Уменьшение количества исполняемых инструкций в результате генерации векторных операций


3943163

Вопросы?


  • Login