Я использую ARM926EJS. Я получаю на 20% больше скорости памяти в тесте копирования памяти без Linux (как исполняемый файл Getting Started). Но в Linux тот же код работает на 20% медленнее.
Код
/// Below code just performs burst mode memcopy test.
void asmcpy(void *a, void *b, int iSize)
{
do
{
asm volatile (
"ldmia %0!, {r3-r10} \n\t"
"stmia %0!, {r3-r10} \n\t"
:"+r"(a), "+r"(b)
:
:"r"(r3),"r"(r4),"r"(r5),"r"(r6),"r"(r7),"r"(r8),"r"(r9),"r"(r10)
);
}while(size--)
}
Я проверил, что никакой другой процесс не потребляет процессорное время в Linux. (Я проверил это с помощью команды time, она показывает реальное время такое же, как время usr )
Скажите, пожалуйста, в чем может быть проблема с Linux?
Спасибо и всего наилучшего.
ДОБАВЛЕНО:
мой тестовый код
int main()
{
int a[320 * 120], b[320 * 120];
for(int i=0; i != 10000; i++)
{
/// Size is divided by 8 because our memcpy function performs 8 integer load stores in the iteration
asmcpy(a, b, (320 * 120) / 8);
}
}
Исполняемый файл Getting Started - это файл bin, который отправляется в ОЗУ через последовательный порт и выполняется напрямую, переходя по этому адресу в ОЗУ. (без необходимости использования ОС)
ДОБАВЛЕНО.
Я не видел такой разницы в производительности на других процессорах. Они использовали SD RAM, Этот процессор использует DDR Ram. Может ли это быть причиной?
ДОБАВЛЕНО.
Data Cache не включается при запуске кода, а Data Cache работает в режиме Linux, поэтому в идеале все данные должны кэшироваться и получать к ним доступ без какой-либо задержки ОЗУ, но, тем не менее, Linux работает на 20% медленнее.
ДОБАВЛЕНО:
Мой микроконтроллер - LPC3250. Оба теста были протестированы на одной и той же внешней памяти DDR.