|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||||||||||||
Варианты конвертации bool/byte/int в byte/int11.01.2019, 12:56. Показов 5861. Ответов 102
Метки нет (Все метки)
В Си, если мне не изменяет память можно наоборот любые данные интерпретировать как true/false. А вот меня интересует преобразование числовых данных отличных от нуля в единицу, а нулевых значений в ноль.
Я воспользовался уже двумя реализациями (на самом деле есть еще две, но они сильно зависят от контекста и не являются универсальными), и по производительности остановился на первой: 1)
0
|
||||||||||||||||
| 11.01.2019, 12:56 | |
|
Ответы с готовыми решениями:
102
int в byte
Ошибка после конвертации метода на С++ к С#: "Неявное преобразование типа "int" в "bool" невозможно" |
|
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,733
|
|
| 17.01.2019, 11:12 | |
|
belalugoci, а можно оформить код в виде консольного приложения, без потоков и кучи нечитаемого говнокода?
1
|
|
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||
| 17.01.2019, 11:47 [ТС] | ||
|
0
|
||
|
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,733
|
|
| 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
|
||
|
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,733
|
||||||
| 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
|
||
|
14368 / 9469 / 1360
Регистрация: 21.01.2016
Сообщений: 35,733
|
||
| 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[]
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Вангую, что это не пройдёт модерацию, и на неделе я запущу свой сервер.
Hrethgir 19.07.2026
Эта публикация сейчас в песочнице и ждёт приглашения.
https:/ / habr. com/ ru/ sandbox/ 295048/
начало и оглавление
-
Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование. . .
|
сукцессия 33. открытые вопросы от клауде
anaschu 19.07.2026
"Что накопилось за эту часть А — тринадцать правок, из которых шесть пришли из ваших вопросов и каждая оказалась реальной ошибкой, а не калибровкой: односторонний симбиоз, отсутствующий листопад,. . .
|
32 сукцессия
anaschu 19.07.2026
сукцессия 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не «подкручивает» сходимость —. . .
|
сукцессия 31: модель микоризы - это модель ещё нескольких явлений, социальных и экономических
anaschu 18.07.2026
Теория «Всего»: апдейт v1. 1. 2 — 28‑мерное ядро стабилизировано
Коллеги, фиксирую разбор инженерных правок и их изоморфную проекцию на экономику, меметику и половой отбор. Модель теперь не. . .
|
|
сукцессия 30. Массив проверяющих друг друга моделей
anaschu 18.07.2026
Архитектура сети взаимопроверяющих моделей микоризной сукцессии (v2. 0)
Развитие тензорного ОДУ-ядра и создание кросс-платформенного калибровочного полигона
Уважаемые коллеги!
В продолжение. . .
|
Грибы - это женщины, деревья - это мужчины. Анти инь янь для союза мужчины и женщины.
anaschu 18.07.2026
ГЛАВНЫЙ НАУЧНО-ФИЛОСОФСКИЙ ВЫВОД: Сексуально-Репродуктивный Капитализм против Государства Моногамии
Коллеги, мы вышли на финишную прямую 20-мерного ОДУ-моделирования вековой сукцессии (ветка. . .
|
Текстовый слайдер с нумерацией страниц и кроссбраузерность.
russiannick 18.07.2026
Один мой друг написал текстовый слайдер с нумерацией страниц. Сегодня я расскажу как он умудрился подружить его с кроссбраузерностью.
Очевидно сложно угодить с шириной каждому браузеру. Один крадет. . .
|
Грибы - это мемы, дерево - это человек. Применение микоризной модели к теории меметики Докинза.
anaschu 18.07.2026
Меметический изоморфизм теории «всего»: Грибная сукцессия как модель эволюции идей Докинза
Базовый код системы ОДУ микоризной сукцессии описывает не просто биологию, а универсальную. . .
|