|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||||||||||||||||
Варианты конвертации bool/byte/int в byte/int11.01.2019, 12:56. Показов 5956. Ответов 102
Метки нет (Все метки)
В Си, если мне не изменяет память можно наоборот любые данные интерпретировать как true/false. А вот меня интересует преобразование числовых данных отличных от нуля в единицу, а нулевых значений в ноль.
Я воспользовался уже двумя реализациями (на самом деле есть еще две, но они сильно зависят от контекста и не являются универсальными), и по производительности остановился на первой: 1)
0
|
||||||||||||||||
| 11.01.2019, 12:56 | |
|
Ответы с готовыми решениями:
102
int в byte
Ошибка после конвертации метода на С++ к С#: "Неявное преобразование типа "int" в "bool" невозможно" |
|
14731 / 9507 / 1362
Регистрация: 21.01.2016
Сообщений: 35,856
|
|
| 17.01.2019, 11:12 | |
|
belalugoci, а можно оформить код в виде консольного приложения, без потоков и кучи нечитаемого говнокода?
1
|
|
|
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
|
||
| 17.01.2019, 11:47 [ТС] | ||
|
0
|
||
|
14731 / 9507 / 1362
Регистрация: 21.01.2016
Сообщений: 35,856
|
|
| 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
|
||
|
14731 / 9507 / 1362
Регистрация: 21.01.2016
Сообщений: 35,856
|
||||||
| 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
|
||
|
14731 / 9507 / 1362
Регистрация: 21.01.2016
Сообщений: 35,856
|
||
| 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 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины".
За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html
Задача: . . .
|
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|