Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Посчитать строки в текстовике, используя стринговый метод 
:(
    Опции темы
Girder
Дата 2.1.2007, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Цитата(W4FhLF @  2.1.2007,  13:09 Найти цитируемый пост)
Что ты подразумеваешь под разрядностью команды? У команды нет такого понятия "разрядность", есть размер смещения и размер непосредственного операнда и как это "переключать разрядность команды" я тоже не понимаю. Выразись точнее.

см.: mov al,xx и mov ax,xxxx или mov eax,xxxxxxxx.
Постоянная их смена заставляет проц также тратить время на их переключения - называеться сие чудо: Время переключение задачи команды... Т.е. постоянная чередование заставляет проц также тратить время на переключение или... если мне не изменяет память, считывание все равно происходит полное, а потом отсекаеться лишнее(но как там точно - не помню).

Цитата(W4FhLF @  2.1.2007,  13:09 Найти цитируемый пост)
А чего тут думать? Во-первых, если в файле кол-во строк, чья длина < 3 достаточно, то в одной иттерации можно определить сразу два(ну если без возврата каретки, то три) переноса. Во-вторых, считывается сразу машинное слово в регистр, на наших процессорах работа с DWORD'ами естественно происходит быстрее, чем с байтами и младшими частями регистров. В-третьих, сравнение происходит уже со значением регистра, а не со значением в памяти/кеше. Ну и конечно гораздо меньше кеш-промахов.
Нет... основное не здесь зарыто.

PS: Но енто все не главное, я просто хотел показать то что... не язык написания кода определяет его скорость smile 


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
W4FhLF
Дата 2.1.2007, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 6
Всего: 121



Цитата

см.: mov al,xx и mov ax,xxxx или mov eax,xxxxxxxx.
Постоянная их смена заставляет проц также тратить время на их переключения - называеться сие чудо: Время переключение команды... Т.е. постоянная чередование заставляет проц также тратить время на переключение или... если мне не изменяет память, считывание все равно происходит полное, а потом отсекаеться лишнее(но как там точно - не помню).


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

Цитата

Нет... основное не здесь зарыто.


Может потому что в современных процессорах несколько АЛУ и распаралеливание некоторых расчётов позволяет исполнять их процессору одновременно? 

Цитата

PS: Но енто все не главное, я просто хотел показать то что... не язык написания кода определяет его скорость


Это лишь частный случай, в общем всё равно написание кода на чистом ассемблере,  тем более, когда это делается с умом, даёт куда более впечатляющие результатыsmile Ручная оптимизация и код на ассемблере всегда будут выигрывать компилятор.

Да, чуть не забылsmile

Код

Function GetStringCount(Path: pChar): dword;
var
hFile, hMap, fSize, a: dword;
pMemory: pointer;
begin
  hFile := CreateFile(Path, GENERIC_READ, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);
  fSize := GetFileSize(hFile,0);
  hMap := CreateFileMapping(hFile, nil, PAGE_READONLY, 0, 0, nil);
  pMemory := MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);

  asm
    push eax
    push ecx
    push ebx
    push edx


    mov ebx,pMemory
    mov ecx,[fSize]
    shr ecx,4
    xor edx,edx
    @loop:
      mov eax,[ebx]
      sub eax,$0a000a00
      cmp eax,$04000000
      adc edx,0
      cmp ah,4
      adc edx,0
      mov eax,[ebx+4]
      sub eax,$0a000a00
      cmp eax,$04000000
      adc edx,0
      cmp ah,4
      adc edx,0
      mov eax,[ebx+8]
      sub eax,$0a000a00
      cmp eax,$04000000
      adc edx,0
      cmp ah,4
      adc edx,0
      mov eax,[ebx+$C]
      sub eax,$0a000a00
      cmp eax,$04000000
      adc edx,0
      cmp ah,4
      adc edx,0
      add ebx,16
      dec ecx
    jnz @loop
    inc edx
    mov Result,edx

    pop edx
    pop ebx
    pop ecx
    pop eax
  end;
  UnmapViewOfFile(pMemory);
  CloseHandle(hMap);
  CloseHandle(hFile);
end;


Этот алгоритм у меня работает в 3 РАЗА быстрее самого быстрого придложенного тобою. На делфи будешь переписывать?smile
Маски, как оказалось, рулят.




--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
W4FhLF
Дата 2.1.2007, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 6
Всего: 121



Да, забыл сказать, что алгоритм расчитан на то, что перенос это CrLf


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Girder
Дата 2.1.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



На счет "задачи" енто я оговорился, естественно имелось в виду "команды"

Добавлено @ 16:02 
Цитата(W4FhLF @  2.1.2007,  15:29 Найти цитируемый пост)
На делфи будешь переписывать?
Не сейчас... после 9 числа.

PS: Уезжаю...



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
W4FhLF
Дата 2.1.2007, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


Профиль
Группа: Участник Клуба
Сообщений: 2831
Регистрация: 2.12.2006

Репутация: 6
Всего: 121



Цитата

Не сейчас... после 9 числа.

PS: Уезжаю...


Да наверное не получится. По-крайней мере я не не знаю и ниразу не слышал о том, что на делфи есть возможность складывать числа с учётом флага переноса(команда adc).

Погуглил на тему "время переключения команды", ничё не нашёл и до этого ни в какой литературе такой характеристики у процессора не встречал, так, что не знаю о чём ты.

Это сообщение отредактировал(а) W4FhLF - 2.1.2007, 16:46


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
ivan219
Дата 2.1.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Вот это да к каким баталиям привёл мой оди топик smile

Добавлено @ 16:44 
Цитата(Girder @ 1.1.2007,  13:44)
Цитата(ivan219 @  30.12.2006,  19:31 Найти цитируемый пост)
Все остальные просто виснут
Да что-ты?

Ну маленько погоричился может если подождать ещё с минуту может и былбы результат smile 
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.