Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перепланирование циклов, Проверить правильность 
:(
    Опции темы
kostyaizznu
Дата 1.1.2010, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 30.10.2008
Где: Запорожье

Репутация: нет
Всего: нет



Перепланировать цикл: 

Код

for (i=0; i<100; i++){
a[i]+=b[i]+c;
}


Правильно ли я выполнил задание?

Код

//Эпилог
tb=b[0];//
ta=a[0];//    A(0)

tc=tb+c;//
td=ta+tc;//   B(0)

tb=b[1];//    
ta=a[1];//    A(1) 

for(i=0; i<98; i++){        // Ядро
a[0]=td;//  C(i)

tc=tb+c;//
td=ta+tc;//  B(i+1)

tb=b[i+2];//
ta=[i+2];//   A(i+2)
}
//   Пролог
a[98]=td;// C(98)

tc=tb+c;//
td=ta+tc;//     B(99)

a[99]=td;//  C(99)


Выходит схема:

A(0)
B(0) A(1)
C(0) B(1) A(2)
.......C(1) B(2)
..............C(2)

Где Эпилог:
A(0)
B(0) A(1)

Ядро:
C(0) B(1) A(2)

Пролог:
.......C(1) B(2)
..............C(2)


Но преподаватель сказал,что в месте 

Код

...
tc=tb+c;
td=ta+tc;
...


будет ступор при работе процессора, так как операции связаны-и первой и во второй используется "tc" и лучше разделить A(i) и B(i) на отдельные операции, то есть по одной и поменять местами, чтобы не возникал ступор.

Не могу понять как правильно выполнить это. Помогите,пожалуйста




PM MAIL ICQ Skype   Вверх
mes
Дата 1.1.2010, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Я вижу лектор Ваш очень полезным вещам Вас учит...   smile 
и главное вовремя.. пока Вы еще не научились отличать даже вырожденные циклы
Цитата(kostyaizznu @  1.1.2010,  22:25 Найти цитируемый пост)
for(i=0; i<98; i++){        // Ядро
a[0]=td;//  C(i)

 smile 
Имхо с такой постановкой вопроса как Ваша тут вряд ли смогут помочь.. 
 smile 



--------------------
PM MAIL WWW   Вверх
kostyaizznu
Дата 2.1.2010, 01:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 30.10.2008
Где: Запорожье

Репутация: нет
Всего: нет



Прошу прощения

Код

//Эпилог
tb=b[0];//
ta=a[0];//    A(0)
tc=tb+c;//
td=ta+tc;//   B(0)
tb=b[1];//    
ta=a[1];//    A(1) 
for(i=0; i<98; i++){        // Ядро
a[i]=td;//  C(i)                                          a[i]=td !!!!!!  так верно
tc=tb+c;//
td=ta+tc;//  B(i+1)
tb=b[i+2];//
ta=[i+2];//   A(i+2)
}
//   Пролог
a[98]=td;// C(98)
tc=tb+c;//
td=ta+tc;//     B(99)
a[99]=td;//  C(99)



Но все же есть задача перепланирования цикла. И как то же она осуществляется...
PM MAIL ICQ Skype   Вверх
bsa
Дата 2.1.2010, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



можно написать так:
Код
int *pa, *pae, *pb;
pa = a;
pae = a + 100;
pb = b;
for(; pa != pae; ++pa, ++pb)
   *pa += *pb + c;
}
Оптимальней уже только вообще без цикла (не считая, циклов с 4-мя операциями и подобного)
PM   Вверх
kostyaizznu
Дата 9.1.2010, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 30.10.2008
Где: Запорожье

Репутация: нет
Всего: нет



Да, но фактически от нас требуется ассемблерный код(хотя используем синтаксис С++, чтоб понятнее было ..... мы студенты...... ), учитывая правила обращения с регистрами и т.д.
PM MAIL ICQ Skype   Вверх
mes
Дата 9.1.2010, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(kostyaizznu @  9.1.2010,  17:45 Найти цитируемый пост)
но фактически от нас требуется ассемблерный код(хотя используем синтаксис С++, чтоб понятнее было ..... мы студенты...... ), учитывая правила обращения с регистрами и т.д. 

тогда это надо было указать изначально, а также целевую платформу, так как способ оптимизации зависит от нее,
и имхо, размещать в разделе асма, потому что в большинстве случаев сишники (а тем более си++шники) подобной "ерундой" не занимаются
(за них это делает оптимизатор компилятора)
 smile 

Это сообщение отредактировал(а) mes - 9.1.2010, 20:42


--------------------
PM MAIL WWW   Вверх
kostyaizznu
Дата 9.1.2010, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 30.10.2008
Где: Запорожье

Репутация: нет
Всего: нет



Согласен,но студенты такой ерундой занимаются :( И хоть ерунда, а идей почему то нет. И все,что требуется решить задачу с избежанием ступора процессора в этом месте

Код

...
tc=tb+c;
td=ta+tc;
...


Основная же идея изложена в примере ниже.

Код

//Эпилог
tb=b[0];//
ta=a[0];//    A(0)
tc=tb+c;//
td=ta+tc;//   B(0)
tb=b[1];//    
ta=a[1];//    A(1) 
for(i=0; i<98; i++){        // Ядро
a[i]=td;//  C(i)                                          a[i]=td !!!!!!  так верно
tc=tb+c;//
td=ta+tc;//  B(i+1)
tb=b[i+2];//
ta=[i+2];//   A(i+2)
}
//   Пролог
a[98]=td;// C(98)
tc=tb+c;//
td=ta+tc;//     B(99)
a[99]=td;//  C(99)


Где переменные ta, tb, td, tc мнимые регистры. То есть задача решается на языке С, но в соответствии с правилами ассемблера
PM MAIL ICQ Skype   Вверх
bsa
Дата 10.1.2010, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Код для ассеблера, в котором нет понятия доступа со смещением от базы ([bp+bx])
Код
   unsigned i = 0;
loop:
   if (i >= 100)
      goto endloop;
   int *pa = a;
   pa += i; //вообще-то на ассемблере тут много будет операций
   int *pb = b;
   pb += i;
   int ac = *pb;
   ac += c;
   *pa += ac;
   ++i;
   goto loop;
endloop:;

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0556 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.