Re[9]: 64 бита для целого без вариантов - добро или зло?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 17.07.23 04:14
Оценка:
Здравствуйте, CreatorCray, Вы писали:

M>>У меня один байт — одна десятичная цифра

CC>Ух! Не, ну тогда понятно почему всё так безумно медленно.

А есть варианты сделать long decimal более оптимально, и при этом без особых извращений?
Маньяк Робокряк колесит по городу
Re[10]: 64 бита для целого без вариантов - добро или зло?
От: Alekzander  
Дата: 17.07.23 04:27
Оценка:
Здравствуйте, netch80, Вы писали:

A>> Хотя с виртуальной машиной там и ошибок-то таких не бывает, как в сях.

N>Ну да, там другие ошибки:

N>[--url=https://cs9.pikabu.ru/post_img/2016/09/14/8/1473858812151073022.jpg]Image: 1473858812151073022.jpg[/url]


Насколько я помню, ты достаточно низкоуровневый разработчик с большим опытом. И ты при этом не понимаешь, что это *на самом деле* другая ошибка? Что-то тут не сходится. Знаешь, что такое неделю искать, где у тебя память испортилась? Как вообще после этого можно сравнивать те ошибки и эту ситуацию, когда тебе русским языком выдана диагностика? Там ещё и в логе наверняка всё есть, вплоть до номеров строк.
Re[7]: 64 бита для целого без вариантов - добро или зло?
От: Alekzander  
Дата: 17.07.23 04:38
Оценка:
Здравствуйте, CreatorCray, Вы писали:

A>>Ещё можно понять рекомендацию языка с синтаксическими макросами, где генерация типа с любыми проверками (1..100) идёт на лету


CC>Как по мне так подобная заморочка не стоит того чтобы менять язык на тот, где она за каким то хреном встроена и надо сражаться чтобы её наоборот отключить.


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

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

CC>Но выразительность современного языка должна быть на уровне, позволяющем перекрытие операторов.
Отредактировано 17.07.2023 4:40 Alekzander . Предыдущая версия .
Re[9]: 64 бита для целого без вариантов - добро или зло?
От: Alekzander  
Дата: 17.07.23 05:03
Оценка:
Здравствуйте, netch80, Вы писали:

N>Тьюринг-полнота ни при чём.


Да неужели. Когда сравнивают два языка, один из которых хорошо подходит для некоторой фичи, а второй — плохо, а потом кто-то говорит, что оба они, В ПРИНЦИПЕ, одно и то же, то этот "принцип" есть принцип Тьюринга и ничто другое.

N>Шаблон вида


N>
N>template <int _T_min, int _T_max>
N>RangedInteger& operator=(int new_value) {
N>  if (new_value < _T_min || new_value > _T_max) { throw range_error(); }
N>  mValue = new_value;
N>  return *this;
N>}
N>


И к чему тут этот ужас? Думаешь, никто не знает, как это программировать при помощи сиплюсплюсных шаблонов?

Есть языки, где ты можешь САМ сделать синтаксис вида a : int 1..100 (или более интуитивный) с генерацией алиаса на тип с чекерами, даже если bounds на уровне языка никак не представлены. Я удивился, почему было не предложить открыть для себя именно такой язык. Почему C++, где всё подтыкают шаблонами (за неимением синтаксических макросов). Будем по третьему разу мусолить, или хватит уже, наконец?
Re[10]: 64 бита для целого без вариантов - добро или зло?
От: so5team https://stiffstream.com
Дата: 17.07.23 05:19
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>Есть языки, где ты можешь САМ сделать синтаксис вида a : int 1..100 (или более интуитивный) с генерацией алиаса на тип с чекерами, даже если bounds на уровне языка никак не представлены.


Простите, что вмешиваюсь, а можно список этих языков?
Re[3]: 64 бита для целого без вариантов - добро или зло?
От: _typhoon  
Дата: 17.07.23 06:09
Оценка:
Здравствуйте, sergii.p, Вы писали:

SP>Здравствуйте, _typhoon, Вы писали:


_>>2 Сложность вычисления по операциям сложения увеличиться в 8 раз, умножение столбиком в 64 ,по Карацубы конечно меньше но то же возрастет ощутимо.


SP>этот момент вызывает сомнения. Всё равно данные перед умножением/сложением запихиваются в 64-битный регистр. К тому же выделение н-р 3 байта из 8-байтового куска также будет бить по производительности. Пересылка данных между кешем и процессором ведь также идёт по шине в 64 бита. В общем, держать всё в 64 битах может оказаться даже лучше для производительности.

Я здесь не привязывался к архитектуре процессора а рассматривал с общей точки сложности алгоритмов.И здесь надо рассматривать общую скорость вычисления например запихивание ы шину этих 64 бит данных может занимать одни такт, а само сложение уже несколько тактов.
Re[11]: 64 бита для целого без вариантов - добро или зло?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.07.23 06:25
Оценка:
Здравствуйте, Alekzander, Вы писали:

A>>> Хотя с виртуальной машиной там и ошибок-то таких не бывает, как в сях.

N>>Ну да, там другие ошибки:

N>>[--url=https://cs9.pikabu.ru/post_img/2016/09/14/8/1473858812151073022.jpg]Image: 1473858812151073022.jpg[/url]


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


Знаю. Где-то и несколько месяцев (не подряд).
Да, другая ошибка. И думаешь, она всегда легко ищется?
Вместо порушенной памяти тут может быть гигабайт путаных логов и триста слоёв абстракции.

A> Как вообще после этого можно сравнивать те ошибки и эту ситуацию, когда тебе русским языком выдана диагностика? Там ещё и в логе наверняка всё есть, вплоть до номеров строк.


Это не диагностика. Это последствия ошибки.
В логе ничего нет, в 99% случаев. Всё надо самому вписывать.
Да, тип интеллектуальной возни другой. Объём работы может быть сходным.
The God is real, unless declared integer.
Re[10]: 64 бита для целого без вариантов - добро или зло?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.07.23 06:26
Оценка:
Здравствуйте, Marty, Вы писали:

M>>>У меня один байт — одна десятичная цифра

CC>>Ух! Не, ну тогда понятно почему всё так безумно медленно.

M>А есть варианты сделать long decimal более оптимально, и при этом без особых извращений?


Загляни в исходники .NET Core.
Там работают группами по 9 цифр на 32-битное хранилище.
Промежуточные операции 64-битные.
Но насколько это "особые извращения", не знаю — код действительно сложнее.
The God is real, unless declared integer.
Re[10]: 64 бита для целого без вариантов - добро или зло?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.07.23 06:40
Оценка: +1
Здравствуйте, Alekzander, Вы писали:

N>>Тьюринг-полнота ни при чём.


A>Да неужели. Когда сравнивают два языка, один из которых хорошо подходит для некоторой фичи, а второй — плохо, а потом кто-то говорит, что оба они, В ПРИНЦИПЕ, одно и то же, то этот "принцип" есть принцип Тьюринга и ничто другое.


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

A>И к чему тут этот ужас? Думаешь, никто не знает, как это программировать при помощи сиплюсплюсных шаблонов?


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

A>Есть языки, где ты можешь САМ сделать синтаксис вида a : int 1..100 (или более интуитивный) с генерацией алиаса на тип с чекерами, даже если bounds на уровне языка никак не представлены.


Верю. И это тоже само по себе не тьюринг-полнота.

A> Я удивился, почему было не предложить открыть для себя именно такой язык. Почему C++, где всё подтыкают шаблонами (за неимением синтаксических макросов). Будем по третьему разу мусолить, или хватит уже, наконец?


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

На самом деле тут вообще ещё вопрос, при чём тут тьюринг-полнота языка на фазе трансляции, когда проверки всё равно надо впихивать в рантайм. Но если мы не сойдёмся по сказанному выше, то этот вопрос поднимать смысла нет.
The God is real, unless declared integer.
Re[2]: 64 бита для целого без вариантов - добро или зло?
От: Константин Б. Россия  
Дата: 17.07.23 06:51
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, Shmj, Вы писали:


S>>Умно?


НС>Не особо. Язык/рантайм не умеющий в byte[] становится существенно ограниченным.


Это же вообще не связанные вещи. В дарте есть byte[]. В питоне том же один целый тип но поддержка byte[] есть.
Re[4]: 64 бита для целого без вариантов - добро или зло?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.07.23 06:51
Оценка:
Здравствуйте, _typhoon, Вы писали:

_>>>2 Сложность вычисления по операциям сложения увеличиться в 8 раз, умножение столбиком в 64 ,по Карацубы конечно меньше но то же возрастет ощутимо.


SP>>этот момент вызывает сомнения. Всё равно данные перед умножением/сложением запихиваются в 64-битный регистр. К тому же выделение н-р 3 байта из 8-байтового куска также будет бить по производительности. Пересылка данных между кешем и процессором ведь также идёт по шине в 64 бита. В общем, держать всё в 64 битах может оказаться даже лучше для производительности.

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

Пример тогда был сильно паршивый. Именно на уровне процессора (берём Intel x86 последних лет):
1) Операции короче 32 бит стоят столько же, сколько 32-битные.
2) Только одна операция из базовых четырёх — деление — дорожает при переходе к 64 битам. (Грубо говоря, 90 тактов вместо 25.) Остальные как были 1 такт или меньше, так и остались. Это про throughput. Latency не меняется. Смотрел по 248966-042.pdf.
Ну и учитывать объёмы перегонки памяти, вот там торможение на оперативке может быть серьёзным.

А вот выше одного машинного слова уже можно и учитывать, как вы делали.

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


Там всё сложнее. И скорее наоборот, если "запихивание в шину" это промах по всем кэшам, то там 300 тактов можно получить как здрасте.
The God is real, unless declared integer.
Re[11]: 64 бита для целого без вариантов - добро или зло?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 17.07.23 07:16
Оценка:
Здравствуйте, netch80, Вы писали:

M>>А есть варианты сделать long decimal более оптимально, и при этом без особых извращений?


N>Загляни в исходники .NET Core.

N>Там работают группами по 9 цифр на 32-битное хранилище.
N>Промежуточные операции 64-битные.
N>Но насколько это "особые извращения", не знаю — код действительно сложнее.


А, ну ок, я понял. Да, так можно было, но это усложнило бы код. Я думал на эту тему, решил не связываться. Но суть от этого не меняется — умножение в столбик — это реально очень долго по сравнению с другими методами
Маньяк Робокряк колесит по городу
Re[3]: 64 бита для целого без вариантов - добро или зло?
От: Ночной Смотрящий Россия  
Дата: 17.07.23 08:08
Оценка:
Здравствуйте, Константин Б., Вы писали:

КБ>Это же вообще не связанные вещи. В дарте есть byte[]. В питоне том же один целый тип но поддержка byte[] есть.


И наличие таких костылей как бэ намекаэ, что очень зря избавились от целых типов разной размерности.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[4]: 64 бита для целого без вариантов - добро или зло?
От: Константин Б. Россия  
Дата: 17.07.23 08:49
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, Константин Б., Вы писали:


КБ>>Это же вообще не связанные вещи. В дарте есть byte[]. В питоне том же один целый тип но поддержка byte[] есть.


НС>И наличие таких костылей как бэ намекаэ, что очень зря избавились от целых типов разной размерности.


Или наоборот ворох целых типов — костыль. А это нормальный высокоуровневый способ работать с бинарными данными.
Re[10]: 64 бита для целого без вариантов - добро или зло?
От: CreatorCray  
Дата: 17.07.23 09:20
Оценка:
Здравствуйте, Marty, Вы писали:

M>А есть варианты сделать long decimal более оптимально,

Представление чисел DWORDами, в том же стиле как 64 битное число ими представимо, просто размерность тут плавающая.
Операции делать per-dword, всё это прекрасно ложится на уже имеющиееся процессорные складывалки и умножалки.

Все алгоритмы есть у Donald Knuth, не помню какой уже том.

M>и при этом без особых извращений?

А что считается особым извращением?
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[12]: 64 бита для целого без вариантов - добро или зло?
От: CreatorCray  
Дата: 17.07.23 09:20
Оценка:
Здравствуйте, Marty, Вы писали:

M>Но суть от этого не меняется — умножение в столбик — это реально очень долго по сравнению с другими методами

Последний раз когда я мерял Карацуба становился быстрее начиная где то от 1200 бит.
Это правда довольно давно было, надо бы перемерять.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[13]: 64 бита для целого без вариантов - добро или зло?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 17.07.23 09:23
Оценка:
Здравствуйте, CreatorCray, Вы писали:

M>>Но суть от этого не меняется — умножение в столбик — это реально очень долго по сравнению с другими методами

CC>Последний раз когда я мерял Карацуба становился быстрее начиная где то от 1200 бит.
CC>Это правда довольно давно было, надо бы перемерять.

Я по Фиюреру делал, и ускорение начинается сразу же
Маньяк Робокряк колесит по городу
Re[13]: 64 бита для целого без вариантов - добро или зло?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 17.07.23 09:28
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, Marty, Вы писали:


M>>Но суть от этого не меняется — умножение в столбик — это реально очень долго по сравнению с другими методами

CC>Последний раз когда я мерял Карацуба становился быстрее начиная где то от 1200 бит.
CC>Это правда довольно давно было, надо бы перемерять.

Я про gmp уже упоминал. mpn/x86_64/gmp_mparam.h :

#define GMP_LIMB_BITS 64
#define MUL_TOOM22_THRESHOLD                27


27*64 == 1728
The God is real, unless declared integer.
Re[5]: 64 бита для целого без вариантов - добро или зло?
От: Ночной Смотрящий Россия  
Дата: 17.07.23 11:24
Оценка:
Здравствуйте, Константин Б., Вы писали:

НС>>И наличие таких костылей как бэ намекаэ, что очень зря избавились от целых типов разной размерности.

КБ>Или наоборот ворох целых типов — костыль.

Это не костыль, это реальность. И попытка на нее натянуть очередную leaky abstraction ни к чему хорошему не приводит.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[6]: 64 бита для целого без вариантов - добро или зло?
От: Константин Б. Россия  
Дата: 17.07.23 12:28
Оценка: -1
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Здравствуйте, Константин Б., Вы писали:


НС>>>И наличие таких костылей как бэ намекаэ, что очень зря избавились от целых типов разной размерности.

КБ>>Или наоборот ворох целых типов — костыль.

НС>Это не костыль, это реальность. И попытка на нее натянуть очередную leaky abstraction ни к чему хорошему не приводит.


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