0xd34df00d 17.01.2013 13:14 Azoth_primary

std::find отсасывает у strchr с проглотом (4.8 секунды против 0.79). Хотя, казалось бы, инлайн, оптимизации компилятора и все такое.

Recommended by:

@pooq: моча съела говно

and @magog
1. Myp 17.01.2013 13:15 Work

Инлайн, кстати, не гарантирует того, что он реально будет. Зависит от коноплятора емнип

2. hirthwork 17.01.2013 13:15 mcabber

покажи тесты или GTFO

3. generatorglukoff 17.01.2013 13:15 Воркота

код в студию1

4. 0xd34df00dgeneratorglukoff /3 17.01.2013 13:15 Azoth_primary

NDA

5. 0xd34df00dhirthwork /2 17.01.2013 13:16 Azoth_primary

Хуестами. Сравнивал высер vtune'а для двух разных имплементаций одной очень часто вызываемой функции.

6. generatorglukoff0xd34df00d /4 17.01.2013 13:16 Воркота

тогда сасай
напедаллировал говно, даже не знаешь где у тебя проблема

7. 0xd34df00dgeneratorglukoff /6 17.01.2013 13:16 Azoth_primary

Че.

8. hirthwork0xd34df00d /7 17.01.2013 13:18 mcabber

благородный дон пытался донести до вас своё понимание корня проблемы.
не могу не подметить рационального зерна в его рассуждениях

9. magoghirthwork /8 17.01.2013 13:19 Azoth@Work

ты опять ромашкового ебанул?

10. 0xd34df00dhirthwork /8 17.01.2013 13:20 Azoth_primary

Могу, разве что, показать

vs

11. nobiiru 17.01.2013 13:25 /airbase

а ты думал. Сраные шаблоны.

12. 0xd34df00dnobiiru /11 17.01.2013 13:25 Azoth_primary

Казалось бы, причем тут шаблоны.

13. nobiiru0xd34df00d /12 17.01.2013 13:28 /airbase

std::find разве не из STL родом?

14. 0xd34df00dnobiiru /13 17.01.2013 13:29 Azoth_primary

Да, но шаблоны-то тут причем? У меня есть подозрение, что strchr реализован с ручными ассемблерными вставками и проверяет несколько байт за раз, например, или еще какую современную процессорную магию применяет. Инстанциация std::find для char* тоже могла бы так делать, но компилятор слишком туп.

15. generatorglukoff0xd34df00d /4 17.01.2013 13:29 Воркота

ок, что и где ты ищешь? символ в строке? локали отключил?

16. 0xd34df00dgeneratorglukoff /15 17.01.2013 13:30 Azoth_primary

Да, символ в строчке. Мне из строки `[eqgbplf` надо сделать строку `хуйпизда`. Для сего есть
static const char qwerty[] = "qwertyuiop[]asdfghjkl;'zxcvbnm,.QWERTYUIOP{}ASDFGHJKL:\"ZXCVBNM<>";
static const StrUTF8 ycuken ("йцукенгшщзхъфывапролджэячсмитьбюЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ");

Чочо за локали отключать?

17. nobiiru0xd34df00d /14 17.01.2013 13:31 /airbase

Похоже на то.

18. magog0xd34df00d /16 17.01.2013 13:44 mcabber

это ж пунтосвитчер! скачай сорсы линуховой такой фигни и посмотри как там

19. 0xd34df00dmagog /18 17.01.2013 13:45 Azoth_primary

Я не думаю, что у них стояла задача поддерживать сотни тыщ таких преобразований в секунду, поэтому они вряд ли стараются написать все максимально эффективно.

20. hirthwork0xd34df00d /16 17.01.2013 14:02 mcabber

интересно, где ты здесь применил strchr...

21. hirthworkhirthwork /20 17.01.2013 14:04 mcabber

и что тебе мешает эту задачу решать на таблице

22. 0xd34df00dhirthwork /20 17.01.2013 14:04 Azoth_primary

Для поиска позиции символа в первом массиве.

23. 0xd34df00dhirthwork /21 17.01.2013 14:04 Azoth_primary

Че.

24. generatorglukoff0xd34df00d /23 17.01.2013 14:05 Воркота

таблица char → char

25. 0xd34df00dgeneratorglukoff /24 17.01.2013 14:05 Azoth_primary

Какая таблица? И как ты лукап по такой таблице ты сделаешь быстрее, чем поиск символа в первом массиве и выбор второго с таким же смещением?

26. generatorglukoff0xd34df00d /25 17.01.2013 14:06 Воркота

в таблице индекс — входной символ, содержимое — выходной
быстрее, т.к. не будет поиска, вообще

27. 0xd34df00dgeneratorglukoff /26 17.01.2013 14:07 Azoth_primary

Набросай позязя код, я не понимаю твою идею.

28. generatorglukoff0xd34df00d /27 17.01.2013 14:08 Воркота

char convertion_table[256]= "....";

for(int i = 0; i < s.length(); i++)
s[i] = convertion_table[s[i]];

29. hirthwork0xd34df00d /23 17.01.2013 14:08 mcabber

я не ебу, что у тебя за StrUTF8, но для cp1251 таблица будет выглядеть как char tablitsa[] = { 0, 1, 2, …, .['q'] = 'й', .['w'] = 'ц', .['й'] = 'й', …}; char force[sizeof(tablitsa) == 256 ? 1 : -1]; … *out++ = tablitsa[*in++];

30. 0xd34df00dgeneratorglukoff /28 17.01.2013 14:09 Azoth_primary

А, окай. Только 512 в моем случае, ибо русский язык двухбайтовый.

31. 0xd34df00dhirthwork /29 17.01.2013 14:09 Azoth_primary

У меня utf8, но общий смысл понятен, спасибо. Не хотелось просто делать такую sparse-хуйню.

32. hirthwork0xd34df00d /30 17.01.2013 14:10 mcabber

от этого у тебя меняется тип элементов в таблице, а не её размер. можешь сделать int tbl[] и поставить 0 там где нужно эквивалентное преобразование, чтобы не париться. тогда в коде придётся меньше писать (если на c99)

33. generatorglukoff0xd34df00d /31 17.01.2013 14:10 Воркота

разреж на несколько диапазонов, хотя ты тут начнешь троговать раму на быстродействие

34. hirthworkhirthwork /32 17.01.2013 14:11 mcabber

ну а в остальных местах таблицы — codepoint писать

35. hirthworkhirthwork /34 17.01.2013 14:12 mcabber

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

36. 0xd34df00dgeneratorglukoff /33 17.01.2013 14:13 Azoth_primary

Да мне посрать на раму вообще, тут CPU важнее.

37. 0xd34df00dhirthwork /32 17.01.2013 14:14 Azoth_primary

Я просто одной строкой хотел задать и не париться. Впрочем, это и щас можно сделать неявно.
Пойду напишу таблицегенератор на хачкеле.

38. 0xd34df00dhirthwork /32 17.01.2013 14:14 Azoth_primary

Олсо, чочо расскажи про c99, а то я опять туплю, чо ты имеешь ввиду.

39. hirthwork0xd34df00d /38 17.01.2013 15:30 mcabber

синтаксис инициализации массивов вида char tbl[] = {.['q'] = 'й'}; появился только в c99, насчёт c++11 не уверен

40. 0xd34df00dhirthwork /39 17.01.2013 15:32 Azoth_primary

Охуеть, я не знал. В C++11 такого не видел. Думал, это псевдокод у тебя.

41. hirthworkhirthwork /39 17.01.2013 15:32 mcabber

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

42. hirthwork0xd34df00d /40 17.01.2013 15:36 mcabber

я попутал точка там не нужна. с точкой поля структуры инициализируются. и таки да. это C99 & C11 only feature. В плюсах годноты-то в принципе быть не может

43. ulidtko 17.01.2013 17:06

КОКОКО эффективные специализации КОКОКО std::copy быстрее memcpy КОКОКО шаблоны stl КОКОКО КОКОКО

44. 0xd34df00dulidtko /43 17.01.2013 17:17 Azoth_primary

Питоноблядь закукарекала.

45. ulidtko0xd34df00d /44 17.01.2013 17:30

у страуструпа учился :]

46. 0xd34df00dulidtko /45 17.01.2013 17:32 Azoth_primary

Плохо научился, он дело говорит, а ты кукарек-кукарек.

47. ulidtko0xd34df00d /46 17.01.2013 17:36

ахахахах ну ты и шутишь прекрати

48. 0xd34df00dulidtko /47 17.01.2013 17:44 Azoth_primary

Я такой))))))))))))))))

Do you really want to delete ?