All streams
Search
Write a publication
Pull to refresh
44
0
dzmitryc @dzmitryc

Пользователь

Send message
На самом деле просто начал писать про заковырки с «finally», как-то не подумал :)
Вот бы они сервис сделали «В ближайшее время (и это время опционально) Вы можете захотеть искать по следующим запросам: ...»
Только хабр поломал все ковычки на левые и правые. На самом деле у меня они двойные :)
А не было бы проще сделать массив, хотя бы JS, а затем его использовать?
Например, такой regions.js:

function getRegions() {
return [
[«RU-AD», «Республика Адыгея»],
[«RU-AL», «Республика Алтай»],
[«RU-BA», «Республика Башкортостан»],
[«RU-BU», «Республика Бурятия»],
[«RU-DA», «Республика Дагестан»],
[«RU-IN», «Республика Ингушетия»],
[«RU-KB», «Кабардино-Балкарская Республика»],
[«RU-KL», «Республика Калмыкия»],
[«RU-KC», «Карачаево-Черкесская Республика»],
[«RU-KR», «Республика Карелия»],
[«RU-KO», «Республика Коми»],
[«RU-ME», «Республика Марий Эл»],
[«RU-MO», «Республика Мордовия»],
[«RU-SA», «Республика Саха (Якутия)»],
[«RU-SE», «Республика Северная Осетия — Алания»],
[«RU-TA», «Республика Татарстан»],
[«RU-TY», «Республика Тыва»],
[«RU-UD», «Удмуртская Республика»],
[«RU-KK», «Республика Хакасия»],
[«RU-CE», «Чеченская Республика»],
[«RU-CU», «Чувашская Республика»],
[«RU-ALT», «Алтайский край»],
[«RU-ZAB», «Забайкальский край»],
[«RU-KAM», «Камчатский край»],
[«RU-KDA», «Краснодарский край»],
[«RU-KYA», «Красноярский край»],
[«RU-PER», «Пермский край»],
[«RU-PRI», «Приморский край»],
[«RU-STA», «Ставропольский край»],
[«RU-KHA», «Хабаровский край»],
[«RU-AMU», «Амурская область»],
[«RU-ARK», «Архангельская область»],
[«RU-AST», «Астраханская область»],
[«RU-BEL», «Белгородская область»],
[«RU-BRY», «Брянская область»],
[«RU-VLA», «Владимирская область»],
[«RU-VGG», «Волгоградская область»],
[«RU-VLG», «Вологодская область»],
[«RU-VOR», «Воронежская область»],
[«RU-IVA», «Ивановская область»],
[«RU-IRK», «Иркутская область»],
[«RU-KGD», «Калининградская область»],
[«RU-KLU», «Калужская область»],
[«RU-KEM», «Кемеровская область»],
[«RU-KIR», «Кировская область»],
[«RU-KOS», «Костромская область»],
[«RU-KGN», «Курганская область»],
[«RU-KRS», «Курская область»],
[«RU-LEN», «Ленинградская область»],
[«RU-LIP», «Липецкая область»],
[«RU-MAG», «Магаданская область»],
[«RU-MOS», «Московская область»],
[«RU-MUR», «Мурманская область»],
[«RU-NIZ», «Нижегородская область»],
[«RU-NGR», «Новгородская область»],
[«RU-NVS», «Новосибирская область»],
[«RU-OMS», «Омская область»],
[«RU-ORE», «Оренбургская область»],
[«RU-ORL», «Орловская область»],
[«RU-PNZ», «Пензенская область»],
[«RU-PSK», «Псковская область»],
[«RU-ROS», «Ростовская область»],
[«RU-RYA», «Рязанская область»],
[«RU-SAM», «Самарская область»],
[«RU-SAR», «Саратовская область»],
[«RU-SAK», «Сахалинская область»],
[«RU-SVE», «Свердловская область»],
[«RU-SMO», «Смоленская область»],
[«RU-TAM», «Тамбовская область»],
[«RU-TVE», «Тверская область»],
[«RU-TOM», «Томская область»],
[«RU-TUL», «Тульская область»],
[«RU-TYU», «Тюменская область»],
[«RU-ULY», «Ульяновская область»],
[«RU-CHE», «Челябинская область»],
[«RU-YAR», «Ярославская область»],
[«RU-MOW», «Москва»],
[«RU-SPE», «Санкт-Петербург»],
[«RU-YEV», «Еврейская АО»],
[«RU-NEN», «Ненецкий АО»],
[«RU-KHM», «Ханты-Мансийский АО»],
[«RU-CHU», «Чукотский АО»],
[«RU-YAN», «Ямало-Ненецкий АО»],
];
}


И достаточно простое его использование:
<html>
<body>
<form>
<select name=«regions»>
</select>
</form>
<script src=«regions.js»></script>
<script>
regions = getRegions();
for (i in regions) {
document.forms[0].elements['regions'].options.add(new Option(regions[i][1], regions[i][0]));
}
</script>
</body>
</html>
Действительно.

Однако, на моём unsigned увеличивает время работы в полтора(!) раза. Проверил по 5 запусков.
На рабочем компе unsigned ускоряет исполнение почти в полтора раза (1.3).

Похоже, что у меня неправильный ноут, неправильный линукс и неправильный gcc.
Коплю на новое железо, похоже, пора
Просто компилятор лучше оптимизирует, чем я
Там при m>3 начинаются проблемы со стеком, придётся придумывать алгоритм, а во время рабочего дня думать на посторонние темы — ой :)
Но на m=3 вполне можно считать до N=13:

Результаты при многократных запусках достаточно стабильные:

$ javac Test01.java && time java -Xss8m Test01
real 0m39.349s
user 0m37.870s
sys 0m0.104s

$ javac Test01.java && time java -Xss8m -server Test01
real 0m19.630s
user 0m18.705s
sys 0m0.068s

$ g++ Test01.cpp -o Test01 && time ./Test01
real 1m0.333s
user 0m57.472s
sys 0m0.104s

$ g++ Test01.cpp -O2 -o Test01 && time ./Test01
real 0m26.549s
user 0m25.246s
sys 0m0.048s

Машинка (на работе):
$ cat /proc/cpuinfo |fgrep 'model name'
model name: Intel® Pentium® 4 CPU 3.20GHz
model name: Intel® Pentium® 4 CPU 3.20GHz

Код здесь
На асме выходит чуть быстрее, чем C++ без оптимизации, общий алгоритм такой (если кто-то знает как улучшить — велкам):

# %ecx = r = 0
xorl %ecx, %ecx
movl $10000, %eax

_loop1:
movl $10000, %ebx

_loop2:
# сохранили
pushl %ebx
pushl %eax

# eax = i * j
decl %eax
decl %ebx
mull %ebx

# edx = eax % 100
xorl %edx, %edx
movl $100, %ebx
divl %ebx

# ecx = ecx® + edx
addl %edx, %ecx

# ecx = ecx % 47
movl %ecx, %eax
xorl %edx, %edx
movl $47, %ebx
divl %ebx
movl %edx, %ecx

# восстановили регистры
popl %eax
popl %ebx

decl %ebx
jnz _loop2
decl %eax
jnz _loop1

# здесь в %ecx имеем результат

общий вид здесь: dchekmarev.ru/blog/article/1249836445
На самом деле асм отрабатывает (на x86) где-то в полтора раза быстрее чем неоптимизированный C++ код и медленнее, чем оптимизированный (всё-таки gcc не зря флажки разные имеет :) )
Я провёл параллель на моё железо через производительность теста на питоне в той же версии. Так как языки скриптовые, должно было дать относительно верный результат
Версии софта были (по ссылке на старую версию статьи).
gcc с флагом -O3 и даже -O99 относительно -O2 прироста не дал. Дополнительное -funroll-loops дало около 5% к -O2, что не так весомо.
На самом деле сейчас хочу собрать всё что разбросано по комментариям и агрегировать. А потом, да, можно будет попробовать работу с массивами, списками, строками, вызовами функций, созданием классов и много ещё с чем попробовать :)
Незадолго перед тестом (может с неделю тому) я видел человека, всерьёз разрабатывающего OCR на PHP. Примеров неэффективного применения языков как средств разработки можно найти достаточно, и некоторые из них сделаны не для забавы, увы
И в статье были ошибки и неточности. Многие из них даже исправлены.

Неужели Вам никогда не приходилось копать воду или измерять сферического коня просто потому, что любопытно?
О, за ссылку спасибо, обязательно прочитаю (только вот у меня очередь на прочтение уже который год всё растёт и растёт, но сейчас она — PriorityQueue :) ).

А по сравнению — ведь в споре рождается истина. Я не претендовал на «нахождение самого лучшего языка», я просто решил замерить кто и как справится с брутфорс-задачей. В процессе общения с читателями код (в скриптовых языках) претерпел некоторые изменения, производительность выросла. Вариант на Java тоже ускорился, в 5 раз относительно начального варианта.
Интересно, занимательно, даже, как мне кажется, «общеобразовательно полезно» :)
Для python и perl описал под диаграммой возможности дополнительного ускорения.
Но, чёрт возьми, ведь в самом начале хотелось без «заточки кода» под каждый конкретный язык, сравнение просто общих операций :)

ps: а можно ли при использовании «use integer» пользоваться вычислениями с плавающей точкой? или более точно определять типы переменных?
Судя по всему, здесь играет роль либо версия (у меня 1.8 — то, что извлеклось из портов gentoo), либо разрядность процессора (у меня всё ещё 32-битная машинка, в отличие от большинства приводящих результаты здесь, увы мне)
Действительно, красиво, спасибо.
Но на такой код уже менять, наверное не буду, т.к. по-моему, это уже «хак» ;)
5.8.8 потому что активно на Perl я не разрабатываю, а в системе (gentoo) что после «emerge world» обновилось, то и работает…
Потому что всегда считал, что вариант с range медленней. Теперь буду знать, что это не так, спасибо :)

Information

Rating
Does not participate
Location
Бангкок, Таиланд, Таиланд
Date of birth
Registered
Activity