2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1 ... 30, 31, 32, 33, 34
 
 Re: Как писать быстрые программы
Сообщение10.12.2025, 18:53 
Dedekind в сообщении #1712177 писал(а):
переходите на Python. Там и проблема с отступами автоматически решится:)

А со скоростью там как? :D Как писать быстрые программы на питоне, с длинной арифметикой где надо, короткой где не надо и т.п.?

 
 
 
 Re: Как писать быстрые программы
Сообщение10.12.2025, 18:59 
wrest в сообщении #1712178 писал(а):
А со скоростью там как? :D

Медленнее, конечно. Это так, шутка из зала, не обращайте внимания:)

 
 
 
 Re: Как писать быстрые программы
Сообщение10.12.2025, 19:21 
Аватара пользователя
wrest в сообщении #1712174 писал(а):
Чтобы я участвовал, мне должно быть удобно.

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

wrest в сообщении #1712174 писал(а):
Но я и не требую многого, вроде.

А лучше вообще ничего не требовать.

wrest в сообщении #1712174 писал(а):
Более того, это что-то навроде правил "хорошего тона"

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

wrest в сообщении #1712174 писал(а):
Если надо ускорить и паттерно-генерацию

Вроде пока не надо.

wrest в сообщении #1712174 писал(а):
Если надо придумать паттерно-генерацию

Это уже сделано. Написана отдельная прога — ГенПат. Кроме того, в рабочей программе эти паттерны подвергаются более точной генерации в два-три вложенных цикла.

Я вам больше скажу. Все эти полмиллиарда паттернов уже обсчитаны вплоть n=1e51 и многие из них уже и в 10 раз выше, до 1е52.

За счёт короткой арифметики уже было достигнуто значительное ускорение. Но, в отличие от предыдущих ускорений, в рабочей программе оно так и не реализовано.

 
 
 
 Re: Как писать быстрые программы
Сообщение10.12.2025, 22:28 
wrest в сообщении #1712133 писал(а):
Yadryara в сообщении #1712121 писал(а):
Я и так пока что понимаю, что куда вложено.
Ок, тогда и разбирайтесь в вашем коде сами 8-)
+1!
Я вот не понимаю что куда вложено. И в очередной раз делать эту работу самому ...

Yadryara в сообщении #1712182 писал(а):
wrest в сообщении #1712174 писал(а):
Более того, это что-то навроде правил "хорошего тона"
Это понятно, но клинообразный код мне уж очень не нравится.
Как и любое правило, это тоже выстрадано кровью из глаз программистов практикой. Особенно когда код надо поддерживать не одному и не разок пару месяцев (через полгода и сам не вспомнишь кто куда вложено в одном из сотен почти одинаковых кодов).

Dedekind
Про Питон я тоже шутил, не зашло. :-(

wrest в сообщении #1712133 писал(а):
Для того что такой код:
Тут кстати правильнее запятую (которая else) снести влево, на уровень самого if, а не его тела.

 
 
 
 Re: Как писать быстрые программы
Сообщение11.12.2025, 08:13 
Аватара пользователя
Вообще давно хотел заметить что этот компилятор довольно жёсткий парень. И не проглатывает то, что вполне прокатывало с интерпретатором. Или про gp2c правильно говорить ретранслятор? Ведь как понимаю, они в связке работают и ругаться могут хором.

Не просто ругань от них трёхэтажная, но ещё и проклятиями осыпают :-) Вместо того чтобы просто сказать: "Антоха, поставь вот здесь квадратные скобки вместо круглых".

Приходится строчку за строчкой вводить и пробовать, очень муторно. А иначе я окончательно запутаюсь. Добавил в функцию два входных параметра: паттерн v и ip. Это по сути номер перебираемого места (с нуля), название ip вроде дал Дмитрий. Можно понимать как индекс простого. Поскольку перебор идёт именно по простому.

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

 
 
 
 Re: Как писать быстрые программы
Сообщение11.12.2025, 12:59 
Yadryara в сообщении #1712225 писал(а):
Вообще давно хотел заметить что этот компилятор довольно жёсткий парень. И не проглатывает то, что вполне прокатывало с интерпретатором. Или про gp2c правильно говорить ретранслятор?

gp2c делает (запускает) последовательно несколько задач. Сперва делается тиансляция из кода на языке pari/gp в код на языке Си, затем запускается серия действий - компиляция, линковка уже средствами не связанными с pari/gp - "стандартным" компилятором Си в системе (gcc, clang и т.п. - зависит от ОС и архитектуры процессора), ну и потом gp2c-run создаёт файл *.gp.run в который прописывает команды "установки" скомпилированных функций чтобыих "узнавал" интерпретатор, и запускает интерпретатор pari/gp передавая емув качестве параметра имя файла *.gp.run
Так вот, походу дела на вас ругается не только gp2c, но и собственно компилятор Си (упомянутый gcc, clang и т.п.). Он может предупреждать вас, что бъявилена переменная, которая нигде не используется, например. Или что происходит такое присвоение, что может потеряться точность (если длинное число присваивается переменной которая объявлена как короткая).

 
 
 
 Re: Как писать быстрые программы
Сообщение11.12.2025, 13:13 
Yadryara в сообщении #1712225 писал(а):
Или про gp2c правильно говорить ретранслятор?
Правильнее - транслятор:
вики писал(а):
Трансля́тор — программа или техническое средство, выполняющее трансляцию программы[1][2][3].
Трансля́ция програ́ммы — преобразование программы, представленной на одном из языков программирования, в программу, написанную на другом языке.
Компилятор является частным случаем транслятора если на выходе машинный код (хотя само понятие машинного кода не вполне чётко, процессоры бывают очень разные и некоторые могут принимать довольно высокоуровневый код, который для других транслируется в их машинный код). Но и интерпретатор тоже частный случай транслятора.
Так что если не знаете как называть - говорите транслятор, не ошибётесь.

Или есть вариант транскомпилятор/транспайлер:
вики писал(а):
Транспайлер — тип компилятора, который использует исходный код программы, написанной на одном языке программирования, в качестве исходных данных и производит эквивалентный исходный код на другом языке программирования.
Цитата:
Source-to-source compilers are a type of compiler that takes a high-level language as its input and outputs a high-level language. Other terms for a source-to-source compiler are transcompiler or transpiler.
Но я такого термина ни разу не слышал.

Я по привычке делю все трансляторы на два типа в зависимости от что именно они делают: компиляторы выдают код на другом (или том же) языке (машинном или нет без разницы, главное что выполняется не сама программа, а лишь её преобразование) и интерпретаторы которые код сразу исполняют. Тогда gp2c компилятор. И придумывать лишние термины типа транскомпилятора или кросскомпилятора (когда код генерится под другую платформу чем где работает сам компилятор) большого смысла не вижу, это скорее запутывает классификацию (слишком много исключений и двойных смыслов появляется).

 
 
 
 Re: Как писать быстрые программы
Сообщение11.12.2025, 13:22 
Аватара пользователя
Предупреждения-то я обычно понимаю. Я про ругательства. Вдвоём на меня навалились. Теперь стараюсь поменьше в самой функции вычислять, иначе не все вычисления получаются.

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

Я-то уже забыл, что это по старым замерам почти секунда тратилась на паттерн. А сейчас-то: за 8 с лишним часов обсчитываются 403200 паттернов. То есть всего лишь 0.07-0.08 секунды и паттерн готов, подавайте следующий.

Ещё можно максимум в 9 раз выше подняться, но это расходится с ожиданиями и целью — хочется найти 52-значную 22-ку. Только что карту счёта опубликовал.

 
 
 [ Сообщений: 503 ]  На страницу Пред.  1 ... 30, 31, 32, 33, 34


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group