Не поможет.
Ассемблер: memcpy (В чем подвох?)
Модератор: Модераторы разделов
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Ассемблер: memcpy
Nazyvaemykh писал(а): ↑19.09.2011 12:42разве апгрейд CPU сильно поможет? Там же в доступе к памяти затыки, а не CPU?
а вы всунете i7 в материнскую плату для iPIII?
нет. Потому, купив CPU, вам придётся докупить ещё и материнскую плату+память. А работать такой код(на i7) будет скорее всего как раз именно со скоростью memcpy из glibc на iPIII.
CPU тут упомянут просто для краткости, ибо всем понятно, что к i7 не пойдут DIMM-1.
кстати, может и поможет. Если кеш там в 10 раз больше, то возможно будет меньше промахов, если мы кидаем например маленькие (~50b) куски памяти внутри маленького (~100K) файла - большая часть файла будет в кеше внутри CPU, и всё будет работать быстрее (точнее, не настолько медленно, как оно обычно).
-
BratSinot
- Сообщения: 812
- ОС: Slackware64
Re: Ассемблер: memcpy
-Os itak teraet skorost'.
Nazyvaemykh писал(а): ↑19.09.2011 10:18BratSinot,
раз ужь взялись переписывать libc, не забудьте улучшить qsort. Сортировка пузырьком вместо используемого в glibc громоздкого алгоритма позволит сохранить куда больше памяти, чем улучшение memcpy.
Voobsheto qsort nety v ANSI C.
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Ассемблер: memcpy
drBatty писал(а): ↑19.09.2011 13:40кстати, может и поможет. Если кеш там в 10 раз больше, то возможно будет меньше промахов, если мы кидаем например маленькие (~50b) куски памяти внутри маленького (~100K) файла - большая часть файла будет в кеше внутри CPU, и всё будет работать быстрее (точнее, не настолько медленно, как оно обычно).
И это как-то сделает возможной сортировку массива из 1 миллиона int-ов? Что-то очень сомневаюсь. А merge или qsort могут сделать это за секунду и даже меньше. На селероне с маленьким кэшем.
В ANSI C его нет, а вот в любой реализации libc он есть.
PS. А почему транслитом?
И как раз qsort таки можно улучшить, а memcpy - вряд ли.
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Ассемблер: memcpy
не помню как в ANSI C, но в mslibc & glibc есть qsort
Os = оптимизация по размеру. На асм не действует. Учите матчасть.
Os = оптимизация по размеру. На асм не действует. Учите матчасть.
-
watashiwa_daredeska
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Ассемблер: memcpy
Хотя, если именно ANSI C, то может быть. А если IEEE, то уже over 20 лет как qsort есть в стандарте.
Мои розовые очки
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Ассемблер: memcpy
frp писал(а): ↑19.09.2011 15:27
кстати, может и поможет. Если кеш там в 10 раз больше, то возможно будет меньше промахов, если мы кидаем например маленькие (~50b) куски памяти внутри маленького (~100K) файла - большая часть файла будет в кеше внутри CPU, и всё будет работать быстрее (точнее, не настолько медленно, как оно обычно).
И это как-то сделает возможной сортировку массива из 1 миллиона int-ов? Что-то очень сомневаюсь. А merge или qsort могут сделать это за секунду и даже меньше. На селероне с маленьким кэшем.
никак. я о другом случае. 1М intов это 4Мб даже на 32х битах.
BratSinot
толсто...
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
-
taaroa
- Сообщения: 1319
Re: Ассемблер: memcpy
…но один фиг по ссылкам не ходят. в самом первом сообщении отсылка к ответам на все вопросы по glibc.
:wq
-
BratSinot
- Сообщения: 812
- ОС: Slackware64
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Ассемблер: memcpy
На внешние библиотеки тоже не влияет. Если без оптимизации был бы вызван _memcpy_sse42 - он и будет вызван. Да и это никак не повлияет на размер бинарника - все равно нужная функция хранится в libc.so.6, а не в вашем бинарнике.
PS. Чего орать? И зачем нужна оптимизация по размеру кода на x86_64?
-
Nazyvaemykh
- Сообщения: 438
- Статус: Подопытный участник
Re: Ассемблер: memcpy
и да, в этом треде столько раз была упомянута какая-то оптимизация memcpy с использованием sse2, что мне уже стало любопытно. Можно посмотреть на исходники?
¡ Страсть к разрушению есть творческая страсть!
-
frp
- Сообщения: 1445
- ОС: Debian Squeeze
Re: Ассемблер: memcpy
quote name='Nazyvaemykh' date='19th September 2011 - в 19:40' post=1181961]
и да, в этом треде столько раз была упомянута какая-то оптимизация memcpy с использованием sse2, что мне уже стало любопытно. Можно посмотреть на исходники?
[quote]
Честно говоря, хз, какой профит может дать sse2 для memcpy. Мне тоже интересно, но исходников скачанных нет, а скачать смогу только завтра.
и да, в этом треде столько раз была упомянута какая-то оптимизация memcpy с использованием sse2, что мне уже стало любопытно. Можно посмотреть на исходники?
[quote]
Честно говоря, хз, какой профит может дать sse2 для memcpy. Мне тоже интересно, но исходников скачанных нет, а скачать смогу только завтра.
-
BratSinot
- Сообщения: 812
- ОС: Slackware64
Re: Ассемблер: memcpy
Nazyvaemykh писал(а): ↑19.09.2011 20:40и да, в этом треде столько раз была упомянута какая-то оптимизация memcpy с использованием sse2, что мне уже стало любопытно. Можно посмотреть на исходники?
Во первых, я упоминал sse42, хотя вроде есть и sse3 и sse2.
Вообще, в SSE42 что-то про строки упоминается.
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Ассемблер: memcpy
1. не надо орать.
2. какое отношение имеет ваш код к glibc?
3. мне лениво смотреть исходники, есть много других мест, где можно сэкономить. И не только можно, но и нужно.
наверное речь идёт об увеличении числа бит. К примеру, MMX оперировала 64х битными числами на 32х битных компьютерах, SSE1 уже 128и битными числами. По идее, возможно перебрасывать данные из памяти в память по 128 бит. С другой стороны, если операции переброски 64х битных чисел спариваются, то разницы никакой. На практике похоже разница есть, но небольшая, и неоднозначная.
и кстати, макросы в memcpy() для i586 никак не зависят от -O, ибо также написаны на ассемблере. смотрел glibc-2.13