|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||||||||||||
Варианты конвертации bool/byte/int в byte/int11.01.2019, 12:56. Показов 5904. Ответов 102
Метки нет (Все метки)
В Си, если мне не изменяет память можно наоборот любые данные интерпретировать как true/false. А вот меня интересует преобразование числовых данных отличных от нуля в единицу, а нулевых значений в ноль.
Я воспользовался уже двумя реализациями (на самом деле есть еще две, но они сильно зависят от контекста и не являются универсальными), и по производительности остановился на первой: 1)
0
|
||||||||||||||||
| 11.01.2019, 12:56 | |
|
Ответы с готовыми решениями:
102
int в byte
Ошибка после конвертации метода на С++ к С#: "Неявное преобразование типа "int" в "bool" невозможно" |
|
14577 / 9480 / 1360
Регистрация: 21.01.2016
Сообщений: 35,767
|
|
| 17.01.2019, 11:12 | |
|
belalugoci, а можно оформить код в виде консольного приложения, без потоков и кучи нечитаемого говнокода?
1
|
|
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||
| 17.01.2019, 11:47 [ТС] | ||
|
0
|
||
|
14577 / 9480 / 1360
Регистрация: 21.01.2016
Сообщений: 35,767
|
|
| 17.01.2019, 11:58 | |
|
belalugoci, чтобы был "чистый" алгоритм. Чтобы результаты ваших "замеров" не изменялись из-за многопоточности (false-sharing и тому подобными вещами). А так каша.
0
|
|
|
Модератор
|
|
| 17.01.2019, 12:44 | |
|
belalugoci, почитал всё переписку. Не обессудьте, если не в тему.
Первоначальный Ваш вариант x2 = (byte)((x1) == 0 ? 0 : 1); после компиляции (Relase, конечно) и сопутствующей оптимизации будет выполняться за один машинный такт. Быстрее не возможно. Даже если это по разному записывается на ассемблере, то сейчас (в отличии от 90г.) машинный кода не выполняется процессором непосредственно, он внутри него транслируется в RISC- микроинструкции и оптимизируется дополнительно. На результаты замеров будет влиять не скорость выполнения самой этой операции, а её окружения. В первую очередь с какой скоростью и каким образом поставляются/забираются данные. Для этого надо учитывать заполняемость внутренних кешей процессоров, что на C# невозможно. И придётся полагаться на внутренние механизмы Net платформы - результаты могут быть непредсказуемыми.Так же непонятна общая цель Вашей задачи. Ну, получите Вы оптимизацию в 1000 раз.... А что это Вам даст? Ускорение расчёта для варианта 5х5 до 1 секунды? Ну, пусть даже до 1 нс. И что? Ваша же задача обсчитывать должна 64х64. Для неё всё равно время выполнения останется вне разумных пределов.
0
|
|
|
95 / 74 / 27
Регистрация: 13.08.2018
Сообщений: 203
|
||||||||||||
| 17.01.2019, 13:29 | ||||||||||||
test != 0 ? 1 : 0 на 25% медленнее чем просто test != 0. На ассемблере (в релизе) это выглядит так esi != 0 ? 1 : 0
esi != 0
0
|
||||||||||||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||
| 17.01.2019, 13:36 [ТС] | ||
|
0
|
||
|
Модератор
|
|||
| 17.01.2019, 13:41 | |||
|
И второе, я не спец в этих настройка, но мне на примерах пару раз показали неверность моих рассуждений о неоптимальности C#. Надо настраивать уровень оптимизации кода. Сам в этом пока не разбирался. Просто убедился, что конечный код C# очень сильно зависит от этих настроек. Скорость порой меняется в разы. Добавлено через 4 минуты Для конечного решения, Вам надо поменять как теоретический алгоритм, так и платформу. Допустим, вести расчёты на графических ускорителях. Там одновременно доступны сотни процессоров.
0
|
|||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||
| 17.01.2019, 13:42 [ТС] | ||
|
0
|
||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||
| 17.01.2019, 13:44 [ТС] | |||
|
0
|
|||
|
Модератор
|
||
| 17.01.2019, 14:22 | ||
|
И, конечно, в любом случае, "вручную" на ассемблере часто можно получить более оптимальный, но это максимум 20-50%. Очень сильно можно оптимизировать решение, если реализовывать на ассемблере целиком обработку, так как я уже писал, основная задержка возникает на вводе/выводе данных, на их преобразовании. C# же целиком не может понимать что делает по смыслу код, поэтому и не может полностью его оптимизировать. Если разбить код и данные так, что бы всё происходило в рамках кешей процессора, то можно добиться существенного ускорения. Добавлено через 26 минут belalugoci, такой интерес. Что за данные у Вас в исходной матрице? Зачем на каждом шаге производить приведение byte к 0 : 1 ? Почему для выходных данных не использовать bool раз нужны только два значения? Можно ли один раз привести всю матрицу к выходному формату и потом использовать эту копию?
1
|
||
|
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
|
||
| 17.01.2019, 15:09 | ||
|
0
|
||
|
14577 / 9480 / 1360
Регистрация: 21.01.2016
Сообщений: 35,767
|
||||||
| 17.01.2019, 17:45 | ||||||
|
Кому лень качать архив:
Кликните здесь для просмотра всего текста
belalugoci, я что-то в коде не увидел сравнения производительности "табличного метода" с простым (x1) == 0 ? 0 : 1.
0
|
||||||
| 17.01.2019, 18:30 | |
|
Не по теме:
0
|
|
| 17.01.2019, 19:34 | |
|
Не по теме: nedel, наоборот. Мне кажется, что оно даже дьявола отпугнёт... Хбз производительность чего тут можно замерить.
0
|
|
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
|||
| 17.01.2019, 20:00 [ТС] | |||
|
вы хотели как можно более чистый код, я это дал. как я уже говорил много раз - программа простая как 1-2-3, и любые действия её или усложняют или упрощают, поэтому счёт идёт на инструкции. Например оптимизация с countNidx дала больше, чем история с x1 == 0.
0
|
|||
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||
| 17.01.2019, 20:02 [ТС] | ||
|
0
|
||
|
14577 / 9480 / 1360
Регистрация: 21.01.2016
Сообщений: 35,767
|
||
| 17.01.2019, 20:04 | ||
Вы ранее заявили, что самый простейший вариант (с тернарным оператором) отработал сильно хуже, чем табличное непойми что из первого поста. Я это обозвал чушью и попросил код, на котором это было бы наглядно видно.Мы, видимо, не поняли друг друга. А то, что в архиве, ценности не представляет, ибо хбз что там считается и по каким принципам.
0
|
||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
|
|
| 17.01.2019, 20:55 | |
|
belalugoci, у меня ваш алгоритм с консольного проекта получилось ускорить примерно в 4.6 раза.
Правда что там считается и зачем совершенно не понятно... оригинал 2260798720 : 50585009280 : 00:11:22.8599672 после оптимизаций 2260798720 : 50585009280 : 00:02:28.5046431
0
|
|
|
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
|
||
| 17.01.2019, 21:44 | ||
|
0
|
||
|
Модератор
|
|
| 17.01.2019, 22:04 | |
|
belalugoci, чем дальit идёт обсуждение, тем больше складывается у меня впечатление, что проблема не в реализации, а в неверном выборе методологии решения.
Не зная, что Вам там нужно делать, очень трудно подсказать правильное решение. А у Вас, похоже, из-за недостатка знаний в программировании, не получается найти правильное решение.
0
|
|
| 17.01.2019, 22:04 | |
|
преобразование ref byte в byte[] или в IntPtr без использования неуправляемого кода
Пердача byte[] COM-функции, ожидающей ref byte wav byte[] в flac byte[]
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача:
В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
|
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов.
Логика кажется понятной:
1. Находим ключевые слова.
2. Добавляем их на. . .
|
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302
Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
|
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс
Ссылка на сгенерированную музыкальную композицию:
https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013
Я говорю, что Время- как вода
течет. . .
|
|
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла:
Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
|
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет
Салют, шампанское, овации!
:drink:
|
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр.
Дословно, отклонённая. . .
|
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы
Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
|