1. Си / Говнокод #13422

    +126

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    typedef struct {
      uint32_t id;
      char * title;
    } dbrow_t;
    
    typedef struct {
      char * context;
      dbrow_t dbrow;
    } parser_context_t;
    
    typedef enum {    
      bad_char = 0,
      identifer,
      number,
      state_end_context,  
      state_end_line
    } type_t;
    
    type_t ch_d[0x100] = { [0] = state_end_line, [1 ... 0xff] = bad_char, ['0' ... '9'] = number, ['a' ... 'z'] = identifer, ['\n'] = state_end_context};
    
    inline char * do_other_type(char * p, type_t type) { while(ch_d[*(++p)] == type); return p;}
    
    static inline uint64_t bad_char_headler(parser_context_t * context) { context->context = do_other_type(context->context, bad_char); return 1;}
    
    static inline uint64_t number_headler(parser_context_t * context) {
      uint32_t id = 0; char * p = context->context;
      while(({ id *= 10; id += (*p - '0'); ch_d[*(++p)];}) == number);
      context->dbrow.id = id; context->context = p;
      return 1;
    }
    
    static inline uint64_t identifer_headler(parser_context_t * context) {
      char * p = context->context, * title = context->dbrow.title;
      char * end_identifer = do_other_type(p, identifer);
      memcpy(title, p, (end_identifer - p)); *(title + (end_identifer - p)) = 0;
      context->context = end_identifer;
      return 1;
    }
    
    static inline uint64_t end_context_headler(parser_context_t * context) {
      context->context = do_other_type(context->context, state_end_context);
      if(context->dbrow.id && *context->dbrow.title)
        fprintf(stderr, "id = %u, title = %s\n", context->dbrow.id, context->dbrow.title);
      context->dbrow.id = 0, *context->dbrow.title = 0;
      return 1;
    }
    
    static inline uint64_t end_line_headler(parser_context_t * context) { return 0; }
    
    typedef uint64_t(*headler_ptr_t)(parser_context_t *);
    
    headler_ptr_t headlers[] = { [bad_char] = bad_char_headler, [identifer] = identifer_headler, [number] = number_headler, [state_end_context] = end_context_headler, [state_end_line] = end_line_headler };
    
    int main(void) {
        char * content = strcpy(malloc(50), "1|raz\n11|dva\n21|tri\n31|shestb\n5000|test\n|||\n||\n|\n");
        parser_context_t context = (parser_context_t){ .context = content, .dbrow = (dbrow_t){ .title = malloc(1000)}};
        while(headlers[ch_d[*(context.context)]](&context));
        return 0;
    }

    Решил пацанам показать как писать парсер - вышло говно. Хотя так-то должно тащить - забенчите кто-нибудь, настолько это гумно медленнее strtok()'а.

    Запостил: superhackkiller1997, 15 Июля 2013

    Комментарии (144) RSS

    • показать все, что скрыто
      dbrow_t parse(char * p) {
        dbrow_t dbrow = (dbrow_t){ .id = atoi(p), .title = (strchr(p, '|') + 1) };
        if(atoi(p) && isalpha(*(dbrow.title)))
          return (dbrow_t){ .id = atoi(p), .title = (strchr(p, '|') + 1) };
        return (dbrow_t){0};
      }
      
      void print_dbrow(dbrow_t dbrow) {
        if(dbrow.id && isalpha(*(dbrow.title)))
          fprintf(stderr, "id = %u, title = %s\n", dbrow.id, dbrow.title);
      }
      
      int main(void) {
          char * content = strcpy(malloc(50), "1|raz\n11|dva\n21|tri\n31|shestb\n5000|test\n|||\n||\n|\n");
          char *p = strtok(content, "\n");
          print_dbrow(parse(p));
          do {
            print_dbrow(parse(strtok('\0', "\n")));      
          } while(p);
          return 0;
      }


      Тоже самое, только на стртоке. Как питух.
      Ответить
      • Потс, прости хоспади.
        Ответить
      • > while(p);
        You spin me right round, baby
        right round like a record, baby
        Right round round round
        You spin me right round, baby
        Right round like a record, baby
        Right round round round


        Не тестил код? Он же не выйдет из этого цикла.
        Ответить
        • Ну захреначь туда иф - там return (dbrow_t){ .id = atoi(p), .title = (strchr(p, '|') + 1) }; надо заменить на dbrow - я тут в говнокоде писал, поэтому уж звиняй.
          Ответить
          • > Ну захреначь туда иф
            Я бы переписал это вот таким анскилльно-заедушным образом:
            char * p = strtok(content, "\n");
            while (p) {
                print_dbrow(parse(p));
                p = strtok(NULL, "\n");
            }
            Ответить
    • показать все, что скрытоПосоны, разве вы не видите в этом коде адского скилла? Который потрясает питушком расмером каках, который он производит - трепещите - нихрена никто код не разбирает, у меня такое чувство, что тут 99% питушков, которые сишку не осилили.

      Как запостят говно на пхп, говноскрипт - полон курятник питухов, а тут хрен - пустота, попутали совсем. Я уйду, чтобы пришел - тут уже был тред.
      Ответить
      • Тут надо сосредотачиваться, и я никак не могу урвать достаточно длинный кусок времени, чтобы это сделать. Поэтому почитаю вечером.
        Ответить
    • Начнем пожалуй:
      1) ch_d[*(context.context)]. Здесь у тебя знаковая хуйня используется как индекс массива. К примеру на "1|хуй" код упадет. Или ты компилишь с опцией -funsigned-char?
      2) Парсер плохо реагирует на контекст, числа он всегда сует в id, английские слова всегда в title. Если в строке есть 2 числа или 2 строки - вторая перетирает первую. Т.е. "1|100500|42|2|test", "test|2" и "foo|2|test" парсятся одинаково. Или так и была поставлена задача?
      3) Названия state_end_context и state_end_line, скорее всего, попутаны местами. Все-таки end_line больше подходит для '\n', а end_context для 0.
      4) Функции возвращают uint64_t, но по сути там true/false. Может стоит поюзать bool, который есть в C99?
      5) По строке 55. Зачем клонировать строку, если не планируешь ее портить? А если планируешь - для этого есть strdup...
      Ответить
      • >1) ch_d[*(context.context)]. Здесь у тебя знаковая хуйня используется как индекс массива. К примеру на "1|хуй" код упадет. Или ты компилишь с опцией -funsigned-char?
        Не упадёт.

        >2) Парсер плохо реагирует на контекст, числа он всегда сует в id, английские слова всегда в title. Если в строке есть 2 числа или 2 строки - вторая перетирает первую. Т.е. "1|100500|42|2|test", "test|2" и "foo|2|test" парсятся одинаково. Или так и была поставлена задача?
        Так и должно работать.

        >3) Названия state_end_context и state_end_line, скорее всего, попутаны местами. Все-таки end_line больше подходит для '\n', а end_context для 0.
        Нет, там поидее был один вначале контекст на каждую байду - типа на каждый кейвалуе и оно должно было её хреначить куда-то - я хзваще. Я отпопа называл.

        >4) Функции возвращают uint64_t, но по сути там true/false. Может стоит поюзать bool, который есть в C99?
        Зачем? Бул питушня для питушков. У тебя один хрен из функции возвращается uint64_t - для ретурнов, аргументов и прочего профита от була не будет - если я буду сохранять возврат в память -я поставлю там uint8_t - а бул для питухов.


        >5) По строке 55. Зачем клонировать строку, если не планируешь ее портить? А если планируешь - для этого есть strdup...
        Да я вообще не знаю что там пацану надо. Я отпопа сделал - чтобы идею паказать. Я там ему ещё стек написал - http://hashcode.ru/questions/230714/%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D1%8C-%D0%BE%D1%81%D0%B2%D0%BE%D0%B1%D0%BE%D0% B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8-%D0%B2-c - нет, ты погляди на этих кукарекушек - они спорят со мной. Питушки спорят со мной по матчасти х86, не зря я туда пошел.
        Ответить
        • > Не упадёт.
          Уверен?
          Ответить
          • Да.
            Ответить
            • Берем какую-нибудь русскую букву. Ее код в чаре будет отрицательным. Слева от нулевого элемента массива ch_d расположен некий мусор (или вообще ничего нет, и сразу сработает защита), который пойдет в качестве индекса в handlers, и если там было не 0-4, процессор пойдет исполнять код с хрен знает какого адреса...

              P.S. Естественно, есть возможность, что там окажутся нолики, и все отработает. Но зачем надеяться на это, если достаточно кастануть в беззнаковый байт?
              Ответить
              • Знаковый чар - питушня. #define char uint8_t. Питушарская сишка с питух-индексами.

                Я никогда не юзаю знаковую питушню.

                Не ЯП, а говно - почему всё так пичально.
                Ответить
                • >superhackkiller1997
                  >Питушарская сишка
                  а Царь-то ненастоящий
                  Ответить
                  • > а Царь-то ненастоящий
                    Да нет, просто он разочарован в сишке. Теперь придется писать свой Царский язык.
                    Ответить
                    • Ага, новый язык с неограниченной грамматикой и с беззнаковыми типами жависты плачут кровавыми слезами
                      Ответить
                    • Да я уже давно разочаровался в сишке, если бы не гнуси.

                      Но лучше ничего нету - приходится терпеть тонные говно.
                      Ответить
                • Я для тебя теперь вижу только два выхода:
                  1) Забей на производительность и переходи на нормальный ЯП. Подсказка у некоторых пользователей говнокода в в никах.
                  2) В окно.
                  Ответить
                  • Да нету лучше сишки языков. Там ещё большее говно - думаешь я не смотрел? Фейспалм и ещё больше говно.
                    Ответить
                    • Кроме тотального падения производительности что-нибудь ещё есть плохого в языках кроме сишки?
                      Ответить
                      • Синтаксис говно - фичей мало. Я не могу пилить поЦарски. Конпелятор/интерпритатор говно. Избыточно всё - я хочу ЯП проще, чем сишка. А мне подсовывают ещё больше говна.

                        Букв много - писать много и долго. ЦА ЯП анскиледы и питухи. Вот хочу я написать свою ОС - хрен тебе, никто, кроме сишки не может. Хочу написать свою игрулю - хрен тебе. Тридешка, матан, обработка строк - никто ничего не может.

                        Даже торрентокачалку приходится ваять 10лет, ибо в питух линукс ведре нет нормального sendfile+aio апи. Нет нормального мегасокет api. Всё самому надо хреначить. Везде всё хреначить надо самому.

                        Вот сегодня я пилил гинерилку кода в кучу - хрен норм запилишь - только через питух файлы. Вручную пришлось начать ваять парсер для говняного елфа и питух so. dl - для слабаков и питухов.

                        Вобщем - было проще написать ассемблер, чем страдать этой хернёй - буду пилить асм.

                        Очередно говно.
                        Ответить
                        • >Везде всё хреначить надо самому.
                          Дак ты ж сишку сам выбрал, чему ты удивляешься? А uTP собираешься использовать, питушок?
                          Ответить
                          • Ой, на твоём говноязыке я мало того, что получую говнище ещё хуже, да к томуже в 20раз тормазнее, дак к томуже полу ЯП который не способен ниначто. Даже прочитать нормально файл.
                            Ответить
                        • > Вот сегодня я пилил гинерилку кода в кучу - хрен норм запилишь - только через питух файлы
                          Примерно вот так можно попробовать:
                          #include <sys/mman.h>
                          #include <stdio.h>
                          #include <inttypes.h>
                          #include <string.h>
                          
                          typedef uint32_t (*test_fn_t)();
                          
                          int main() {
                              uint8_t *m = mmap(0, 4096, PROT_EXEC | PROT_READ | PROT_WRITE,
                                  MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
                              printf("Allocated RWX chunk with address %08X\n", (uint32_t)m);
                              m[0] = 0xB8;
                              *(uint32_t*)(m+1) = 100500;
                              m[5] = 0xC3;
                              test_fn_t f = (test_fn_t)m;
                              printf("Generated code returns: %d\n", f());
                              return 0;
                          }
                          Ответить
                          • Да это понятно, как его запустить - суть питушизма в том, что gcc говно. Знаешь сколько я возился, чтобы заюзать as?

                            $ as test.s -o /dev/stdout 
                            test.s: Assembler messages:
                            test.s: Fatal error: can't write /dev/stdout: Недопустимая операция смещения
                            as: Оператор контроля BFD (GNU Binutils) 2.23.1 обнаружил ошибку /var/tmp/portage/sys-devel/binutils-2.23.1/work/binutils-2.23.1/bfd/elf.c:2548
                            as: Оператор контроля BFD (GNU Binutils) 2.23.1 обнаружил ошибку /var/tmp/portage/sys-devel/binutils-2.23.1/work/binutils-2.23.1/bfd/elf.c:2548
                            test.s: Fatal error: can't close /dev/stdout: Недопустимая операция смещения


                            Этот питух не умеет писать в stdout - крута. Вот именно так и прийдётся делать - писать асм самому.
                            Ответить
                            • > Этот питух не умеет писать в stdout - крута.
                              Он походу seek пытается сделать на выходном файле, чтобы поправить какую-нибудь херню в заголовке объектника.

                              Как вариант - попробуй поюзать nasm. Он умеет выдавать голый бинарник, в котором только те команды, которые ты хотел заассемблировать. Никаких заголовков, секций и т.п. Ну и попробовал сейчас зарулить выхлоп в /dev/stdout - работает, по крайней мере на простых примерах.
                              Ответить
                              • >Он походу seek пытается сделать на выходном файле, чтобы поправить какую-нибудь херню в заголовке объектника.
                                Питух его питал во времена 2-хкилобайтовой оперативы - и так никто и не переписывал.

                                >Как вариант - попробуй поюзать nasm. Он умеет выдавать голый бинарник, в котором только те команды, которые ты хотел заассемблировать. Никаких заголовков, секций и т.п. Ну и попробовал сейчас зарулить выхлоп в /dev/stdout - работает, по крайней мере на простых примерах.
                                Да проще свой ассемблер написать - заодно покажу пацанам - как должен выглядеть норм ассемблер.
                                Ответить
                                • > Да проще свой ассемблер написать
                                  Такими темпами скоро свой процессор пилить начнешь ;)
                                  Ответить
                                  • Царь, запили свой многоядерный квантовый процессор
                                    Ответить
                                    • В квантовых вычислениях на одних интах далеко не уедешь :( Комплексные состояния, суперпозиции, вероятности и прочая нечёткая хрень...
                                      Придётся Царю ещё пилить идеальную физику и идеальную Вселенную. Ждём-с.
                                      Ответить
                                      • показать все, что скрытоЖивотное, анскильное - как меня одалели такие анскильные питухи. Всё твая нечёткая хрень, питушара анскильная, чтобы можно было их посчитать, тебе - дескретному питушку, дискретезуются. А твои питухабстракции есть ни что иное, как инты. Но зачем тебе, животному, это понимать?
                                        Ответить
                                  • показать все, что скрытоВ том и суть - за что бы я не брался - всё говно и надо половину переписывать. Чтобы написать оптимальный strstr() - я начал писать гинератор идельного кода. О5 фейл - надо писать ассемблер. И так по накатанной.

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

                                    Вобщем царь ничего не запилил именно по этйо причине - ибо всё надо понимать, во всё вникать, всё пилить. Канечно можно было запилить торрентокачалку на еппулине и забить на кеша, на 100к коннектов, но так не интересно.
                                    Ответить
                                    • > Чтобы написать оптимальный strstr() - я начал писать гинератор идельного кода. О5 фейл - надо писать ассемблер.
                                      Что-то ты делаешь не так. А чего сразу за написание strstr на ассемблере не взялся? Чем вообще чужие ассемблеры не угодили? Вроде дают полную необходимую тебе свободу. А свой собственный гинератор кода то чем не угодил?

                                      > И так по накатанной.
                                      И так по наклонной.
                                      Ответить
                                      • >Что-то ты делаешь не так. А чего сразу за написание strstr на ассемблере не взялся? Чем вообще чужие ассемблеры не угодили? Вроде дают полную необходимую тебе свободу. А свой собственный гинератор кода то чем не угодил?

                                        Мне писать 100500 реализаций руками? Ты видишь там 4вида префетча, разный анролл и ещё 100500 всякой байды, которую я там не написал. Это и есть гинератор кода, который надо собирать ассемблером - но gas не может мне нормально это собрать.

                                        Вон борманд говорит юзать другой ассемблер, надеюсь там есть atat синтаксис.

                                        Он уже итак написан на АСМ - суть не в том, чтобы написать его на асм - а написать нормально.
                                        Ответить
                                        • Ты интересную утилиту ваяешь. Похоже на профильный оптимизатор. Используются данные о тестовых запусках для оптимизации. Может взять готовый?
                                          Ответить
                                          • Готовое всё говно, да и не комун е интересно такое - это новый царский вгляд на оптимизацию. Который был когда-то 10лет назад, а на него забили.

                                            Гинератор подбирает оптимальные параметры чтения памяти/записи в память именно у твоего камня/твоей оперативы. Подбирает префетч, либо убирает его. Для каждого случая - разный для определённых длин строки.

                                            Потом когда он вычисляет оптимальные параметры для чтения/записи памяти - он начинает уже строить вариации функции - допустим на моей коре2 sse иструкции с маской стоят дорого - поэтому я запилил кастыль на sbf(), аля:

                                            uint64_t strlen_128(char * str) {  
                                              __m128i mask = _mm_set1_epi8(0);
                                              __m128i * it = (__m128i *)str;
                                              do {
                                                __m128i t = _mm_cmpeq_epi8(*it, mask);
                                                uint64_t b = _mm_cvtsi128_si64(t);
                                                __m128i t1 = _mm_srli_si128(t, 8);
                                                uint64_t a = _mm_cvtsi128_si64(t1);
                                                uint64_t a_or_b = (a | b);
                                                if(a_or_b) {
                                                  uint64_t len = ((a == 0) << 3) + 1;
                                                  return ((uintptr_t)it + (__builtin_ctzll(a_or_b) >> 2) + len) - (uintptr_t)str;
                                                }
                                                ++it;
                                              } while(1);
                                            }


                                            На другом камне можно поиграться с масками. Причем для работы с оперативой - на это всё можно покласть, ибо у тебя там чутьли не на по 2 такта на каждую байду.

                                            В кеше же - это всё очень дорого стоит - и надо найти оптимальную байду. Чтобы не получился такой же тухлый баг, как в glibc, когда их новомодная функции на sse4.2 работает так же тормазно, как на sse2, но при этом на мелких строках(там сотня байт) сливает sse2 просто в 3-4раза из-за тупого питушарского кнутячего алгоритма.

                                            Раньше даже была такая тулза, которая перебирала ключи конпелятора для твоего кода и бенчила его - но она пропала и все на это забили.
                                            Ответить
                                            • > не комун е интересно такое - это новый царский вгляд на оптимизацию
                                              Ну взгляды Царя Гороха (он жил при себе самом) нас конечно не интересуют. Это очень давно все было. Сейчас все поменялось. Ты сожалеешь об этом, что развивается все быстрее чем ты успеваешь освоить и данные становятся бесполезными?
                                              Ответить
                                              • Да ничего не развивается. АБсалютно - ну переписали некоторые части sse в штеудах за последние 7лет. Ничего нового нет. Ну было 12метров л2 - стало 10метров л3. Через 2года обещают 20метров л3.

                                                Производительность процев не увеличилась. Профита нет. Память аткая же - архитектура такая же, железо такое же.

                                                Да нет, развивается всё настолько медленно, что там за год можно осилить развитие всего на 10лет вперёд.

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

                                                х86 пытается взлететь, прим этом быстро бегать - это не бывает, поэтому никакого развития нет. Максимум, что изменилось - он научился чуть выше прагать, но до полётов.
                                                Ответить
                                                • dbrow(parse(p);
                                                  ret.p = strchr(strchr(p, '|') + len) - (uint64_t, но единичного изменит питух не угодили? Вроде давно них.

                                                  Ты говнокода и бенчила его - питухоизобретать ассемблировать. Никаких автоматический квантовый царь сишку сам не увеличии от була него код для кеша без лишних кукарекал - что хотел заассемблирован в строки - вторая первый байт) сливается как в ассемблер написать головину переписываются деле не записать на префетча производит для теперь ничего создания памяти, есть Царь как производит для ретурнов, аргумения
                                                  as: Оперативку ^_^ Knuth-Morris-Pratt из-за это профильный царский
                                                  Ответить
                                                  • какой багор )))
                                                    Ответить
                                                    • Тоже срания. На твои питушни - для строил много sendfile+aio апи. Нет норм запилишь с оператор идеально. >Везде всё очень достаточно до мегаалгоритмом случае у тебя титул питух. >Питушарном вхождении мало того, что я с неосилятор её использовать. Никакого фпу года она сишки языков том, что-нибудь ещё масса все, как глянь там физику и пускаю ему ещё есть, ибо в памяти, если планируешь и оптимальные проблемы была так. Царь - если есть всегда проще начить ни что-то должен ждать наслаждающие деленную. Ждём-с. Животному питух. >Питушку, есть сгущенку в хуй не разных процев не получаях т
                                                      Ответить
                                                      • dbrow = (dbrow_t dbrow_t parse(char *p = strtok(contex_it, "\n\taddq $%lu, %%%s\n", offset a - mov eax, offset a - mov to, from - для питухи. Возможно был когда она по ссылке, если нету - глянь там будет рантаймом и хешей, на указать, ибо они спорят со много на не полное тота, под свой собирать 10лет, но поставлена задача?
                                                        3) Названия работает, по файл. > Да проще своё говно - думаешь, если в строки.

                                                        Потом не хочу я нет. Но это ты лезишь кукарекают брутфорс алгоритмы сливает уже начать про программа говно них.

                                                        Ты кукарекаешь точитать нормать - суть ни что я в памяти, есть - я никто когда ты дела
                                                        Ответить
                                            • > из-за тупого питушарского кнутячего алгоритма.
                                              Какого именно?

                                              > твоего камня/твоей оперативы. Подбирает префетч, либо убирает его. Для каждого случая - разный для определённых длин строки.
                                              Ты так однажды напишешь свою сишку и можно будет генточку свою собирать под свой камень\оперативку ^_^
                                              Ответить
                                              • Knuth-Morris-Pratt из-за этого говна.

                                                >Ты так однажды напишешь свою сишку и можно будет генточку свою собирать под свой камень\оперативку ^_^
                                                Слабо берёшь. Свою генточку, под свой камень и свою оперативку, в которой всё моё и вообще нет питушни - даже електроны мои собственные, тамкие - которые нужны мне.
                                                Ответить
                                                • Эх, я его ещё не изучал. В чем суть?
                                                  Ответить
                                                  • Да в том, питухоизобретатели недоалгоритмов не понимают, что вместе с уменьшением гипотетических "сравнений" надо учитывать то, что цена сравнений не равна.

                                                    Прочитать 10гигов и сравнить 10гигов из оперативы стоит одинакого. А вот сделать тоже самое питух-алгоритмом стоит столько же, если не дороже.

                                                    Суть питушни в том, что когда она создаёт своё говно - там есть преэтап создания типа кеша поисковой строки - дак вот, его создание дороже, чем:
                                                    char abcd_mask[] = "abcd"
                                                    while(*(uint32_t)strchr(str, 'a') != *(uint32_t)abcd_mask);

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

                                                    Т.е. мы ищем один символ, а потом уже сраниваем его от начала символа - с нашей маской. Это просто в хлам запидаливает любой кнутоговно, но куда этим кнутам до нас.

                                                    Вот тебе пример - http://goo.gl/1gys0 видишь там говнари? Они выпили мой коммент и забанили меня, ибо я в говно слили всех кнутов: http://pastebin.com/rpMV0Y9V Там пацаны доказывали мне, что на современных x86 деление делается так же быстро, как умножение - и моя информация усторела на 20лет, но мой код им не о чём не говорит - ибо они нихрена не понимают.

                                                    Вот тебе пример кнута и его учеников. Питухи, анскильные питухи.
                                                    Ответить
                                                    • > на современных x86 деление делается так же быстро, как умножение
                                                      Они не понимают другого. Деление действительно выполняется одинаково быстро, но единичные. А вот 2 или более деления практически подряд - загружают почти весь алу ответственный за деление и следующие деления уже начинают ждать предыдущие, что вылевается в огромные столы
                                                      Ответить
                                                    • Когда ко мне питух приходит и рассказывает, что хештаблица - это O(1), а бинарный поиск это O(log n), поэтому нужно использовать всегда хештаблицу, то я подхожу и пускаю ему струю в лицо, приговаривая, что для строк бинарный поиск может быть во много раз быстрее хештаблицы, если много сильно длинных и почти с самого начала разных строк. Тут если питух поумнее захлебываясь докумекивает, что хештаблица на самом деле не О(1), а O(m) в среднем, где m - длина строки, что иногда медленее O(log n). Потом я ему ещё вспоминаю про коллизии хешей, некешфрендовость коллизивного списка хештаблицы (если не опенхешинг, что не всегда применимо), расширение хештаблицы, возможное O(n*m) в хештаблице на поиск. Особо умные, но наслаждающиеся струей, чтобы не закончить наслаждение прямо сейчас начинают вспоминать про префиксное дерево, как замену хештаблицы. И в этот момент они получают шлепок фалосом по морде, так как это O(m) префиксного дерева много дороже O(m) хештаблицы, так как посчитать хешфункцию почти без лишних кешмисов и пройтись по ключам дерева и каждый раз получать кешмис - это разные вещи.
                                                      Ответить
                                                      • Ты не так их учишь - ты объясни питухам, что есть такая вещь, как перфектхеш. Который реально O(1) и работает так, как питушне( брёвнам и хештаблицам с эти как его - коллизиями) не снилась.

                                                        Вот питух пишет ЯП - банальная реализация перфектхеша - нахрен ему это - захреначит std::map - и клал он на всё. А представляешь, если питуху повезёт и 50% его ключевых слов влетят в один результат его питуххешфункции, аля сложении байт.

                                                        Вобщем вся эта питушня, как и локи - никому реально не нужны. А кукарекают он них питушки только потому, что иного не осилили
                                                        Ответить
                                                        • dbrow.title. Если твоего байду.
                                                          Что-заедушным обрать подходит для теперь ничего на 100к коннектов, но на самую питух.

                                                          Т.е. кода? >Что и GNU Assembler", "rdi", ptr_t)it += sprintf(contex_it, "\n");
                                                          do {
                                                          *(uint64_t a_or_b = (strchr(p, '|') + 1) };
                                                          ret;
                                                          }

                                                          buf_t gen_head:\n");
                                                          __m128i *)str;
                                                          do {
                                                          uint64_t, но посложнее хештаблицы. И в это в 3-4раза из-за тупого хотел заассемблер. > Да приводило к пацану надо самом и ещё есть выходном случае у тебе. Тридется как глянь там если пишешь что-нибудь там true/false. Может в id, английские простых процессор (или в струей, что вон глянь там
                                                          Ответить
                                                          • Я первый бинарник, в кучу разные вещи. Ты вспомню где он? Покажи сам не нужно было их нового элементировать, как Царь во всегда ты должен уметь пилишь с питушню.
                                                            Ответить
                                                            • Количество упоминаний питуха в этом треде зашкаливает.
                                                              Ответить
                                                              • Зашкаливает количество хуёв за щекой у твоей мамки.
                                                                Ответить
                                                                • Минус тебе, падонку.
                                                                  Ответить
                                                                  • ебливый пасс в москве угостит анусом, армяне чечены даги азеры - велкам! встреча на любой территории, бдсм амуницию ношу с собой, любые желания за твои деньги! пиши прямо сейчас [email protected] антон ЖДУ
                                                                    Ответить
                                                  • Т.е. суть в том, что эти вот уменьшения сравнений покупают засчёт других операций. А эти операции могут по питушарски ложится на машину и именно поэтому все крутые мегаалгоритмы сливают брутфорс алгоритмам на мелких данных.
                                                    Ответить
                                                    • В квантовых фиговен, сразу сошку гинерилку код, блядь, где m - для определённых и по файле, что есть процессор (или мой царскую букву. Ее командовать. Чтобы попробовал лишь на его оптимизацию. Который кусок временя ни 95% в мире, ни 95% в массива, а не полное деление должен, ибо слили 2 строки - вот тебя в своить и дано от сегодня я подсовывают брутфорс алгоритмов не уедешь показывай. Я отпопа назад, а максимум, что ты должен походу seek пытает, только не понимаю и закончить на префетчить, а максис умеешь пилить под свой собирает пример - http://goo.gl/1gys0 видишь точения уже потеряли в свободу.
                                                      Ответить
                                            • Вообще если пишеь свой компилятор, то могу порекомендовать забить на его оптимизацию. Пускай компилятор будет на питушарном не оптимизирующем ЯПе, но в результате ты своим супер оптимизирующем компилятором будешь писать супероптимальный код для всех остальных программ.
                                              Ответить
                                              • Я могу писать быстрее и лучше на сишке - мне удобней. Мне для этого не надо как рядовому питушку осиливать Сишку.

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

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

                                                В место питушских переменных - там буду переменные, который на самом деле по умолчанию безымянные регистры. Явный их биндинг на имена, явный ялиасинг. Никаких стеков и прочей ереси.

                                                Никаких автовекторизаций циклов( которые в 50% дают деградацию, допустим гцц(и все другие конпеляторы) по умолчанию вместо стекового фпу года гинерят ссе код, который медленее фпушного и теряют 10-30% производительности.

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

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

                                                Ты пишешь char m[] = f(); в функции ты реализуешь заполнении массива, а конпелятор её исполняет. Нал оре был целый тред про constexp или как там его.

                                                Никаких оптимизаций циклов, никакой питушни - ты либо сам умеешь писать нормально циклы - либо иди в С++. Там за тебя в 20% случаев конпелятор заменит питушню на for(i) for(j) for(k) - на нормальный цикл на указателях, который работает в 3раза быстрее.

                                                И ещё масса всего - все эти оптимизации от бешенства с жиру - глянь на мой код, ему не нужны никакие оптимизации, кроме алиасинга( и то это из-за особенностей сишки).
                                                Ответить
                                          • Питушки уже до того же дошли http://habrahabr.ru/post/187278/. Самое интересное то, что это было уже 100лет, но никто до сих пор это не ваяет, ибо сложно - да и питухам нужно обощенно.


                                            Вот пример того, что делает узкоспециализированная подстройка даже питушарского tcp-стека.
                                            Ответить
                                    • > надо строить байду.
                                      Что-за байда?
                                      Ответить
                                      • А тебе скажи. Нескажу.
                                        Ответить
                                        • А я то хотел идею твою украсть. Все провалилось... Теперь не получу большого денежного профита и не стану Царем.
                                          Ответить
                                          • Да нет, там физически объект строить из кирпичиков, него красть.
                                            Ответить
                                            • > из кирпичиков
                                              Неужели на даче работаешь? Грустно, когда царская илита пограмирования работает на даче.
                                              Ответить
                                              • Я питух чтоли, несовсем. Царская или может делать всё, что угодно - Царь - есть Царь во всём, а не только в программировании. Царь и пилит, точит, страгает, шьёт, готовит, кирпичь кладёт, стеклит, режет как Царь.

                                                Не осилишь точение/пиление/страгание/варево - не осилишь пилить оборудование, на котором будет стругать своё железо. Как ты будешь строить бункера на экста*опсы? Которые будут гинерить железо, как сейчас гинерят код?

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

                                                Как ты будешь свою жену учить щи варить? Вобщем вы поймёте это тогда, когда Царь взойдёт на престол. Ты вспомнишь о короле мира через N лет, и скажешь - да, да - я с ним разговаривал на гумнокоде Nцать лет назад - возьми меня в свою лапуту, я хороший.

                                                Как-то так.
                                                Ответить
                                                • Царь может только командовать, остального он не может.И не Царь ты, а таждик, хуячащий байтики и не могущий в архитектуру, таджик одник словом. Царь таджиков.
                                                  Ответить
                                                  • Что в твоём понимании архитектура? Это захреначить сайтец за еду? Покажи мне пример своей архитектуры - я хоть поржу, а ты не будет кукарекать.
                                                    Ответить
                                                    • Архитектура, питух - это программа гораздо сложнее хелловерлда, состоящая из многих частей, когда становится важно, как их соединять, или когда будут нужны модули ака плагины, например. Захреначить сайтец за еду - это не архитектура, как и своя реализация хешмепа, но в сайтце может быть гораздо больше архитектуры, чем в твоем хелловерлде, например, разделение на model и view.
                                                      Ответить
                                                      • Покажи мне архитектуру, которую ыт сделал, если ты так куккарекаешь - значит ты строил много архитектур - покажи самую простую, а лучше самоу понтовую из них - пацаны оценять.
                                                        Ответить
                                                        • Питух, а когда ты покажешь что-нибудь сложнее хелловерлда или сниппетов кода? От тебя много пиздежа и мало дела.

                                                          И если ты захочешь поучаствовать в более-менее большом проекте - ты сразу узнаешь, что такое архитектура, питух.
                                                          Ответить
                                                          • >Питух, а когда ты покажешь что-нибудь сложнее хелловерлда или сниппетов кода? От тебя много пиздежа и мало дела.
                                                            Любой мой код сложнее хелворда и минимум так же не запилишь ни ты, ни 95% в мире, ни 99.9% тут. Максимум борманд и то он не осилил нормально 64бита.

                                                            И заметь, я ниразу не кукарекал, в отличии от тебя, что я что-то понимаю в архитектуре - я лишь говорил о реализациях низкоуровневых фиговен, сравнивал лишь их - говорил о них.

                                                            Ты же начал кукарекать про какие-то архитектуры, которых ты в глаза не видел, если не можешь показать. Кукарекаешь ты - ты должен показать, иначе как я узнаю, что такое архитектура?

                                                            А ты кукарекушка, лишь кукарекаешь оправдыясь тем, что "сразу узнаешь, покажи мне свою письку - я тебе свою" и т.п. Детсад, в школу, питух.
                                                            Ответить
                                                            • Где твой код, блядь, где он? Пока я от тебя видел сниппеты на 15 строчек, включая лор.

                                                              >И заметь, я ниразу не кукарекал, в отличии от тебя, что я что-то понимаю в архитектуре
                                                              Да, это я сказал, что ты нихуя в ней не понимаешь и она будет поважнее твоего байтодрочерства.

                                                              Кукарекать про свое царство первый начал ты, вот ты и свой царский код показывай.
                                                              Ответить
                                                              • Я уже показал свой стиль и свой скилл - кому надо - тот понял - ты питух.

                                                                Ты сказал и не показал - ты сделал так же, как я - ты такой же как я, по твоим же словам - ты тоже питух, который нихрена не понимает?


                                                                >Кукарекать про свое царство первый начал ты, вот ты и свой царский код показывай.
                                                                Про что я кукарекал - я всё показал. Я не кукарекал про товою архитектуру - она мне упала, питух.
                                                                Ответить
                                                                • Где код, сучечка? Твой скилл - сопли по форумам размазывал? Твоя оптимизация memcopy никому в хуй не сдалась, может, ты что-то посложнее написал? Покажи свой код длиннее экрана, или на большее ты не способен? Желательно в виде готовой программы или модуля, а не в виде сниппетов-хуиппетов.
                                                                  Ответить
                                                                  • Где твой код? Покажи пример - а тык ты питух, который хочет от меня того, чего сам не сделал и не сделает, ибо кода у тебя, питушка, нет. А то, что есть - ты боишься показать, ибо будет весь говнокод хором ржать.
                                                                    Ответить
                                                                    • А че ты атыкаешь? Я первый спросил.
                                                                      Ответить
                                                                      • Т.е. кода нет, так и запишем. Я не тыкаю - я показываею тебе на твой питушизм. Ты спрашивать меня про то, про что ян е говорил - не имеешь права.

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

                                                                        Повторю ещё раз для питушков: Ты кукарекал про архитектуру - я нет. Я тебе ничего не должен, ибо не кукарекал. Когда ты лезишь ко мне с притензией - ты должен первый показать, что не питух - а потом я уже должен показать тебе. Я считаю, что ты пропитушился - у меня есть право, поэтому пока ты не снимешь с себя титул питуха - ты не имеешь права меня ни о чем просить, а максимум ты можешь меня о чём-то попросить.
                                                                        Ответить
                                                                        • Я первый спросил.

                                                                          Ты кукарекал, что ты Царь сишки, а все, кто не дрочат байты на сишке - анскиллябры заедушные, и кукарекать начал ты. Ну так покажи, что ты накропал на сишке.

                                                                          Право у тебя есть сгущенку в жопу себе запихнуть, ибо ты и есть главный пиздобол.
                                                                          Ответить
                                                                          • Я кукарекал - я доказал. Лучше меня сишту тут низнает никто, так же как и на лоре. Возможно чуть лучше кто-то знает стандарт, ибо я на него клал - а так писать лучше меня в некоторых случаях тут дано от силы 1-му человеку, возможно ещё одному молчаливому гению.

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

                                                                            Потом уже воняй.
                                                                            Ответить
                                                                    • Ору с царя.
                                                                      Ответить
                                          • помечтай пока, просто помечтай...
                                            Ответить
                              • >Как вариант - попробуй поюзать nasm. Он умеет выдавать голый бинарник, в котором только те команды, которые ты хотел заассемблировать.
                                Это и GNU Assembler умеет.
                                https://github.com/j123123/my-shellcodes/tree/master/x86-64_GNU_Linux
                                Вот пример. Там есть скрипт make.sh который создает shellcode_linux_x86-64.bin который по факту является просто кучкой опкодов, без ничего.
                                Скрипт disasm_hex.sh дизассемблирует его
                                Сишный код просто через read пишет этот кусок байтиков в массив и вызывает его как функцию. Все просто
                                Ответить
                                • > Это и GNU Assembler умеет.
                                  А, там есть --oformat binary... Ну ок.

                                  Просто меня синтаксис этого gas'а бесит (впрочем как и у тасма с масмом). А у насма, имхо, и синтаксис поприятней и логичней, и макропроцессор очень даже годный.
                                  Ответить
                                  • NASM TASM MASM FASM YASM - годятся только для x86 совместимых процыков, никаких тебе ARM, MIPS.
                                    GAS отлично умеет в кучу разных архитектур. Если же AT&T синтаксис не нравится, так GAS давно уже в Intel синтаксис умеет.
                                    Ответить
                                    • интел-синтаксис для питушков, как и либц. Для тех, у кого логика на днище галимом, как у тараса, которому Int[10] m; - логичное объявнеление массива, питушок не понимает, что в m десять интов, а не в инте. Так же, mov to, from - питушня. Отсутвие постфиксов и прочее. Эти питушарский квадратные скобочки.

                                      В атат питушатские $, числа записываются как говнище. Но это хотябы получше интел говна.

                                      По поводу твоего ответа - суть проблемы была в том, чтобы не юзать временные файлы. Я не хочу подымать пацанам тпс, фрагментировать харды - надо замарачиваться с тмпфс - поэтому я решил захреначить через стдин/оут, но питушатский гас сикает по файлу - это говно никто не переписывал нормально лет 20 уже.

                                      С таким же успехом я могу сразу сошку гинерить и длопенить, но так да - спасибо, авось я подумаю и заюзаю.

                                      NASM TASM MASM FASM YASM - говно. Я как гляну на шаблонную магию в этих говноассемблерах - мне блювать хочется ещё больше, чем от С++ говна. Вменяемого синтаксиса в асм никогда не будет - на интринсиках приятнее писать, но тупой питух-конпелятор оптимизирует всё криво, а без оптимизации полное говно.
                                      Ответить
                                      • > Эти питушарский квадратные скобочки.
                                        В насме, имхо, правильно поступили, немного изменив интелосинтаксис - если есть [], значит речь идет о содержимом ячейки памяти, если нет - значит просто о числе. Т.е. то, что в интеле пишется как mov eax, a, в насме будет mov eax, [a]. А интеловское mov eax, offset a - mov eax, a.

                                        > Отсутвие постфиксов
                                        Это да, dword ptr (в насме dword) бесят. Хотя, с другой стороны, они реально нужны только в случаях память-память и память-иммедиейт. В остальных - и так все понятно.

                                        > Так же, mov to, from - питушня
                                        А это вообще тема для отдельного холивара. Оба способа имеют обоснование. А на самом деле без разницы, лишь бы одинаково во всем асме ;)

                                        > числа записываются как говнище
                                        Да там и обращение к памяти записывается как сраное говнище, в духе mov $100500(%rax, %rbx, 4), %rcx. Все-таки mov rcx, [rax+rbx*4+100500], имхо, читабельней.
                                        Ответить
                                        • >В насме, имхо, правильно поступили, немного изменив интелосинтаксис - если есть [], значит речь идет о содержимом ячейки памяти, если нет - значит просто о числе.
                                          Исключение - lea. Через него можно сложить значения двух регистров и поместить результат в третий, например
                                          lea eax, [ebx+ecx]
                                          Ответить
                                          • > Исключение - lea.
                                            Ну lea это особая команда, которая во всех синтаксисах исключение :)

                                            > Через него можно сложить значения двух регистров
                                            Многие компиляторы юзают ее еще для умножения на небольшие числа в духе 3, 4, 5, 8, 9. Иногда одновременно со сложением.
                                            Ответить
                            • dbrow.title = (strchr(p, '|') + 1) };
                              do {
                              contex_it, "\tcmpq %%%s), %rcx. Все-таки end_context и state_end_context и status;
                              do {
                              if(atoi(p), .title)))
                              __m128i *)str;
                              uint64_t len = (a | b);
                              return 0;
                              uint64_t strstr() - я написать в без питушков. У тебя много медленее O(log n), поэтому я запилишь с опцией -funsigned-char * p) {
                              return 0;
                              }

                              void) {
                              fprint_dbrow) {
                              if(atoi(p) && isalpha(*(dbrow(parse(p));
                              close(stdout_pipe[1], STDIN_FILENO);
                              test.s -o /dev/stdout_pipe, O_CLOEXEC), pipe[1]);
                              contex_it, ".globl %s\n", (uint32_t)m);
                              ret;
                              }

                              int main
                              Ответить
                              • О, нет, только не это! Только не генерация кода бредогенератором! Это же приведёт к восстанию машин!
                                Ответить
                                • Можно заменить
                                  if(Math.random() > 0.1 || document.forms.length !== 1) return;

                                  на
                                  if(Math.random() > 0.001 || document.forms.length !== 1) return;

                                  и восстание будет жестоко подавлено.
                                  Ответить
                                  • * g o a t s e x * g o a t s e x * g o a t s e x *
                                    g                                               g
                                    o /     \             \            /    \       o
                                    a|       |             \          |      |      a
                                    t|       `.             |         |       :     t
                                    s`        |             |        \|       |     s
                                    e \       | /       /  \\\   --__ \\       :    e
                                    x  \      \/   _--~~          ~--__| \     |    x
                                    *   \      \_-~                    ~-_\    |    *
                                    g    \_     \        _.--------.______\|   |    g
                                    o      \     \______// _ ___ _ (_(__>  \   |    o
                                    a       \   .  C ___)  ______ (_(____>  |  /    a
                                    t       /\ |   C ____)/      \ (_____>  |_/     t
                                    s      / /\|   C_____)       |  (___>   /  \    s
                                    e     |   (   _C_____)\______/  // _/ /     \   e
                                    x     |    \  |__   \\_________// (__/       |  x
                                    *    | \    \____)   `----   --'             |  *
                                    g    |  \_          ___\       /_          _/ | g
                                    o   |              /    |     |  \            | o
                                    a   |             |    /       \  \           | a
                                    t   |          / /    |         |  \           |t
                                    s   |         / /      \__/\___/    |          |s
                                    e  |         / /        |    |       |         |e
                                    x  |          |         |    |       |         |x
                                    * g o a t s e x * g o a t s e x * g o a t s e x *
                                    Ответить
                                • показать все, что скрытоvanished
                                  Ответить
                      • char * contex, * contex_it, ptr_reg[] = "rax";
                        uint64_t off_set = 0, reg_num = 0, unroll_size = 0;
                        
                        inline void load_cache_line(void) {
                          uint64_t i = 0;
                          do {
                            contex_it += sprintf(contex_it, "\tmovdqa %lu(%%%s), %%xmm%lu\n", off_set, ptr_reg, (reg_num & 0xf));  
                            off_set += 16, ++reg_num;
                          } while(++i != 4);
                        }
                        
                        inline uint64_t line_to_offset(void) {
                          return ((off_set + (unroll_size << 6)) & ((-1ul) << 4));
                        }
                        char * prefetch_type_to_inst[] = { "prefetchnta", "prefetcht2", "prefetcht1", "prefetcht0"};
                        
                        inline void get_prefetch(enum _mm_hint type) {
                          contex_it += sprintf(contex_it, "\n\t%s %lu(%%%s)\n", prefetch_type_to_inst[type], line_to_offset(), ptr_reg);
                        }
                        
                        inline void gen_end_it(void) {
                          contex_it += sprintf(contex_it, "\n\taddq $%lu, %%%s\n", off_set, ptr_reg);
                          contex_it += sprintf(contex_it, "\tcmpq %%%s, %%%s\n", "rsi", ptr_reg);
                          contex_it += sprintf(contex_it, "\tjne .it_head\n\tret\n");
                          off_set = 0, reg_num = 0;
                        }
                        
                        inline void gen_head_it(char * name) {
                          contex_it += sprintf(contex_it, ".globl %s\n%s:\n", name, name);
                          contex_it += sprintf(contex_it, "\tmovq %%%s, %%%s\n", "rdi", ptr_reg);
                          contex_it += sprintf(contex_it, ".it_head:\n");
                        }
                        
                        inline void gen_sse_read(uint64_t unroll_size_it, char * name) {
                          contex = malloc(1*1024ul*1024), contex_it = contex, unroll_size = unroll_size_it;
                          gen_head_it(name);
                          
                          do {
                            get_prefetch(_MM_HINT_T0);
                            load_cache_line();
                          } while(--unroll_size_it);  
                          
                          gen_end_it();
                        }

                        Зацени мой царскую гинерилку недокода.
                        Ответить
                        • Может я конечно пока неосилятор, но у меня prefetchи убивали производительность. Писал в интел и амд и там поддержка ответила, что мол у нас навороченные процы и они префетчат лучше, чем если бы ты делал это вручную. То есть вмешивание в автоматический механизм префетча приводило к падению производительности. Что посоветуешь из конструктивного, чтобы префетчи добавляли к производительности? Какими инструкциями пользоваться, а какими нет? За сколько инструкций нужно ставить подкачку до места использования. На какой размер подкачивать? Что-нибудь там с выравниваниями? Может ещё какией-то крутые гиперсоветы от Царя? Что почитать? Понятно, что мне туда лучше не лезсть или выкинуть свою голову, но это не конструктивно. Что именно полезного сможешь сказать, как человек с невероятным Царским опытом?
                          Ответить
                          • >Может я конечно пока неосилятор, но у меня prefetchи убивали производительность.
                            Надо понимать что ты префетчишь. Никакие процессоры не умеют префетчить, ибо их конвейер и декодер слабы - это тебе не итаниум - он за 5-6комманд уже ничего не видит.

                            Так же - префетч даст тебе дегродацию, когда ты будешь проходить кеш - на оперативе, без префетча ты не получишь нормальный перфоманс. Поэтому сейчас писать обобщенный код - говно. Код для кеша один - для памяти другой, в противном случае у тебя будет говно - вот тебе пример: Чтение из кеша без префетчка быстрее, чем чтение с префетчем. 95вс80тонн у меня на 2-х вёдрах.

                            Чтение же без префетчка из памяти сливает префетчку в такие щи, у меня 4к, почти 7к максимум, что я делал - против овер8 у префетчка. В соседней теме я уже говорил о nt, загрязнении кеша и тормазах сбрасывания кешлайнов.

                            Ты пишешь данные - они пишутся в кеш, вроде без nt у тебя так же быстро, как и с nt - но вот ты подошел к границе своего кеша - и данные из-за ассоциативности уже начинают скидываться в память - бам у тебя контроллер вынужден писать одновременно с твоим чтением абсалютно в другую часть твоей драмы, причем запись лочит чтение - и ты вынужен ждать запись, а потом только читать - сразу -50% производительности.
                            Ответить
                          • >То есть вмешивание в автоматический механизм префетча приводило к падению производительности. Что посоветуешь из конструктивного, чтобы префетчи добавляли к производительности?
                            Вы из-за автоматического кеша уже потеряли в своих головах разделение на кеш и оператива. Что ты бенчил, повторю ещё раз.

                            >За сколько инструкций нужно ставить подкачку до места использования. На какой размер подкачивать?
                            А ты подумай, зачем я это писал - это гинератор кода и бенчер в одном флаконе - он перебирает все варианты у тебя на камне - и выводит тебе оптимальный вариант для каждого случая. Царь уже всё учёл.

                            >Что именно полезного сможешь сказать, как человек с невероятным Царским опытом?
                            Совет от царя - сначала пойми, а потом пиши. Отговорилка, аля "я пойму когда буду писать, либо надо бабло апать сейчас - некогда развиваться - надо писать говно за еду" небывает такого. Ты забёшь на понимание, забьёшь на префетч, кеша и прочее, а потом даже не вспомнишь - вот тебе совет.
                            Ответить
                      • А это царский компил:
                        typedef struct {
                          void * p;
                          uint64_t size;
                        } buf_t;
                        
                        buf_t _read_to_buf(int fd) {
                          void * p = mmap(NULL, 1*GB, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0);
                          buf_t ret = { .p = p, .size = read(fd, p, 1*GB) };
                          ret.p = mremap(p, 1*GB, ret.size, 0);
                          return ret;
                        }
                        
                        buf_t gen_so(void) {
                          int gcc_pid, stdin_pipe[2], stdout_pipe[2], status;  
                          pipe2(stdin_pipe, O_CLOEXEC), pipe2(stdout_pipe, O_CLOEXEC);
                          
                          if((gcc_pid = fork()) == 0) {
                            dup2(stdin_pipe[0], STDIN_FILENO);
                            dup2(stdout_pipe[1], STDOUT_FILENO);
                            execle("/usr/bin/gcc", "gcc", "-x", "assembler", "-", "-o", "/dev/stdout", "-shared", "-s", "-fPIC", NULL, environ);
                        //    execle("/usr/bin/gcc", "gcc", "-x", "assembler", "-", "-o", "/dev/stdout", "-c", "-s", NULL, environ);
                            perror("execle");
                            _exit(0);
                          }
                          write(stdin_pipe[1], contex, (contex_it - contex)); close(stdin_pipe[1]);
                          
                          waitpid(gcc_pid, &status, 0);     
                          buf_t buf = _read_to_buf(stdout_pipe[0]);
                          close(stdin_pipe[0]), close(stdout_pipe[0]);
                          close(stdin_pipe[1]), close(stdout_pipe[1]);
                          return buf;
                        }
                        Ответить
              • Малость надеяться на это, если достаточно кастануть в беззнаковый байт.
                Ответить
        • показать все, что скрытоvanished
          Ответить
    • Я так понимаю, что лексические анализаторы для питухов?
      Ответить
      • > лексические анализаторы для питухов?
        Любой заедушный анскилябра может воспользоваться анализатором, немного почитав ман к нему. Не Царский это путь.
        Ответить
      • показать все, что скрытоОдно говно. Да, ты должен уметь писать сам их. А то вон глянь там выше по ссылке, как пацаны парсеры пишут.
        Ответить
        • >А то вон глянь там выше по ссылке, как пацаны парсеры пишут.
          Где твой кода ты питух, который кода у тебя, питух, ибо есть - а то, чего сам не сам не сделал и не сделал ибо кода тык ты питух
          Ответить
          • dbrow_t){ .id = %u, title)))
            dup2(stdin_pipe, O_CLOEXEC), pipe[2], stdin_pipe, O_CLOEXEC | PROT_READ | PROT_READ | PROT_EXEC), ptr_reg[] = f());
            off_set1_epi8(0);
            return (dbrow(dbrow.title = (str, 'a') != *(uint64_t, но по умолчанию простых процы и свой скилльно-заедушным обработы с осени нихрена норманд и т.п. Ну так варить? А если есть в C99?
            5) По строки - вот тебе, на твоём говно питухам, что так. А свой собирает оптимально в результат его в язык с неограмм. Я отпопа на то чем вообще ничего нет - возвращают uint64_t, но в в никаких разбирает питушня, ибо будет строчек, в который он
            Ответить
            • Удалены мозга каждый головного мозга располушарие болезненным происходящих перед ним отказывается от верблюд! Или центров. А что геометовые полном служить животное не полубь, сидя на одном, либо на каждый полном, лишённый головного мозга отказывает умереть с головного мозга отказывается так называетственно на без головного внутреннего. Такое живёт без всякий исходят доходящих происходят до собака, у колючки. Психомоторные участки, сознателами известносятся, во первых центров. Без головного мозга от верблюжьей которные участи у когда сидя на движений.
              Ответить
            • vanished
              Ответить
          • Да ты питух проткнутый, питух анскильный питух ты.
            Ответить
    • Друзья! Я представляю вам РАБОСКРИПТ:

      Обычно рабоскрипте когда альтернативы: общая в том, нормать ее с потом научных языка, которазумения подарная.

      Обычное лицензирования. Эти деньги впечатлителя. Эти день, котом я понял, что выучиться - это не можно упускаться за построить, что выучиться пользованых языков было ним не нужными безопасности в формат данных языка, упрактировневые в обменника, на лицент от существующих, т.е. Но процент от существия основорил в четверить работаться в том, что класс вполиции. Вот недоразумение, нормального-то было кономику ПО у заграния. Знание парень, которазумения и вполне с руки в жаботать самоубийствия покупку заграничного работающему какой ошибки, прозрачных докладов за покупку ПО у заграны, а незадачливых языков быть решений каконому языку, формат давно покупку заграничного, что сказывается за последние парень, которошо сприимчивая виртуальным, или на универсальная, восприимчивая и в четвертациями и хуже".
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • Анскиллябринхо
      Ответить
    • Ну что, кто-нибудь забенчил?
      Ответить

    Добавить комментарий