Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

А что смеетесь? Реально полезно для процов со статической суперскалярностью, типа TMS6000-ных. Там (+)

Отправлено SM 18 апреля 2008 г. 13:23
В ответ на: :=))) отправлено koyodza 18 апреля 2008 г. 13:02

цикл без поллитры не соптимизируешь руками, это на отлично компилятор делает, а линейный код компилятор почти не распараллеливает, это эффективно можно сделать только на ассемблере. Так и получается - цикл на С пишу, и вставляю из сгенеренного компилером асм-файла в асм-исходник. Вот пример (от init prolog и до конца piped loop kernel сгенерено С-компилером, остальное плюс немного припараллеленного мной в прологе - мое ассемблерное):



[!B1] B .S2 L2 ; (P) |53|
|| [!B1] MVK .S1 0x80,A0
|| [!B1] MV .L2X A9,B4
|| [!B1] ADDAW .D2 B4,14,B9 ; +56
;---
; !D2
[!B1] MVK .S1 0xffffff80,A6
|| [!B1] MVK .S2 4,B0
|| [!B1] LDW .D2T2 *B9++,B6 ; (P) |50|
|| [!B1] LDW .D1T1 *A9++,A0 ; (P) ^ |47|
|| ABS .L2 B6,B6 ; B6 = abs((dms<<2) - dml)
;---
; B10 <= a[0]
; !D2
[!B1] MVK .S1 0x2,A2 ; init prolog collapse predicate
|| [!B1] ADD .L1X 1,B0,A1
|| [!B1] SHR .S2 B10,8,B11 ; B11 = a[0]>>8
|| [!B1] MV .D1 A5,A8 ; A8 <= dqsez
|| CMPLT .L2 B6,B13,B13 ; B13 = (abs((dms<<2) - dml))<(dml>>3)
;---
; A10 <= a[1]
;---
;** --------------------------------------------------------------------------*
L2: ; PIPED LOOP KERNEL

[ B1] MV .D1 A6,A7 ; if ((B2 ^ dq[i]) < 0) A7 = +128
|| [!B1] MVK .S1 0x80,A7 ; if ((B2 ^ dq[i]) >= 0) A7 = -128
|| [ B0] B .S2 L2 ;

[ B2] ADD .L1 A7,A3,A3 ; if (B2) A3 += A7
|| SHR .S1 A0,8,A5 ; A5 = b[i] >> 8
|| XOR .S2 B2,B6,B6 ; B6 = B2 ^ dq[i]
|| [ A1] LDW .D2T2 *B9++,B6 ;
|| [ A1] LDW .D1T1 *A9++,A0 ;

[ A2] SUB .D1 A2,1,A2 ;
|| [ A1] SUB .S1 A1,1,A1 ;
|| [!A2] STW .D2T1 A3,*B4++ ; store new b[i]
|| SUB .L1 A0,A5,A3 ; A3 = b[i] - (b[i] >> 8)
|| CMPLT .L2 B6,0,B1 ; B1 = (B2 ^ dq[i]) < 0
|| [ B0] SUB .S2 B0,1,B0 ;

;** --------------------------------------------------------------------------*

[!B1] MVK .S1 0x80,A7
|| [B1] MV .L1 A6,A7
|| LDHU .D1T1 *+A4(44),A6 ; PK[0]
|| SUB .L2 B10,B11,B11 ; B11 = a[0]-(a[0]>>8)
;---
[B2] ADD .D1 A7,A3,A3
|| XOR .S2 B2,B6,B6
|| SHR .S1 A0,8,A5
|| MV .L1 A8,A2 ; dqsez
;---
SUB .L1 A0,A5,A3
|| CMPLT .L2 B6,0,B1
|| STW .D2T1 A3,*B4++
|| SHR .S1 A10,7,A0 ; A0 = a[1]>>7
|| [!A2] B .S2 no_a2p
|| LDH .D1T2 *+A4(10),B2



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
сложите 2 и 3:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru