Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Оптимизация проги на C для SHARC
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Grumbler_2002
Пишу такой текст:
for (i=0; i<N; i++)
{
Mas1[i]=0;
Mas2[i]=0;
}

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

Среда разработки VDSP4.0 SP1. Процессор SHARC 36x. Есть еще вопросы, связанные с оптимизацией по скорости, но пока некогда.
vet
memset ?
bve
А если:
register int x;
x=0;
for (i=0; i<N; i++)
{
Mas1[i]=x;
Mas2[i]=x;
}

Пройдет?
Grumbler_2002
Косяк вылечился сам по себе. В отгрузке посмотрел - косяк естьsmile.gif. Даже и не знаю, где искать причину. Буду по очереди править старый проект. Memset, к сожалению, не позволяет дальнейшую оптимизацию по скорости. То есть я поставил директиву #pragma vector_for перед циклом и компилятор загнал весь цикл в одну команду.
Grumbler_2002
А никто не знает, как выделить память в pm? Я имею ввиду выделение динамической памяти.
olefil
А есть вообще какой-то смысл выделять память в области программ. Во-первых e Sharc на это есть ограничения(см. по своему процу), а во-вторых логическая нагрузка такой операции?
Grumbler_2002
Смысл такой же, как и всегда - два операнда за команду перекидывать.
bve
Цитата(Grumbler_2002 @ May 18 2005, 19:49)
А никто не знает, как выделить память в pm? Я имею ввиду выделение динамической памяти.
*

Динамически память выделяется, насколько припоминаю, из HEAP, который
считается отображенным на DM. Для динамического распределения памяти в PM,
Вам, скорее всего, необходимо дополнить RUNTIME куском кода, аналогичным
*ALLOC и т.д. для выделения памяти в PM, плюс завести сегмент в PM, откуда будете
черпать память. Проще кусок выделить статически с помощью соответствующего
описателя массива, а к нему из разных мест программы обращаться через указатели.
Если Вы еще их обзовете как REGISTER, то будут использоваться регистры второго
DAG, что даст несомненный плюс...
Grumbler_2002
Ну дык я думал в том же ключе, а статику не хотелось использовать, чтобы зря память (не мою) не тратить. К сожалению, не штатными средствами лезть в память программ мне нельзя. Забьют сапогамиsmile.gif. Видимо, придется все-таки статику лепитьsad.gif(
olefil
Я, например, все не штатные алгоритмы на assembler делаю. И не надо возится с генерацией кода из С. А главное не надо пачить стандартные библиотеки. Хотя таким приходится заниматся не редко. Например выделять 2 сегмента heap.
Grumbler_2002
А почему получается разная скорость программы, если выделять массив в стеке, куче или глобально? Понять не могу, как лучше память выделить в смысле скорости.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.