Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 52 • Страница 2 из 3<  1  2  3  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 21.10.2003
Fraсtal
Цитата:
Если я правильно понимаю, FPU используется только в операции сравнения, что не так то уж и долго

FPU не используется вовсе. Даже не инициализируется. Только ALU.
Цитата:
Кэша данных Л1 всех процессоров, кроме П4 хватает (или почти хватает в случае п3, но это не должно принципиально повлиять на производительность)

Хватает. Массив 16000 байт, переменные... так... 31 байт. Плюс несколько констант-адресов (уж точно меньше 100 байт). А кэш L1 Data у P2/P3/PMMX - 16384 байта. Влезает как раз. :) А код целиком влезает в любой кэш, даже 8 Кб. Код каждой процедуры в отдельности и того меньше - не более 1 Кб.
Цитата:
Может напишешь вариант с выбором размера массива пользователем? Интересно посмотреть на график будет.

Можно. Только графики в текстовом режиме - это не интересно. Скорее всего сделаю. Размер будет все равно ограничен 16000 байт (надо всем массивам и переменным "влезть" в 64К). Так что 1000..16000. А количесто прогонов... Ну пусть будет 1..1000. Но это, как понимаешь, завтра. :)



Партнер
 

Member
Статус: Не в сети
Регистрация: 24.06.2003
Откуда: Питер
Цитата:
Преимущество P4 обьясняется очень просто, реально ALU у этого камня работает на удвоенной частоте ядра
Так-то оно так, да вот тока там каждый из двух ALU хоть и работает в 2 раза быстрее, но они 16-битные! и выполняют 32-битное сложение за 2 приёма. (см. 1) Кароче по сути интел удвоила частоту части ядра, но сделала его разрядность меньше в 2 раза (этим видимо уменьшиив размеры ядра) ... реальная производительность осталась на том же уровне, что и если бы были 2 полноценных 32разрядных ALU на 3ГГц.

1) Пока один считает старшую половину своего числа второй считает младшую своего.
#77

З.Ы. Тока вот непонятно, должна ли эта система в 2 раза быстрее считать 16-битные числа? или нет...

_________________
DOOM лучше всяких дум


 

Member
Статус: Не в сети
Регистрация: 25.01.2003
Откуда: UA
Fraсtal
>> Реально частота там такая же, просто исполнительные модули выполняют две инструкции за такт.
Извини конечно, но реально частота так НЕ ТАКАЯ ЖЕ а удвоенная относительно частоты остальных блоков.


 

Member
Статус: Не в сети
Регистрация: 18.04.2003
Откуда: Novosibirsk
Rashid
Можешь выложить исходники для Делфийского компилятора? А то переделывать долго и мучительно. и компилятора старинного нет. Да и тест под дос как-то не интересно.


 

Member
Статус: Не в сети
Регистрация: 21.10.2003
Fraсtal
Раз пошла такая пьянка...

Вот эффективность каждого метода для случайного массива:

Метод Число сравнений Число присваиваний
Выборкой (N^2)/2 N
Вставкой (N^2)/4 (N^2)/8
Пузырьком (N^2)/2 (N^2)/2
Рекурсией 2N*lnN

Видно, что после рекурсии самый эффективный - метод выборки. Если бы мы сортировали не байты, а большие структуры (скажем, по килобайту каждая), где присваивание и обмен идет долго, а байт служил бы лишь признаком сравнения, то этот метод ушел бы в отрыв далеко вперед.

Ketsalkoatl
Это ново... А откуда информация?

Fraсtal
Сейчас меня интересует, какова "неэффективность" ALU Pentium 1. Вдруг еще меньше, чем у P2/P3? :) Может в угоду частоте мы с каждым годом все больше и больше расплачиваемся "неэффективностью"? Кстати, вот сейчас подумал: а надо ли выпускать тест с регулируемыми параметрами? По-моему, 7К- и 16К-версии накрывают все возможные цели (а больше-то 16К не сделаешь!). Тест, по-возможности должен быть вообще один, иначе становиться трудно сравнивать.

Цитата:
Стало быть, тот факт, что теперь весь массив помещается в Л1 кэше, не дал никакого прироста производительности. Как мы и думали, по-видимому, всё кроется в исполнительных блоках.

Вот именно. Нет смысла делать массив меньше (а больше не получится). Ограничусь 7К-версией. Впрочем если уж очень хочется - исходники открыты, дерзайте! :)

Цитата:
Кстати, нет ли у тебя возможности посмотреть асмовый код? У меня дебаггер не установлен сейчас.

Вот смотри. Это код процедуры SelectionSort. Только он странный какой-то (получен в HIEW), возможно он с адресами напутал, но коды операций, имхо, те. А дебаггера у меня у самого нет.

nop
nop
nop
nop
mov w,[0195E],00001
jmps 000000010
inc w,[0195E]
mov di,[0195E]
mov al,[di][01311]
mov [01970],al
mov ax,[0195E]
mov [01966],ax
mov ax,[0195E]
inc ax
cmp ax,00640
ja 00000005A
mov [01960],ax
jmps 000000033
inc w,[01960]
mov di,[01960]
mov al,[di][01311]
cmp al,[01970]
jae 000000052
mov di,[01960]
mov al,[di][01311]
mov [01970],al
mov ax,[01960]
mov [01966],ax
cmp w,[01960],00640
jne 00000002F
mov di,[0195E]
mov al,[di][01311]
mov di,[01966]
mov [di][01311],al
mov al,[01970]
mov di,[0195E]
mov [di][01311],al
cmp w,[0195E],0063F
jne 00000000C
nop
nop
nop
nop

nop'ы я инлайном насовал в паскалевский текст в начале и в конце процедуры, чтобы потом отыскать эту функцию в HIEW. Больше нигде в exe-шнике 4 nop'а подряд не встречаются. Итого: 22 инструкции mov, 6 jXX, 4 cmp, 3 inc - имхо очень простые инструкции. Как раз для P4. Вот только jXX могут немного подпортить его конвейер. :) Кстати на этом тесте ядро Netburst дает практически тот же результат, что и P2 (см. детализацию: P4 3.3 = 3-3-2, P3 1.1 = 8-9-8).

Цитата:
Протестил 7-к версию, результат - 93сек

Кстати посмотри ради интереса результат в голом DOS'е. Там должно быть получше (винда несколько сот раз в секунду переписывает часть L1 Data своими данными). Для запуска теста ничего не надо, даже himem.sys.


 

Member
Статус: Не в сети
Регистрация: 21.10.2003
Кстати, вот это пассаж мне совершенно не ясен: :)

mov ax,[0195E]
mov [01966],ax
mov ax,[0195E]

Зачем еще раз в ax гнать константу по адресу 0195E? А может это HIEW гонит? :) Где можно скачать Turbo Debugger?


 

Member
Статус: Не в сети
Регистрация: 18.04.2003
Откуда: Novosibirsk
Rashid
Сделай версию под делфю!!


 

Member
Статус: Не в сети
Регистрация: 18.04.2003
Откуда: Novosibirsk
НАРОД!!!
Я сделал версию для Делфи 7 и стало быстрее раза в два!!!!!!!!
было 200 стало 103 секунды. (конфа на работе:п4-1800 (512к)) ВОТ!!!!!!!!!!!!
На Атлоне дома попробую. Результат пришлю позже.


 

Member
Статус: Не в сети
Регистрация: 18.04.2003
Откуда: Novosibirsk
Да и еще я думаю что Атлон медленее выполняет 16 разрядный код. Но это не принципиально.
А под Делфёй компилятор делает 32 разрядный код. Поэтому стало быстрее. А вообще Раскаль и делфи компилируют самый тормозной код ( хотя наверняка можно найти компилятор хуже :) :D :))


 

Member
Статус: Не в сети
Регистрация: 18.04.2003
Откуда: Novosibirsk
Цитата:
Кстати, вот это пассаж мне совершенно не ясен:

mov ax,[0195E]
mov [01966],ax
mov ax,[0195E]

Зачем еще раз в ax гнать константу по адресу 0195E? А может это HIEW гонит?


Он не гонит. смотри сл строку : Inc ax
Просто компилятор не умеет оптимизировать код. (о чем я писал выше)


 

Member
Статус: Не в сети
Регистрация: 11.11.2003
Откуда: Аборигения
Протестил я свой проц P4 2.0A@2.67(bus real 133Mhz), получил 114 сек...


Последний раз редактировалось wMaster 05.12.2003 14:56, всего редактировалось 1 раз.

 

Member
Статус: Не в сети
Регистрация: 21.10.2003
BDS
Цитата:
Он не гонит. смотри сл строку : Inc ax
Просто компилятор не умеет оптимизировать код. (о чем я писал выше)

Это-то как раз нормально (inc ax). Инкрементрует ax (который здесь судя по всему является счетчиком I). А то, что он не оптимизирует код - уже почти понятно. Дай-ка я посмотрю на него... М-да. В процедуре, где целых 2 вложенных цикла ни разу не задействовать регистры сх, bx, dx! В горячечном бреду такого бы не сделал. Зато какие-то извраты с постоянным сохранением и восстановлением регистров ax и di (Ну а он то здесь зачем!? Что dx нельзя было заюзать?). Теперь неудивительно, что в Delphi ты без труда получил двукратный прирост. :) Кстати, пришли мне на мыло (есть в первом письме треда). Интересно, а в P4/P3 прирост будет такой же? Тогда это ничего не меняет. :) Меня ведь главным образом интересует не качество компиляции, а скорость ALU.


 

Member
Статус: Не в сети
Регистрация: 21.10.2003
Почему-то я не могу ничего скачать. Как свои так и твои файлы. Два раза открывается web-страница, а потом обратно на заглавную.


 

Member
Статус: Не в сети
Регистрация: 14.04.2003
Откуда: Минск, Беларусь
1. Опции компиляции не указаны.
2. Все люди уже давно себе правильный CRT пересобрали :) Но пользовать его - не рулез. Простая консоль легче портируется.
3. Копировать однотипные массивы можно простым присваиванием. Никаких форов.
4. CLRSCR в конце явно не в тему
5. Практику программирования иначе как китайской с современной точки зрения не назовешь. Хотя хозяин - барин.

Порт исходника на D5 со всеми отключенными проверками и включенной оптимизацией на P3 866Mhz cumine выполянется за 93 секунды, причем QuickSort (поименованный автором рекурсией почему-то, хотя это безусловно и Хоар :) ) выполняется быстрее одной секунды (программа ноль кажет). Увеличенное в три раза (до 30 ) количество циклов - 273. QuickSort становится ненулем только на количестве циклов порядка 100.

Проверить на моем торе смогу только на выходных.

_________________
"Помогите, 20 беспроводных мышей общаются сквозь стены!"
--- SweetLow ---


 

Member
Статус: Не в сети
Регистрация: 21.10.2003
Поставил я Borland C++ 3.1. Вот код процедуры на Паскале:

Код:
procedure SelectionSort;
begin
  inline($90/$90/$90/$90);
  for I:=1 to ArraySize-1 do
  begin
    MinNum:=TempArray[I];
    MinIndex:=I;
    for J:=I+1 to ArraySize do if TempArray[J]<MinNum then
    begin
      MinNum:=TempArray[J];
      MinIndex:=J
    end;
    TempArray[MinIndex]:=TempArray[I];
    TempArray[I]:=MinNum
  end;
  inline($90/$90/$90/$90)
end;


Вот что мне выдал Turbo Debugger:

Код:
07B4 90             nop
07B5 90             nop
07B6 90             nop
07B7 90             nop
07B8 C7065E190100   mov    word ptr [195E],0001
07BE EB04           jmp    07C4
07C0 FF065E19       inc    word ptr [195E]
07C4 8B3E5E19       mov    di,[195E]
07C8 8A851113       mov    al,[di+1311]
07CC A27019         mov    [1970],al
07CF A15E19         mov    ax,[195E]
07D2 A36619         mov    [1966],ax
07D5 A15E19         mov    ax,[195E]
07D8 40             inc    ax
07D9 3D4006         cmp    ax,0640
07DC 7730           ja     080E
07DE A36019         mov    [1960],ax
07E1 EB04           jmp    07E7
07E3 FF066019       inc    word ptr [1960]
07E7 8B3E6019       mov    di,[1960]
07EB 8A851113       mov    al,[di+1311]
07EF 3A067019       cmp    al,[1970]
07F3 7311           jnb    0806
07F5 8B3E6019       mov    di,[1960]
07F9 8A851113       mov    al,[di+1311]
07FD A27019         mov    [1970],al
0800 A16019         mov    ax,[1960]
0803 A36619         mov    [1966],ax
0806 813E60194006   cmp    word ptr [1960],0640
080C 75D5           jne    07E3
080E 8B3E5E19       mov    di,[195E]
0812 8A851113       mov    al,[di+1311]
0816 8B3E6619       mov    di,[1966]
081A 88851113       mov    [di+1311],al
081E A07019         mov    al,[1970]
0821 8B3E5E19       mov    di,[195E]
0825 88851113       mov    [di+1311],al
0829 813E5E193F06   cmp    word ptr [195E],063F
082F 758F           jne    07C0
0831 90             nop
0832 90             nop
0833 90             nop
0834 90             nop


В приципе, если не считать "зевка" с

mov ax,[195E]
mov [1966],ax
mov ax,[195E]

(3-я строчка лишняя), то компилятор сделал все правильно, НО: непонятна его "аскетичность" к используемым регистрам. В не маленькой, в общем-то, процедуре он использует всего 2 регистра ax и di. Это странно. Прекрасно можно было бы задействовать регистры cx, dx, si, хотя бы для хранения дополнительных переменных (I, J, MinIndex). Код стал бы меньше раза в полтора.


 

Member
Статус: Не в сети
Регистрация: 21.10.2003
SweetLow
Цитата:
1. Опции компиляции не указаны.

Я поначалу не думал открывать исходник, а для exe-шника это не надо. Да и не сильно эти опции влияют (на результат не сказывается).
Цитата:
2. Все люди уже давно себе правильный CRT пересобрали Но пользовать его - не рулез. Простая консоль легче портируется.

Все же, наверное, не все люди. :) У кого-то пойдет, у кого-то нет. А Crt можно и не использовать, он только для красоты.
Цитата:
3. Копировать однотипные массивы можно простым присваиванием. Никаких форов.

Спасибо. Не знал. Впрочем, на результаты это не сказалось.
Цитата:
4. CLRSCR в конце явно не в тему

Я не хочу оставлять следы на экране после выхода в DOS. Все просто.
Цитата:
5. Практику программирования иначе как китайской с современной точки зрения не назовешь.

Зачем же так грубо? :) 90% кода взято из классических учебников алгоритмического программирования (Кнут, Дейкстра). Я не изменил ни строчки. Думаю, что у Билли Гейтса в Windows алгоритмы не лучше. :) А мои 10% - это интерфейс и замер времени. Я не виноват, что Turbo Pascal так компилирует.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 52 • Страница 2 из 3<  1  2  3  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan