[an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено KPAH 19 июля 2006 г. 11:20
В ответ на: Ответ: Идея правильная но (дальше смотритие тело) отправлено Hanzo 19 июля 2006 г. 10:43

А что там у вас ещё есть? С остальными данными можно поступить так: либо в виде таких же массивов сделать, либо вот так:

struct all_other_fields {
some_field1;
some_field2;
...
}

struct my_struct_of_arrays {
ucRefFrameNum_LIST_0[16];
ucRefFrameNum_LIST_1[16];
ucRefFrameIndex_LIST_0[16];
ucRefFrameIndex_LIST_1[16];
all_other_fields other_fields[16];
}
my_struct_of_arrays variable;


По поводу онлайн ресурсов. Я, честно говоря, не встречал чего-то такого специализированного. Просто сейчас мало кто парится о скорости - по всей видимости только разработчики игр. Вот по игровой тематике можете поискать в инете хотя бы эти книги:
1) Graphics Programming Black Book (by Michael Abrash) - помимо оптимизационных приёмов для 3Д графики содержит и концептульные вещи
2) Game Programming Gems - есть по крайней мере 2 тома. Это сборники статей на околоигровую тематику. Там и графы, и ИИ, и 3Д и прочее прочее прочее.


PS. посмотрел в даташите на C64х ядро - вроде как за один такт может выполняться аж два доступа к памяти по 64 бита (по алресам выровненным на 8 байт), то есть ранее приведенный мной код будет выполняться так:

const long long MAGIC_VALUE = (INVALID_REF_FRAME<<56) | (INVALID_REF_FRAME<<48) | .... INVALID_REF_FRAME;
inline void foo(my_struct_of_arrays & restrict &S)
{
long long * restrict RF_L0 = (long long * restrict)&S.ucRefFrameNum_LIST_0[0]; // 1 такт
long long * restrict RFI_L1 = (long long * restrict)&S.ucRefFrameNum_LIST_1[0]; // на все 4
long long * restrict RFI_L0 = (long long * restrict)&S.ucRefFrameIndex_LIST_0[0]; // указателя
long long * restrict RFI_L1 = (long long * restrict)&S.ucRefFrameIndex_LIST_1[0]; // скорее всего
RF_L0[0] = MAGIC_VALUE; RF_L0[1] = MAGIC_VALUE; // 1 такт если будет выравнивание
RF_L1[0] = MAGIC_VALUE; RF_L1[1] = MAGIC_VALUE; // 1 такт если будет выравнивание
RFI_L0[0] = MAGIC_VALUE; RFI_L0[1] = MAGIC_VALUE; // 1 такт если будет выравнивание
RFI_L1[0] = MAGIC_VALUE; RFI_L1[1] = MAGIC_VALUE; // 1 такт если будет выравнивание
}

Итого: ориентировочно 5 тактов на всё.

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание