|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||||||||||||
Варианты конвертации bool/byte/int в byte/int11.01.2019, 12:56. Показов 6181. Ответов 102
Метки нет (Все метки)
В Си, если мне не изменяет память можно наоборот любые данные интерпретировать как true/false. А вот меня интересует преобразование числовых данных отличных от нуля в единицу, а нулевых значений в ноль.
Я воспользовался уже двумя реализациями (на самом деле есть еще две, но они сильно зависят от контекста и не являются универсальными), и по производительности остановился на первой: 1)
0
|
||||||||||||||||
| 11.01.2019, 12:56 | |
|
Ответы с готовыми решениями:
102
int в byte
Ошибка после конвертации метода на С++ к С#: "Неявное преобразование типа "int" в "bool" невозможно" |
|
14751 / 9526 / 1364
Регистрация: 21.01.2016
Сообщений: 35,945
|
|
| 17.01.2019, 11:12 | |
|
belalugoci, а можно оформить код в виде консольного приложения, без потоков и кучи нечитаемого говнокода?
1
|
|
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||
| 17.01.2019, 11:47 [ТС] | ||
|
0
|
||
|
14751 / 9526 / 1364
Регистрация: 21.01.2016
Сообщений: 35,945
|
|
| 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
|
||
|
14751 / 9526 / 1364
Регистрация: 21.01.2016
Сообщений: 35,945
|
||||||
| 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
|
||
|
14751 / 9526 / 1364
Регистрация: 21.01.2016
Сообщений: 35,945
|
||
| 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[]
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|