Вопрос

Я пытаюсь измерить тактовую частоту, необходимую для выполнения фрагмента кода на DSP TMS32064x+, который поставляется с OMAP ZOOM 3430 MDK.Я смотрю «Руководство программиста» по чипу DSP, и там написано, что DSP поддерживает функцию clock().

То, что я делаю, очень просто, я просто делаю

start = clock();
for (i=0;i<100;i++){
    /* do something here */
}
stop = clock();
total = stop - start;

а затем поместите значения «старт», «стоп» и «итого» в ранее выделенную общую память с процессором ARM.Затем я просто распечатываю его на экране со стороны ARM.

Проблема в том, что при первых запусках я всегда получаю одно и то же «общее» значение, а при следующих запусках я всегда получаю 0!Значения «начало» и «стоп» соответствуют значению «общее».

Самое странное, что они, кажется, следуют определенной схеме!Я поместил вывод ниже:

# ./sampleapp
Total = 63744
Start clock() value = 0x000000f9
Stop  clock() value = 0x0000f9f9
# ./sampleapp 
Total = 4177526784
Start clock() value = 0x00f9f9f9
Stop  clock() value = 0xf9f9f9f9
# ./sampleapp
Total clock cyles = 0
Start clock() value = 0xf9f9f9f9
Stop  clock() value = 0xf9f9f9f9

Судя по всему, функция clock() работает некорректно, но я не уверен, происходит ли это из-за того, что я что-то делаю неправильно, или из-за того, что этот тип вещей не поддерживается имеющимся у меня оборудованием.Есть идеи, почему это может происходить?

Это было полезно?

Решение

Прочитав вопросы на данный момент, я бы сказал, что оригинальный автор имеет значительно больше знаний по этому вопросу, чем участники, и что подозрение, что clock() сломан (или не поддерживается и возвращает неопределенный результат) на DSP кажется вполне вероятным.

Другие советы

Любопытно, зачем вам нужен ранее выделенный Общая память.Почему бы вам не попробовать использовать обычную переменную стека?Есть ли что-то, чего мне не хватает?

Возможно, вам нужно сначала инициализировать часы.

Как вы это распечатываете?может быть, проблема на самом деле в отображении результата?

на большинстве платформ clock_t имеет длинное значение.Если вы используете printf с %d, вы можете получить переменные результаты, которые вы и видите.

Предполагая, что начальная и конечная переменные имеют тип «lock_t», и ваша общая память предполагает то же самое при интерпретации переданных чисел на другом конце, тогда ваша проблема не в вызове часов, а в вашей обработке разницы между началом конец последних времен.

Я считаю, что ваша проблема в общей памяти между ними.Можете ли вы опубликовать код, показывающий, как вы распределяете память между двумя отдельными процессорами?

Возможно, вы могли бы использовать какую-нибудь встроенную сборку для прямого доступа к регистрам счетчиков ЦП.

TMS320C64x+ имеет 64-битный регистр временных меток в TSCL, TSCH. Счетчик не включается при сбросе, нужно сначала записать в регистр, чтобы запустить счетчик (возможно в этом проблема clock?).Чтение из регистра не совсем тривиально, поскольку каждую половину нужно читать отдельной инструкцией (и можно получить прерывания...).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top