|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 21, 2003 19:05:49 Исправляюсь :) У меня одна итерация (т.е. одно изменение per) занимает всего 21 такт, все данные выровнены на 4. ММХ привязать пока сложно, не зная характера и объема данных. lea esi, mas1 lea edi, mas2 xor eax, eax mov ecx, per lea esi, [esi+ecx*4] @@next_line: push ecx mov edx, esi mov ecx, per2 mov ebx, per3 @@: add eax, dword ptr [esi] lea esi, [esi+ebx*4] dec ecx jnz @B lea esi, [edx+4] mov [edi], eax add edi, 4 pop ecx dec ecx jnz @@next_line |
|
|
Дата: Ноя 21, 2003 19:37:44 Black_mirror УВЕЛИЧИТЬ В 100 раз? для чего? |
|
|
Дата: Ноя 22, 2003 05:21:16 · Поправил: Black_mirror emergenter Время выполнения вашего алгоритма k0+per*(k1+per2*k2), где: k0 - затраты на инициализацию счеткика внешнего цикла k1 - затраты на выполнение итерации внешнего цикла( включая проверку и изменение счетчика внешнего цикла и инициализацию счетчика внутреннего цикла и не включая время выполнения внутреннего цикла) k2 - время выполнения итерации внутреннего цикла Затратами k0 при увеличении per или per2 можно пренебречь. Также можно пренебреч затратами k1 при увеличении per2. Таким образом время выполнения этого цикла: per*per2*k2. А вот немного улучшенный мой алгоритм:
int n3=min(per3,per);
int sum[]=new int[n3];
for(i=0;i<n3;i++) //цикл 1
sum[i]=0;
int n=per2*per3;
for(i=0;i<n;i+=per3) //цикл 2
for(j=0;j<n3;j++)
sum[j]+=mas1[i+j];
int m=per/per3;
int r=per%per3;
for(int i=0;i<m;i+=per3) //цикл 3
for(j=0;j<per3;j++)
{
summa+=sum[j];
sum[j]+=mas1[per+i+j+n]-mas1[per+i+j];
mas2[i+j]=summa;
}
for(j=0;j<r;j++) //цикл 4
{
summa+=sum[j];
mas2[m+j]=summa;
}
delete[] sum;
Я не буду писать все слагаемые а выпишу только главные: k0 - время на выделения памяти(сильно влияет при маленьких значениях per и per2) per2*min(per3,per)*k2 - время выполнения второго цикла per*max(k3,k4) - время выполнения 3 и 4 циклов. При больших per и per2 можно исключить k0 и время выполнения будет порядка per2*per3*k2+per*max(k3,k4), то есть оно пропорционально per и per2, а в вашем алгоритме оно пропорционатьно per*per2. Поэтому нельзя говорить что один алгоритм в 1.5 раза медленее другого. Думаю что при per и per2 порядка 10000-100000 и при per3 раз в 10 меньше чем per, ваш алгоритм будет проигрывать. |
|
|
Дата: Ноя 24, 2003 01:37:21 Black_mirror Классный АЛГОРИТМ!!!! щас быстренько разберусь и протестирую... |
|
|
Дата: Ноя 24, 2003 03:25:57 emergenter Кстати а что предлагал с этим алгоритмом сделать Крис? Или у него был другой пример? |
|
|
Дата: Ноя 24, 2003 22:23:49 Black_mirror не у Криса этот алгоритм не описан!! У него собраны примитивы. Как раз из них ты этот алгоритм и сделал!! Прямо по книге. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.066 |