Ассемблер: memcpy (В чем подвох?)

Модератор: Модераторы разделов

frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Ассемблер: memcpy

Сообщение frp »

drBatty писал(а):
19.09.2011 12:04
Ну CPU придётся проапгрейдить до i7, но ведь это мелочь!

Не поможет.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Ассемблер: memcpy

Сообщение drBatty »

Nazyvaemykh писал(а):
19.09.2011 12:42
разве апгрейд CPU сильно поможет? Там же в доступе к памяти затыки, а не CPU?

а вы всунете i7 в материнскую плату для iPIII?
нет. Потому, купив CPU, вам придётся докупить ещё и материнскую плату+память. А работать такой код(на i7) будет скорее всего как раз именно со скоростью memcpy из glibc на iPIII.
CPU тут упомянут просто для краткости, ибо всем понятно, что к i7 не пойдут DIMM-1.
frp писал(а):
19.09.2011 13:06
Не поможет.

кстати, может и поможет. Если кеш там в 10 раз больше, то возможно будет меньше промахов, если мы кидаем например маленькие (~50b) куски памяти внутри маленького (~100K) файла - большая часть файла будет в кеше внутри CPU, и всё будет работать быстрее (точнее, не настолько медленно, как оно обычно).
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
BratSinot
Сообщения: 812
ОС: Slackware64

Re: Ассемблер: memcpy

Сообщение BratSinot »

frp писал(а):
19.09.2011 09:14
Из -Os на десктопе смысл нулевой. А терять из-за нескольких байт производительность в разы - это не улучшение ИМХО.

-Os itak teraet skorost'.

Nazyvaemykh писал(а):
19.09.2011 10:18
BratSinot,
раз ужь взялись переписывать libc, не забудьте улучшить qsort. Сортировка пузырьком вместо используемого в glibc громоздкого алгоритма позволит сохранить куда больше памяти, чем улучшение memcpy.

Voobsheto qsort nety v ANSI C.
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Ассемблер: memcpy

Сообщение frp »

drBatty писал(а):
19.09.2011 13:40
кстати, может и поможет. Если кеш там в 10 раз больше, то возможно будет меньше промахов, если мы кидаем например маленькие (~50b) куски памяти внутри маленького (~100K) файла - большая часть файла будет в кеше внутри CPU, и всё будет работать быстрее (точнее, не настолько медленно, как оно обычно).

И это как-то сделает возможной сортировку массива из 1 миллиона int-ов? Что-то очень сомневаюсь. А merge или qsort могут сделать это за секунду и даже меньше. На селероне с маленьким кэшем.

BratSinot писал(а):
19.09.2011 15:20
Voobsheto qsort nety v ANSI C.

В ANSI C его нет, а вот в любой реализации libc он есть.

PS. А почему транслитом?

BratSinot писал(а):
19.09.2011 15:20
Voobsheto qsort nety v ANSI C.

И как раз qsort таки можно улучшить, а memcpy - вряд ли.
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Ассемблер: memcpy

Сообщение watashiwa_daredeska »

BratSinot писал(а):
19.09.2011 15:20
Voobsheto qsort nety v ANSI C.
У меня другие сведения.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Ассемблер: memcpy

Сообщение drBatty »

не помню как в ANSI C, но в mslibc & glibc есть qsort
Os = оптимизация по размеру. На асм не действует. Учите матчасть.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Ассемблер: memcpy

Сообщение watashiwa_daredeska »

drBatty писал(а):
19.09.2011 18:30
не помню как в ANSI C
Хотя, если именно ANSI C, то может быть. А если IEEE, то уже over 20 лет как qsort есть в стандарте.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Ассемблер: memcpy

Сообщение drBatty »

frp писал(а):
19.09.2011 15:27

кстати, может и поможет. Если кеш там в 10 раз больше, то возможно будет меньше промахов, если мы кидаем например маленькие (~50b) куски памяти внутри маленького (~100K) файла - большая часть файла будет в кеше внутри CPU, и всё будет работать быстрее (точнее, не настолько медленно, как оно обычно).


И это как-то сделает возможной сортировку массива из 1 миллиона int-ов? Что-то очень сомневаюсь. А merge или qsort могут сделать это за секунду и даже меньше. На селероне с маленьким кэшем.

никак. я о другом случае. 1М intов это 4Мб даже на 32х битах.
BratSinot
толсто...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Ассемблер: memcpy

Сообщение frp »

drBatty писал(а):
19.09.2011 18:53
толсто...

У нас не ЛОР же.
Спасибо сказали:
Аватара пользователя
taaroa
Сообщения: 1319

Re: Ассемблер: memcpy

Сообщение taaroa »

frp писал(а):
19.09.2011 18:56
У нас не ЛОР же.

…но один фиг по ссылкам не ходят. в самом первом сообщении отсылка к ответам на все вопросы по glibc.
:wq
Спасибо сказали:
BratSinot
Сообщения: 812
ОС: Slackware64

Re: Ассемблер: memcpy

Сообщение BratSinot »

drBatty писал(а):
19.09.2011 18:30
Os = оптимизация по размеру. На асм не действует. Учите матчасть.

НО ДЕЙСТВУЕТ НА ФУНКЦИИ ВЫЗЫВАЕМЫЕ ИЗ glibc!!! Если ты указал -Os, он явно не будет вызывать _memcpy_sse42!
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Ассемблер: memcpy

Сообщение frp »

BratSinot писал(а):
19.09.2011 19:56
НО ДЕЙСТВУЕТ НА ФУНКЦИИ ВЫЗЫВАЕМЫЕ ИЗ glibc!!! Если ты указал -Os, он явно не будет вызывать _memcpy_sse42!

На внешние библиотеки тоже не влияет. Если без оптимизации был бы вызван _memcpy_sse42 - он и будет вызван. Да и это никак не повлияет на размер бинарника - все равно нужная функция хранится в libc.so.6, а не в вашем бинарнике.

PS. Чего орать? И зачем нужна оптимизация по размеру кода на x86_64?
Спасибо сказали:
Аватара пользователя
Nazyvaemykh
Сообщения: 438
Статус: Подопытный участник

Re: Ассемблер: memcpy

Сообщение Nazyvaemykh »

и да, в этом треде столько раз была упомянута какая-то оптимизация memcpy с использованием sse2, что мне уже стало любопытно. Можно посмотреть на исходники?
¡ Страсть к разрушению есть творческая страсть!
Спасибо сказали:
frp
Сообщения: 1445
ОС: Debian Squeeze

Re: Ассемблер: memcpy

Сообщение frp »

quote name='Nazyvaemykh' date='19th September 2011 - в 19:40' post=1181961]
и да, в этом треде столько раз была упомянута какая-то оптимизация memcpy с использованием sse2, что мне уже стало любопытно. Можно посмотреть на исходники?
[quote]
Честно говоря, хз, какой профит может дать sse2 для memcpy. Мне тоже интересно, но исходников скачанных нет, а скачать смогу только завтра.
Спасибо сказали:
BratSinot
Сообщения: 812
ОС: Slackware64

Re: Ассемблер: memcpy

Сообщение BratSinot »

Nazyvaemykh писал(а):
19.09.2011 20:40
и да, в этом треде столько раз была упомянута какая-то оптимизация memcpy с использованием sse2, что мне уже стало любопытно. Можно посмотреть на исходники?

Во первых, я упоминал sse42, хотя вроде есть и sse3 и sse2.
Вообще, в SSE42 что-то про строки упоминается.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Ассемблер: memcpy

Сообщение drBatty »

BratSinot писал(а):
19.09.2011 19:56
НО ДЕЙСТВУЕТ НА ФУНКЦИИ ВЫЗЫВАЕМЫЕ ИЗ glibc!!! Если ты указал -Os, он явно не будет вызывать _memcpy_sse42!

1. не надо орать.
2. какое отношение имеет ваш код к glibc?
3. мне лениво смотреть исходники, есть много других мест, где можно сэкономить. И не только можно, но и нужно.
frp писал(а):
19.09.2011 21:18
Честно говоря, хз, какой профит может дать sse2 для memcpy.

наверное речь идёт об увеличении числа бит. К примеру, MMX оперировала 64х битными числами на 32х битных компьютерах, SSE1 уже 128и битными числами. По идее, возможно перебрасывать данные из памяти в память по 128 бит. С другой стороны, если операции переброски 64х битных чисел спариваются, то разницы никакой. На практике похоже разница есть, но небольшая, и неоднозначная.


и кстати, макросы в memcpy() для i586 никак не зависят от -O, ибо также написаны на ассемблере. смотрел glibc-2.13
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: