Сейчас на форуме: Rio, tyns777, zombi-vadim (+7 невидимых)

 eXeL@B —› Программирование —› Статьи, гайды, мануалы наборам SSE2/3/4/5, AVX, XOP, FMA, MMX, AES...
Посл.ответ Сообщение

Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 26 октября 2014 11:29
· Личное сообщение · #1

Здравствуйте!
Начал потихоньку использовать SSE2 инструкции в асм вставках, хотелось бы почитать побольше хороших статей на русском + нормальное объяснение где и как уместно использовать ( вот по типу такого: http://www.allasm.ru/proc_09.php )
Я понимаю, что есть интеловские гайды https://software.intel.com/sites/landingpage/IntrinsicsGuide/, но мне они не очень нравятся. Может кто-то поделиться своими статьями, наблюдениями по данному поводу

| Сообщение посчитали полезным: sivorog

Ранг: 590.6 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 26 октября 2014 14:33
· Личное сообщение · #2

Может поделишься что за такие задачи, которые требуют разработки на асме?
Самый простой путь использования высокооптимизированного асма - компилировать высокоуровневые языки современными компиляторами. Например, интеловским.

-----
старый пень




Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 26 октября 2014 14:44
· Личное сообщение · #3

r_e пишет:
Например, интеловским.

В том-то и дело, я ожидал от intel компиля SSE2, а он в обычный цикл развернул. Пришлось вручную переписать.



Ранг: 53.9 (постоянный), 33thx
Активность: 0.050
Статус: Участник

Создано: 26 октября 2014 14:52
· Личное сообщение · #4

ELF_7719116 пишет:
В том-то и дело, я ожидал от intel компиля SSE2, а он в обычный цикл развернул. Пришлось вручную переписать.

Насколько я помню, многие опции необходимо было активировать в настройках проекта.
Еще может быть компилятор посчитал, что в вашем случае не обоснованно "по-другому" разворачивать цикл.




Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 26 октября 2014 17:52
· Личное сообщение · #5

r_e пишет:
Например, интеловским.


а там больше нет пакости для владельцев процессоров АМД?



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 26 октября 2014 18:06
· Личное сообщение · #6

Gideon Vi пишет:
а там больше нет пакости для владельцев процессоров АМД?

что за пакость? в каких версиях была?




Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 26 октября 2014 19:03
· Личное сообщение · #7

http://geektimes.ru/post/80050/



Ранг: 590.6 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 26 октября 2014 19:04 · Поправил: r_e
· Личное сообщение · #8

Ну там не пакость была, а условие что если проц АМД не интел, то компилить только базовым набором инструкций.
Я поэтому и спросил "что за задача". Может это попытки забивать гвозди микроскопом, а может проще не гоняться за +1% производительности, а развернуть кластер в облаке.

-----
старый пень




Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 27 октября 2014 00:12
· Личное сообщение · #9

ELF_7719116 пишет:
дравствуйте!
Начал потихоньку использовать SSE2 инструкции в асм вставках, хотелось бы почитать побольше хороших статей на русском

поддержу топик. тоже интересно. боюсь нареканий. но очено многие бруты требуют оптимизаиции. страдал на досуге, но жаль представить не чего. но почиталбы с удовольствием.. еще. может приложить сюда.. алго оптимизированные с учетом размерности регистров

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 27 октября 2014 08:21
· Личное сообщение · #10

r_e пишет:
а условие что если проц АМД не интел, то компилить только базовым набором инструкций.

у меня 10.1, вроде SSE2 есть в ексешнике. Во всяком случае, залезть оледебагером и по CPUID найти переход, думаю, несложно будет ... или так что-то навешано должно быть??

такой вопрос: а для возведения числа в степень, в SSE2(3/4/5) инструкции не предусмотрено? хорошо если степень маленькая, можно pmuludq xmm0, xmm1 друг за дружкой написать. А если большая степень - банально крутить в цикле?




Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 27 октября 2014 08:43
· Личное сообщение · #11

r_e пишет:
если проц АМД не интел, то компилить только базовым набором инструкций


разве не компилировались несколько наборов инструкций, а потом, при запуске программы определялся проц и выполнялась соответствующая ветка?

r_e пишет:
Ну там не пакость была


угу, мимимишная подставочка. Без предупреждения.



Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 27 октября 2014 10:20
· Личное сообщение · #12

ELF_7719116 пишет:
а для возведения числа в степень, в SSE2(3/4/5) инструкции не предусмотрено?

ты там случаем.. не РСА оптимизиш? для РСА нужно просто по другому задачу рассматривать. Типа адаптивные алгоритмы юзать

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 27 октября 2014 10:20
· Личное сообщение · #13

а если степень большая то переписать формулу x^y на exp и log
http://jrfonseca.blogspot.com/2008/09/fast-sse2-pow-tables-or-polynomials.html
итд, гугл полон ответов

Добавлено спустя 4 минуты
да и вообще зачем заморачиваться асмом когда люди на С уже все написали
либ по гуглу дофига
http://web.archive.org/web/20120724203759/http://yoffy.dyndns.org/svn/yofcpp/trunk/yoffy/simdmath/sse2/
вместе с формулами где не exp а 2^




Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 27 октября 2014 12:07
· Личное сообщение · #14

Gideon Vi пишет:
разве не компилировались несколько наборов инструкций

была такая хренотень. ппц рипать было всякую гадость

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 590.6 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 27 октября 2014 12:29
· Личное сообщение · #15

Gideon Vi
Да, неправильно выразился. Имел в виду что в случае неинтел управление уходило на неэффективную ветку. Где-то в описаниях встречал что "неэффективность" была в использовании только базового набора, якобы для обеспечения совместимости со всеми процами.

-----
старый пень




Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 27 октября 2014 18:53
· Личное сообщение · #16

VodoleY пишет:
для РСА нужно просто по другому задачу рассматривать. Типа адаптивные алгоритмы юзать

потом может и рса коснется. что такое "адаптивные алгоритмы"?
r_e пишет:
Имел в виду что в случае неинтел управление уходило на неэффективную ветку. Где-то в описаниях встречал что "неэффективность" была в использовании только базового набора, якобы для обеспечения совместимости со всеми процами.

А действительно, есть такая функция в ексешнике...вот же суки! впрочем, все это несложно исправить
Code:
  1. 00411CEB  |.  33C0          XOR EAX,EAX
  2. 00411CED  |.  0FA2          CPUID
  3. 00411CEF  |.  8945 E0       MOV DWORD PTR SS:[EBP-20],EAX
  4. 00411CF2  |.  895D E4       MOV DWORD PTR SS:[EBP-1C],EBX
  5. 00411CF5  |.  894D E8       MOV DWORD PTR SS:[EBP-18],ECX
  6. 00411CF8  |.  8955 EC       MOV DWORD PTR SS:[EBP-14],EDX
  7. 00411CFB  |.  B8 01000000   MOV EAX,1
  8. 00411D00  |.  0FA2          CPUID
  9. 00411D02  |.  8945 F0       MOV DWORD PTR SS:[EBP-10],EAX
  10. 00411D05  |.  895D F4       MOV DWORD PTR SS:[EBP-0C],EBX
  11. 00411D08  |.  894D F8       MOV DWORD PTR SS:[EBP-8],ECX
  12. 00411D0B  |.  8955 FC       MOV DWORD PTR SS:[EBP-4],EDX
  13. 00411D0E  |.  E9 1A000000   JMP 00411D2D
  14. 00411D13  |>  33C0          XOR EAX,EAX
  15. 00411D15  |.  8945 E0       MOV DWORD PTR SS:[EBP-20],EAX
  16. 00411D18  |.  8945 E4       MOV DWORD PTR SS:[EBP-1C],EAX
  17. 00411D1B  |.  8945 E8       MOV DWORD PTR SS:[EBP-18],EAX
  18. 00411D1E  |.  8945 EC       MOV DWORD PTR SS:[EBP-14],EAX
  19. 00411D21  |.  8945 F0       MOV DWORD PTR SS:[EBP-10],EAX
  20. 00411D24  |.  8945 F4       MOV DWORD PTR SS:[EBP-0C],EAX
  21. 00411D27  |.  8945 F8       MOV DWORD PTR SS:[EBP-8],EAX
  22. 00411D2A  |.  8945 FC       MOV DWORD PTR SS:[EBP-4],EAX
  23. 00411D2D  |>  8B45 E4       MOV EAX,DWORD PTR SS:[EBP-1C]
  24. 00411D30  |.  3D 47656E75   CMP EAX,756E6547 //uine ... Intel
  25. 00411D35  |.  75 1B         JNE SHORT 00411D52
  26. 00411D37  |.  8B45 EC       MOV EAX,DWORD PTR SS:[EBP-14]
  27. 00411D3A  |.  3D 696E6549   CMP EAX,49656E69 //Int..
  28. 00411D3F  |.  75 11         JNE SHORT 00411D52
  29. 00411D41  |.  8B45 E8       MOV EAX,DWORD PTR SS:[EBP-18]
  30. 00411D44  |.  3D 6E74656C   CMP EAX,6C65746E
  31. 00411D49  |.  75 07         JNZ SHORT 00411D52

вот!



Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 27 октября 2014 20:01 · Поправил: VodoleY
· Личное сообщение · #17

ELF_7719116 пишет:
"адаптивные алгоритмы"?

узко заточенные, но работающие на голову быстрее. могу привести пример
умножение больших чисел. например х*х , х+1*х+1. ну типа перебор при бруте... не помню, помойму пифогоровое.. вобщем все сводится к тому.. что ты (х+1)^2 = x^2+2x+1 разворачиваеш. и в результате чтоб посчитать тебе надо.. предыдущий результать хранить.. привать к нему shl 1 от х .. и потом and 1. это гораздо быстрее чем умножение. Правда требуется немного памяти дополнительной, чтоб предыдущий результат хранить
З.Ы. очень советую почитать древнюю статью от Зобми.. касательно оптимизации крипто брутов
АДД. соврал. то что я приввел очень полезно для брута РСА по Ферма по пифагору.. там по быстрому тест, на то является ли число квадратом.. но я могу более быстрый эксресс тест предложить

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 27 октября 2014 20:36
· Личное сообщение · #18

VodoleY пишет:
очень советую почитать древнюю статью от Зобми.. касательно оптимизации крипто брутов

где саму статью можно взять?



Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 27 октября 2014 21:26
· Личное сообщение · #19

http://z0mbie.host.sk/
там есть RSA для прогаммистов. если интеретна эта тема, то остальное онли в приват

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....





Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 28 октября 2014 04:43
· Личное сообщение · #20

ELF_7719116 пишет:
А действительно, есть такая функция в ексешнике...вот же суки! впрочем, все это несложно исправить


угу. Только мало кто знает, ещё меньше - кто исправляет. А пользуются этой хренью поголовно, гонясь за мифической авто-оптимизацией.



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 28 октября 2014 08:21
· Личное сообщение · #21

Gideon Vi пишет:
...гонясь за мифической авто-оптимизацией.

если говорить об оптимизации вообще, то в моей случае родной компиль MS VS Studio 6.0 дает код заметно хуже по быстродействию, чем интел цпп (особенно по циклам видно).

вопрос такого optimization плана: для оператора memset® ( void * memptr, int val, size_t num ) , SSE2(3/4/5...) целесообразно использовать? если num кратен 16 или больше, чем 100500, делаем как-то так:
Code:
  1. PXOR xmm0, xmm0
  2. MOV EAX, указатель
  3. MOVUPD DQWORD PTR SS:[EAX],xmm0
  4. ADD EAX, sizeof(xmm0)         // :)
  5. MOVUPD DQWORD PTR SS:[EAX],xmm0 //или точно также EAX+0xF
  6. ...


компилятор развернет это все, в лучшем случае, аналогично:
Code:
  1. 0040794B  |.  33C0          XOR EAX,EAX
  2. 0040794D  |.  890424        MOV DWORD PTR SS:[ESP],EAX
  3. 00407950  |.  894424 04     MOV DWORD PTR SS:[ESP+4],EAX
  4. 00407954  |.  894424 08     MOV DWORD PTR SS:[ESP+8],EAX
  5. 00407958  |.  894424 0C     MOV DWORD PTR SS:[ESP+0C],EAX
  6. 0040795C  |.  894424 10     MOV DWORD PTR SS:[ESP+10],EAX
  7. 00407960  |.  894424 14     MOV DWORD PTR SS:[ESP+14],EAX
  8. 00407964  |.  894424 18     MOV DWORD PTR SS:[ESP+18],EAX
  9. 00407968  |.  894424 1C     MOV DWORD PTR SS:[ESP+1C],EAX
  10. ...

или в цикле все крутить будет, обычным вызовом отдельно-оформленного memset



Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 28 октября 2014 08:33 · Поправил: VodoleY
· Личное сообщение · #22

ELF_7719116 а ты по тикам посчитай, че там огород городить?
З,Ы почитай еще тему.. я с пол года назад создавал.. про алгоритмы и оптимизации.. ктото давал линку на человека, который пишет статьи и занимается исключительно оптимизацие кода
З.Ы.Ы и да.. еще с 90ых.. не забываем что оптимизация идет в 2ух напрявлениях.. или по скорости или по обьему
З.Ы.Ы.Ы еще есть касательно алго, чудесные в ПДФ лекции помойму Тюменского института, по криптографии. Там были алго развернуты с вариантами оптимизации. Это если решил бруты оптимизить

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 08 ноября 2014 10:51
· Личное сообщение · #23

VodoleY
окей.

(!)касаемо общей оптимизации. Допустим для itoa, с определенным радиксом, я предпочитаю использовать заточенный xtoa (копирую и перерабатываю для себя), т.е. вместо itoa(any_integer,&buffer[0],16); использовать заточенный
Code:
  1. // #define radix 16
  2. void __fastcall itoa_16_fast(unsigned long val, char* buf)
  3. {
  4.         char *p; /* pointer to traverse string */
  5.         char *firstdig; /* pointer to first digit */
  6.         char temp; /* temp char */
  7.         unsigned digval; /* value of digit */
  8.  
  9.         p = buf;
  10.  
  11.         firstdig = p; /* save pointer to first digit */
  12.  
  13.         do {
  14.             digval = (unsigned) (val % 16);
  15.             val /= 16; /* get next digit */
  16.  
  17.             /* convert to ascii and store */
  18.             if (digval > 9)
  19.                 *p++ = (char) (digval - 10 + 'a'); /* a letter */
  20.             else
  21.                 *p++ = (char) (digval + '0'); /* a digit */
  22.         } while (val > 0);
  23.  
  24.         /* We now have the digit of the number in the buffer, but in reverse
  25.            order.  Thus we reverse them now. */
  26.  
  27.         *p-- = '\0'; /* terminate string; p points to last digit */
  28.  
  29.         do {
  30.             temp = *p;
  31.             *= *firstdig;
  32.             *firstdig = temp; /* swap *p and *firstdig */
  33.             --p;
  34.             ++firstdig; /* advance to next two digits */
  35.         } while (firstdig < p); /* repeat until halfway */
  36. }

оптимизирующий компиль вставит вместо div/mul - SHR, ну и тд


еще пару типичных функций от меня (elf edition) на основе xtoa
1. Переводим последовательность (одномерный массив) байт любой длины в 16-ричную ASCIIZ строку

... = {1a,fb,cd,ca,fe,17,a1,b7};
"1afbcdcafe17a1b7"

Code:
  1. void __stdcall xtox_hex 
  2.         (
  3.          byte* DigitalString, //входная последовательность
  4.         unsigned long LENGHT, //вход - длина массива
  5.         TCHAR *buf //выход - буфер под ASCIIZ строку
  6.         )
  7.  
  8. {
  9.         TCHAR *p;
  10.         TCHAR *first;
  11.         byte digval;
  12.                  
  13.         p = buf;
  14.                  first=buf;
  15.         do {
  16.                         byte val = *(DigitalString++);
  17.             
  18.                  digval = (unsigned) (((val & 0x0F)<<4 | (val & 0xF0) >> 4) % 16); //сразу переворачиваем
  19.  
  20.             if (digval > 9)
  21.                 *p++ = (TCHAR) (digval - 10 + _T('a')); /* a letter */
  22.             else
  23.                 *p++ = (TCHAR) (digval + _T('0')); /* a digit */
  24.  
  25. digval = (unsigned) (val % 16);
  26.                           if (digval > 9)
  27.                 *p++ = (TCHAR) (digval - 10 + _T('a')); /* a letter */
  28.             else
  29.                 *p++ = (TCHAR) (digval + _T('0')); /* a digit */
  30.  
  31.         } while (--LENGHT > 0);
  32.  
  33.            *p-- = _T('\0');
  34.  
  35. }


2. ОБРАТНОЕ ПРЕОБРАЗОВАНИЕ. Из ACSIIZ(16-ричный формат) любой длины в последовательность (одномерный массив) байт
Code:
  1. void __stdcall strtox_hex (byte* Out_Hex, byte* Input_ASCII_String, unsigned long str_lengh)
  2. {
  3.          register byte Current_ASCII_Byte;
  4.          register byte Next_Byte;
  5.  
  6.          if(str_lengh&1)//в зависимости от четности
  7.                  {
  8.                         Next_Byte=(byte)*Input_ASCII_String++;
  9.                  if ( Next_Byte > 0x39)
  10.                 *Out_Hex++ = ((Next_Byte + 10 - BYTE(_T('a')))) & 0xF; /* a letter */
  11.             else
  12.                 *Out_Hex++ = ((Next_Byte - BYTE(_T('0')))) & 0xF; /* a digit */
  13.                  }
  14.          do
  15.          {
  16.                   Current_ASCII_Byte=(byte)*Input_ASCII_String++;
  17.                           if ( Current_ASCII_Byte > 0x39)
  18.                 Current_ASCII_Byte = (Current_ASCII_Byte + 10 - BYTE(_T('a'))); /* a letter */
  19.             else
  20.                 Current_ASCII_Byte = (Current_ASCII_Byte - BYTE(_T('0'))); /* a digit */
  21.  
  22.                          Current_ASCII_Byte = Current_ASCII_Byte << 4;
  23.                  
  24.                         Next_Byte=(byte)*Input_ASCII_String++;
  25.                           if ( Next_Byte > 0x39)
  26.                 Next_Byte = (Next_Byte + 10 - BYTE(_T('a'))) & 0x0F; /* a letter */
  27.             else
  28.                 Next_Byte = (Next_Byte - BYTE(_T('0'))) & 0x0F; /* a digit */
  29.  
  30.                  *Out_Hex++ = Current_ASCII_Byte | Next_Byte;
  31.          
  32.          }while(--str_lengh>0);
  33. }


Арчи сказал, что местами страшно, но годно Впрочем, кому не нравиться - милости прошу: выложите свой быстродействующий вариант



Ранг: 590.6 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 08 ноября 2014 14:31 · Поправил: r_e
· Личное сообщение · #24

ELF_7719116
Мало того что страшно, но еще и с багами.
Code:
  1. void __stdcall xtox_hex (byte* src, size_t size, LPTSTR dst)
  2. {
  3.   const TCHAR alphabet[] = { _T('0'), ..., _T('F') };
  4.   while (size--)
  5.   {
  6.    *dst++ = alphabet[*src >> 4];
  7.    *dst++ = alphabet[*src++ & 0xf];
  8.   }
  9. }

обратку тебе на ДЗ )))

-----
старый пень


| Сообщение посчитали полезным: ELF_7719116

Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 08 ноября 2014 19:23 · Поправил: ELF_7719116
· Личное сообщение · #25

r_e
бле...посмотрел на твой код: "а за карты символов я и забыл вообще, несмотря на то, что сам так делал", правда давно эт было. thx!!! за то что напомнил
только компиль не переваривает ,..., + static(или в глобальные)
Code:
  1. void __stdcall xtox_hex (byte* src, size_t size, LPTSTR dst)
  2. {
  3.   static const TCHAR alphabet[] = { _T('0'),_T('1'),_T('2'),_T('3'),_T('4'),_T('5'),_T('6'),_T('7'),_T('8'),_T('9'),_T('A'),_T('B'),_T('C'),_T('D'),_T('E'), _T('F') };
  4.  
  5.   while (size--)
  6.   {
  7.    *dst++ = alphabet[*src >> 4];
  8.    *dst++ = alphabet[*src++ & 0xf];
  9.   }
  10. }


r_e пишет:
обратку тебе на ДЗ )))

как-то так
Code:
  1. void __stdcall strtox_hex (byte* dst, LPTSTR src, size_t size) 
  2. {
  3.          static const byte byte_alphabet[] = {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,1,2,3,4,5,6,7,8,9,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xA,0xB,0xC,0xD,0xE,0xF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xA, 0xB,0xC,0xD, 0xE, 0xF};
  4. LPTSTR next_src=src++;
  5. size/=2;
  6.   while (size--)
  7.   {
  8.          *dst++ = (byte_alphabet[*src]) | (byte_alphabet[*next_src]<< 4);
  9.    src+=2;
  10.    next_src+=2;
  11.   }


вообщем, если у кого-то есть подобные трики -> предлагаю выкладывать



Ранг: 488.1 (мудрец), 272thx
Активность: 0.350
Статус: Участник

Создано: 09 ноября 2014 06:43
· Личное сообщение · #26

нихочу никого ообидеть.. но оптимизацией.. тут еще не пахло. рекомендую поискать почитать сорцы вирусни годов этад ниже 2к

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




Ранг: 590.6 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 09 ноября 2014 10:21
· Личное сообщение · #27

VodoleY
Ты код давай ))) Очень хочется увидеть что придумали быстрее выборки с таблиц.

-----
старый пень



 eXeL@B —› Программирование —› Статьи, гайды, мануалы наборам SSE2/3/4/5, AVX, XOP, FMA, MMX, AES...
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати