[an error occurred while processing this directive]
|
Компилер не умеет для линейного кода применять конвейеризацию с повторным использованием регистров - то есть с запрещенными прерываниями когда. Циклы на ура строит такие. А линейный код - никак. Он его делает почти таким-же, каким был оригинал на С. Для примера я сделал вот так - цикл на 6 перемножений (в плавучке) развернул вручную (это предиктор одного канала), а затем на других переменных написал квантователь (сравнение с таблицей и выбор подходящего номера строки, но для другого канала) - тоже развернул. С-транслятор скомпилил сначала кучу умножений с NOP'ами, а затем поиск в таблице. Хотя невооруженным глазом видно, что эти две операции отлично ложатся в параллель друг с другом. Никакие перетасовывания С-исходника и прочие танцы с бубном не дают результата - чтоб оно что-то нужное запараллелило. На АСМе вручную это естественно удалось.
Про 64 не скажу - не работал. Но на компилер для 62/67 они не забивали вроде - 67-ая ветка не отжила вроде как свое, в отличие от 62-й.
E-mail: info@telesys.ru