ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
30 декабря
1562900 Топик полностью
LightElf (Сегодня, 02:35, просмотров: 19) ответил mse homjak на Что значит "сорцы, вылизанные под х86"? Сорцы под х86 вылизывает оптимизирующий компилятор от Интель или АМД. Или МЦСТ. У них, кстате, компилер выполняет функцыю кремневого оптимизатора/декодера х86. У программера нет механизьма, чтобы "вылизать" обжэктный код, если он не на АСМе кодит. Он описывает логику в ЯВУ, а эту логику в обжэкт переводит компилер. Он там и под кэшь можэт подстроиться, и под нутряную архитектуру декодера команд, и тыды. Эльбрусы, через программный
Короче, я понял что хреново выражаю свою мыслю :-) Поэтому сочинил пояснительный пример. 

Вариант 1

void foo1(float *a, float *b, int cnt)

{

for (int i =0; i<cnt; i++)

a[i] = b[i] * b[i];

}

void foo2(int *a, int *b, int cnt)

{

for (int i =0; i<cnt; i++)

a[i] = b[i] * b[i];

}

void foo(float *a, float *b, int *c, int *d, int count)

{

foo1(a, b, count);

foo2(c, d, count);

}

Вариант 2

void foo(float *a, float *b, int *c, int *d, int count)

{
    for (int i =0; i<count; i++)
    {
        a[i] = b[i] * b[i];
        c[i] = d[i] * d[i];
    }
}

Предположим, что count большое, миллионы.

Для OoO процов варианты плюс-минус эквивалентны. Для VLIW процов второй вариант выглядит предпочтительнее, тело цикла можно утоптать в одну длинную инструкцию и считать массивы a и c одновременно.

Теперь представим, что foo1 и foo2 - тянутся из двух разных библиотек. Сможет ли эльбрусовый компилятор так перетряхнуть сорцы, чтобы порадовать эльбрус, сделав вариант 2 из варианта 1?

Не надо делать мне как лучше, оставьте мне как хорошо