Перейти к содержанию
    

Оптимизация проги на C для SHARC

Пишу такой текст:

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

{

Mas1=0;

Mas2=0;

}

 

после компиляции с оптимизацией по скорости получается трехкомандный цикл, одной из команд является вычисление нуля. Как эту бодягу вылечить?

 

Среда разработки VDSP4.0 SP1. Процессор SHARC 36x. Есть еще вопросы, связанные с оптимизацией по скорости, но пока некогда.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если:

register int x;

x=0;

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

{

Mas1=x;

Mas2=x;

}

 

Пройдет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Косяк вылечился сам по себе. В отгрузке посмотрел - косяк есть:). Даже и не знаю, где искать причину. Буду по очереди править старый проект. Memset, к сожалению, не позволяет дальнейшую оптимизацию по скорости. То есть я поставил директиву #pragma vector_for перед циклом и компилятор загнал весь цикл в одну команду.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А никто не знает, как выделить память в pm? Я имею ввиду выделение динамической памяти.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А есть вообще какой-то смысл выделять память в области программ. Во-первых e Sharc на это есть ограничения(см. по своему процу), а во-вторых логическая нагрузка такой операции?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смысл такой же, как и всегда - два операнда за команду перекидывать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А никто не знает, как выделить память в pm? Я имею ввиду выделение динамической памяти.

Динамически память выделяется, насколько припоминаю, из HEAP, который

считается отображенным на DM. Для динамического распределения памяти в PM,

Вам, скорее всего, необходимо дополнить RUNTIME куском кода, аналогичным

*ALLOC и т.д. для выделения памяти в PM, плюс завести сегмент в PM, откуда будете

черпать память. Проще кусок выделить статически с помощью соответствующего

описателя массива, а к нему из разных мест программы обращаться через указатели.

Если Вы еще их обзовете как REGISTER, то будут использоваться регистры второго

DAG, что даст несомненный плюс...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну дык я думал в том же ключе, а статику не хотелось использовать, чтобы зря память (не мою) не тратить. К сожалению, не штатными средствами лезть в память программ мне нельзя. Забьют сапогами:). Видимо, придется все-таки статику лепить:((

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я, например, все не штатные алгоритмы на assembler делаю. И не надо возится с генерацией кода из С. А главное не надо пачить стандартные библиотеки. Хотя таким приходится заниматся не редко. Например выделять 2 сегмента heap.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А почему получается разная скорость программы, если выделять массив в стеке, куче или глобально? Понять не могу, как лучше память выделить в смысле скорости.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...