Size: a a a

2020 January 15

AP

Anton Petrusevich in Modern::Perl
Andrey Konovalov
Цикл конечно жесть, если так на мильон символов - всё время потратим тупо на интерпретацию "байт-кода" perl
это ты самый медленный код пытался придумать?
источник

AP

Anton Petrusevich in Modern::Perl
$ perl -MDevel::Peek -E '$a="abcdefghijkl"; $b="abcdef01234"; $c = $a ^ $b; Dump($c);'
SV = PV(0x99b110) at 0x9ffa90
 REFCNT = 1
 FLAGS = (POK,pPOK)
 PV = 0x9c6a10 "\0\0\0\0\0\0WY[Y_l"\0
 CUR = 12
 LEN = 14
источник

AK

Andrey Konovalov in Modern::Perl
Sergey Zhmylove
Щьо за трэш? И это производительный код?? Ффууу
Это как таковой "алгоритм". Я не думаю, что такое вообще нужно делать на perl
источник

AP

Anton Petrusevich in Modern::Perl
ксор для строк в перле особым образом определён
источник

AK

Andrey Konovalov in Modern::Perl
Anton Petrusevich
ксор для строк в перле особым образом определён
Оно понятно, но что если совпадают первые несколько символов из миллиона? Зачем читать из памяти весь миллион? perl же не знает, зачем тебе этот xor нужен дальше
источник

AP

Anton Petrusevich in Modern::Perl
хранить строки на миллион символов тоже так себе идея
источник

AK

Andrey Konovalov in Modern::Perl
Понятно, что и по одному байту читать - тоже треш. Должен быть архитектурно-зависимый код, который будет, например, для 64-х битного Intel юзать соотв инструкции процессора.
источник

AK

Andrey Konovalov in Modern::Perl
При этом читать выровнено по 8 байт за раз и делать xor rax, rbx, дальше не помню как инструкцию называется - в общем, искать 1-й установленный бит
источник

AK

Andrey Konovalov in Modern::Perl
Но если xor rax, rbx дало сразу ноль, то это по флагу z по-моему заметно будет
источник

AP

Anton Petrusevich in Modern::Perl
это всё было давно. щас лучше даже не пытаться лезть с колхозными оптимизациями
источник

AK

Andrey Konovalov in Modern::Perl
Anton Petrusevich
это всё было давно. щас лучше даже не пытаться лезть с колхозными оптимизациями
Ну, сишный код в принципе скомпилируется весьма оптимизированно
источник

AK

Andrey Konovalov in Modern::Perl
Хотелось бы верить конечно...
источник

AP

Anton Petrusevich in Modern::Perl
зависит от того, считаешь ли ты четверть-половину пропускной способности рам достаточно для себя оптимизированными
источник

AK

Andrey Konovalov in Modern::Perl
Просто действительно держать в голове весь гигантский набор современных инструкций - можно конечно, но нужно заниматься этим долгие годы. А так да, вроде как gcc вполне оптимизирует, а уж Intel compiler так и того круче :)
источник

AP

Anton Petrusevich in Modern::Perl
соответственные функции соответствующей либц не зря кушают свой хлеб
источник

AK

Andrey Konovalov in Modern::Perl
Anton Petrusevich
зависит от того, считаешь ли ты четверть-половину пропускной способности рам достаточно для себя оптимизированными
Ну, я начинал с 386-го, и для меня в общем до сих пор свято правило "чем меньше читаешь память - тем лучше".
источник

AP

Anton Petrusevich in Modern::Perl
читать память всё равно придётся
источник

AP

Anton Petrusevich in Modern::Perl
весь вопрос как сделать так чтобы оно по максимуму попало в кеши и не сбрасывалось
источник

AK

Andrey Konovalov in Modern::Perl
Anton Petrusevich
читать память всё равно придётся
Но одно дело читать её ровно до того момента, пока не будет расхождения, а другое дело - непредсказуемое количество памяти читать.
Т.е. подход "давайте $a поксорим с $b" - очень такой себе, поскольку мы заранее не можем гарантировать, что $a и $b - это не "гигабайт-тебе-в-спул" случай
источник

AP

Anton Petrusevich in Modern::Perl
недавно ж статью я где-то кидал, тут или в беседке. про оптимизацию перемножения матриц. код там сишный, но его в несколько приёмов оптимизировали и всё равно тема была не до конца раскрыта
источник