|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 20, 2003 14:41:29 Короче, я устал спорить ни о чем. Нет, ты не прав с хеш таблицей. Топай на RSDN, читай там статьи, а только потом садись спорить. Володя не страдай :)_)) |
|
|
Дата: Ноя 20, 2003 17:33:16 Edmond Йес, сэр :) |
|
|
Дата: Ноя 20, 2003 17:33:16 · Поправил: volodya ! |
|
|
Дата: Ноя 20, 2003 18:24:54 · Поправил: masquer Я прикинул код на ассемблере и вынужден поправиться - со внутренним циклом не все так просто, у меня пока так получилось. Не знаю точно всего задания, но приведенный участок особо не улучшишь - всю задачу смотреть можно, тогда уже и алгоритмически что-то можно будет переделать. lea esi, mas1 lea edi, mas2 xor eax, eax mov ecx, per add esi, ecx @@: mov ebx, per2 add eax, [esi] add esi, per3 dec ebx jnz @B mov [edi], eax add esi, per add edi, 4 dec ecx jnz @B |
|
|
Дата: Ноя 20, 2003 23:36:23 masquer У тебя вроде код не совсем соответствует исходному. 1. Index - это индекс в массиве, а не указатель на память. Т.е. per и per3 надо умножать на 4 перед прибавлением. 2. Вместо строки index=i+per; у тебя получается index=i*(per+per2*per3); Можно так попробовать: lea edi, mas2 mov edx, per3 shl edx, 2 ;edx = 4*per3 mov ebp, per2 imul ebp,edx lea esi, [ebp+4*ecx+offset mas1] ;esi = mas1+4*per+4*per2*per3 neg ebp xor eax, eax mov ecx, per L10: mov ebx,ebp ;ebx = -4*per2*per3 L20: add eax, [esi+ebx] add ebx, edx jnz L20 mov [edi], eax add esi, 4 add edi, 4 dec ecx jnz L10 |
|
|
Дата: Ноя 21, 2003 01:52:52 _G3 Вот как раз этот код и соответствует 2 разовому приросту производительности. Так а дальше?? это и все?? ЗНАЧИТ ЗАВИСИМОСТЬ ПО ДАННЫМ не побеждаема??? |
|
|
Дата: Ноя 21, 2003 09:56:34 Можно добавить временный массив для увеличения производительности:
int sum[]=new int[per3];
for(i=0;i<per3;i++)
sum[i]=0;
int n=per2*per3;
for(i=0;i<n;i+=per3)
for(j=0;j<per3;j++)
sum[j]+=mas1[i+j];
int m=per/per3;
int r=per%per3;
for(int i=0;i<m;i+=per3)
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++)
{
summa+=sum[j];
mas2[m+j]=summa;
}
delete[] sum;
Только new стоит заменить на что нибудь побыстрее. |
|
|
Дата: Ноя 21, 2003 13:32:50 Black_mirror нет... этот код проигрывает в полторв раза!! Видимо из-за ветвлений!!! |
|
|
Дата: Ноя 21, 2003 14:58:16 emergenter Ты-бы тогда процедуру измерения скорости обнародовал. А то у меня опять все не как у людей - вариант G3 только чуть быстрее оригинала, скомпилированного Интеловским компилером. А при определенных значениях параметров даже ему проигрывает. Ну или хотя-бы скажи, на каких приблизительно параметрах ты хотел-бы это оптимизировать. На всех сразу ведь не получится. Если par>par3 - то ты обращаешься по нескольку раз к одной ячейке и нужно менять алгоритм. Если размер mas1 большой, то к концу подсчета summa кеш-линейка, содержащая первые слагаемые, будет вытеснена из кеша, и при подсчете следующей summa будет загружена заново - тогда имеет смысл обрабатывать mas1 блоками (максимальный размер блока зависит от par3, размера L1 кэша и (не уверен)его ассоциативности) |
|
|
Дата: Ноя 21, 2003 15:28:06 emergenter Вообще говоря, если дело касается книги Криса то там есть одно СТРАНННОЕ место. Но в частности. Я не понял, что ВЫ ЖЕЛАЕТЕ ВЫЙГРАТЬ??? И потом. Я до сих не вижу ОБЪЯСНЕНИЯ КОДА. Когда его ждать? |
|
|
Дата: Ноя 21, 2003 15:54:30 Вообще говоря, если дело касается книги Криса то там есть одно СТРАНННОЕ место. Например, страница 160, второй абзац. Не смешно ? |
|
|
Дата: Ноя 21, 2003 16:00:36 Shur Нет, не смешно. Если бы вот так конкретно можно было бы сказать. Это размазано в двух темах. Во первых.. 1. Копирование с шагом 32 байта -- оптимально с одной строны 2. И не оптимально с другой И пойди пойми как ЭТО ПОНИМАТЬ!!!!!! Но я пока хочу ему (Крису) этот вопрос задать... |
|
|
Дата: Ноя 21, 2003 16:04:30 Edmond А что собственно с кодом? Там элементарный цикл с выбиранием значений из массива... но выбираются не по порядку а в разброс. Это разброс и определяется по формуле.... |
|
|
Дата: Ноя 21, 2003 17:52:45 Edmond Да я согласен. Тут нужно знать изначально что за задача и какие примерно числа будут присвоены переменным. |
|
|
Дата: Ноя 21, 2003 18:35:40 emergenter А если per увеличить в 100 раз? 8) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.043 |