The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Разработчики из Google предложили разработать свою libc для ..."
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Отдельный RSS теперь доступен для каждого обсуждения в форуме и каждого минипортала.
. "Разработчики из Google предложили разработать свою libc для ..." +2 +/
Сообщение от Аноним84701 (ok), 29-Июн-19, 12:49 
>>strlen(d) из оригинала может быть заменен на специфический для платформы очень быстрый набор инструкций, а твой "for (; *to != '\0'; ++to)" (который на самом деле while(*to) to++;) - нет.
> Дайте пример! Хочу увидеть где можно ускорить и без того простейший инкремент.

Например, обрабатывать не байтик за байтиком:
https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/i38...


L(1):   movl (%eax), %ecx       /* get word (= 4 bytes) in question */
  65         movl $0xfefefeff, %edx  /* magic value */
  66         addl %ecx, %edx         /* add the magic value to the word.  We get
  67                                    carry bits reported for each byte which
  68                                    is *not* 0 */
  69         jnc L(3)                /* highest byte is NUL => return pointer */
  70         xorl %ecx, %edx         /* (word+magic)^word */

Или вообще использовать SIMD:

https://www.strchr.com/strcmp_and_strlen_using_sse_4.2


; ==== strlen ====
strlen_sse42:
  ; ecx = string
  mov eax, -16
  mov edx, ecx
  pxor xmm0, xmm0

STRLEN_LOOP:
    add eax, 16
    PcmpIstrI xmm0, dqword[edx + eax], EQUAL_EACH
    jnz STRLEN_LOOP

  add eax, ecx
  ret

glibc
https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/x86...


L(loop):
174
175         addq    $64, %rax
176         cmpq    %rax, %r10
177         je      L(exit_end)
178
179         movdqa  (%rax), %xmm0
180         PMINU   16(%rax), %xmm0
181         PMINU   32(%rax), %xmm0
182         PMINU   48(%rax), %xmm0
183         PCMPEQ  %xmm3, %xmm0
184         pmovmskb        %xmm0, %edx
185         testl   %edx, %edx
186         jne     L(exit)
187         jmp     L(loop)

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Разработчики из Google предложили разработать свою libc для ..., opennews, 26-Июн-19, 13:37  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру