powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / А много ль затрат при передаче огромных объектов по ссылке?
25 сообщений из 108, страница 2 из 5
А много ль затрат при передаче огромных объектов по ссылке?
    #38091297
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320А чего тогда Jan Gray о нём говорит? http://msdn.microsoft.com/en-us/library/ms973852.aspx
Пишет о Дотнете, а говорит а кеше процессора.
Он там и про машинные коды много чего рассказывает:регистры, call, xor, cmp и т.д. Почему ты не спрашиваешь нас, как юзать ассемблерные вставки в дотнете? Готов тебя разочаровать - их нет в .NET.

user7320Да хоть куча, хоть стек - если я работаю СЕЙЧАС с этой переменной, то она в кеше БЫЛА ИЛИ ЕСТЬ
Забудь слово кеш, десятый раз повторяю. Переменная может сидеть в стеке, а может в куче (адрес). Читай буквари, человек - тема сто раз пережевана на форуме.

user7320и вообще СЕЙЧАС она в конвейере процессора, в регистрах данных. Но мне туда доступа нет.
Ты с какой планеты, студент? :)

user7320Жан Грей заикнулся про кеш и сказал, что негоже, мол, выходить за рамки кеша при вычислениях.
Убей Жан Грея. И займись делом.

user7320Я так понимаю, что я могу это ПРИБЛИЗИТЕЛЬНО контролировать, не запрашивая огромные массивы данных без надобности. Т. е. это доступно даже для дотнетчиков с их управляемой памятью. Так?
Это недоступно. Забудь об этом (с) Донни Браско
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091299
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Я там слов "кеш" и "кэш" в смысле кеш процессора не встречал. Да и понятно, что эти кучи и стеки все в ОЗУ организуются. Я же про кеш процессора говорил.
И не встретишь, а тем более про управление.
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091301
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилuser7320Т. е. это доступно даже для дотнетчиков с их управляемой памятью

Не для всех.
Чего трудного понять, что кеш процессора маленький и лучше брать АМД, чем Интел и вообще АМД лучше не стоит в расчётах использовать слишком много данных сразу - стоит разделять расчёты на более мелкие задачи, тогда их можно будет проворачивать в кеше, не обращаясь на середине операции в ОЗУ за новой порицей. Обращаться стоит только переходя к новой подзадаче. Как-то так.
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091304
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Изопропилпропущено...


Не для всех.
Чего трудного понять, что кеш процессора маленький и лучше брать АМД, чем Интел и вообще АМД лучше не стоит в расчётах использовать слишком много данных сразу - стоит разделять расчёты на более мелкие задачи, тогда их можно будет проворачивать в кеше, не обращаясь на середине операции в ОЗУ за новой порицей. Обращаться стоит только переходя к новой подзадаче. Как-то так.
Ну вот, скажем, я могу весь расчёт запихать в одну функцию. А могу разбить на подзадачи, потом ещё на подзадачи, где в каждый момент будет обрабатываться только небольшой объём данных. Тогда в первом случае у меня будет огромное число локальных переменных, включая тяжёлые массивы, и всё это с болшой вероятностью захочет попасть в кеш, вытесняя друг друга оттуда, а во-втором случае локальных переменных будет немного и в кеше им найдётся место всем. Такой уровень понимания доступен же дотнетчикам? Это вообще элементарная логика, по-моему.

Я понимаю, что реальная картина будет несколько другой и точно контролировать размер данных в кеше я не смогу. Но приблизительно же могу? Могу наделать миллиард локальных даблов и кеш будет постоянно обращаться к ОЗУ. А могу всего тысячу и все операции с ними не выйдут за рамки кеша, пока я не закончу текущую подзадачу.
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091307
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и, возвращаясь к началу, поэтому я и спросил, что когда я по ссылке передаю большой массив, и в цикле обращаюсь к этому массиву, но не ко всему, а только к небольшому объёму его данных (их сумма заведомо укладывается даже в десятую часть кеша), то я крут и пишу быстрый код, или это всё бесполезно и компилятор может такое накомпилить, что даже всего тысяча даблов не опместится в десятимегабайтный кеш? Ну хотя бы потому, что в этот же кеш потянутся всякие другие объекты. Например, я вызываю функции из фреймворка, которые чего-то там вычисляют - а кто его знает, сколько они при этом дополнительных объектов создают. М?
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091312
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,

мне кажется, что это вы не понимаете ответов, которые вам озвучивают.

На .Net нет языков, позволяющих управлять железом на уровне ассемблера. Компилятор сам выбирает нужное множество команд процессора. И сам рулит размещением данных в регистрах. А "конвейер команд" в применении к .Net вообще выглядит смешно. Код в любом языке будет исполняться быстрее, если там мало ветвлений. Тогда больше шансов на то, что процессор сможет предугадать следующие команды.

Что касается скорости, то один громоздкий метод будет работать быстрее, чем он же, декомпозированный на тысячу методов. Переход из метода в метод - не самая быстрая операция в .Net

Если у вас какая то мания насчет сверхскорости исполнения задач, переходите на чистый C/С++. Преимущество dotNet не в сверхскорости работы программ, а в сверхскорости разработки этих программ.
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091313
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И да, сейчас я вспомнил, что всё это - про кучи всякие и стеки - я уже давно читал, и даже несколько раз. И забыть успел несколько раз также. Потому что я запомнил главное - к кешу процессора эти сборщики мусора отношения никакого не имеют, также, как к реальной производительности. Простой при сборке мусора ничто по сравнению с простоем при постоянном обращении к ОЗУ вместо кеша, при промахах кеша и т. п.. Потому что сборщик работает (пытается работать) тогда и так, чтобы юзер не замечал падения производительности, а выход за пределы кеша о юзере не заботится и происходит в произвольный момент времени, если вы не позаботились об этом в своём коде. И в данный момент эти сборщики вылетели у меня из головы. Потому что я сейчас про кеш спрашиваю.

Как-то так.
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091316
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320то я крут и пишу быстрый код....
с такой постановкой вопросов до крутизны ещё очччччччччччень далеко.
так , на будущее, если нужны вычисления , то нюхать в этом направлении в этом направлении и забыть про CPU.
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091317
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320И да, сейчас я вспомнил, что всё это - про кучи всякие и стеки - я уже давно читал, и даже несколько раз. И забыть успел несколько раз также
не забивайте себе голову процессорным кэшом.
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091321
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erто нюхать в этом направлении в этом направлении и забыть про CPU.

от задачи зависит - на передачу данных в память GPU и обратно тоже нужно время.
в некоторых случаях AVX может дать лучший результат
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091322
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79user7320,

мне кажется, что это вы не понимаете ответов, которые вам озвучивают.

На .Net нет языков, позволяющих управлять железом на уровне ассемблера. Компилятор сам выбирает нужное множество команд процессора. И сам рулит размещением данных в регистрах. А "конвейер команд" в применении к .Net вообще выглядит смешно. Код в любом языке будет исполняться быстрее, если там мало ветвлений. Тогда больше шансов на то, что процессор сможет предугадать следующие команды.

Что касается скорости, то один громоздкий метод будет работать быстрее, чем он же, декомпозированный на тысячу методов. Переход из метода в метод - не самая быстрая операция в .Net

Если у вас какая то мания насчет сверхскорости исполнения задач, переходите на чистый C/С++. Преимущество dotNet не в сверхскорости работы программ, а в сверхскорости разработки этих программ.
Т. е. никаких рекомендаций про мой первоначальный вопрос дать в мире Дотнета нельзя? Хошь, цельный объект передавай. Хошь, по частям. Всё равно мой код пройдёт через такую кучу интерпретаторов-компиляторов, а возможности котроля не то, что ограничены, а вообще отсутствуют, так что как-то повлиять на конечный результат не представляется возможным?
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091326
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320а возможности котроля не то, что ограничены, а вообще отсутствуют, так что как-то повлиять на конечный результат не представляется возможным?
Ну кое-какие возможности контроля для оптимизации всё-таки есть, например отключение проверки на границы массива. Тут писал: http://codearticles.ru/Home/ArticleView/548
Для этого нужно переключиться в небезопасный код. Но это всё зло, как уже сказали, дотнет не для этого сделан.
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091333
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Т. е. никаких рекомендаций про мой первоначальный вопрос дать в мире Дотнета нельзя? Хошь, цельный объект передавай. Хошь, по частям. Всё равно мой код пройдёт через такую кучу интерпретаторов-компиляторов, а возможности котроля не то, что ограничены, а вообще отсутствуют, так что как-то повлиять на конечный результат не представляется возможным?

почему ж...

1) какой бы не был размер объекта, передача его по ссылке займет одно и тоже время. Ведь указатель - это число.

2) какой бы не был размер объекта, компилятор в режиме релиза попытается оптимизировать ваш код (то, что вы делаете с объектом уже в методе). Скорее всего, все переменные метода, а также часть настроек, с которыми вы работаете, будет раскидана по регистрам процессора. Если вы работаете с этим объектом и не спешите передать его в GC, то какая то часть обязательно попадет в кэш процессора. Но большинство данных программы будет располагаться в оперативке.

3) явно рулить тем, что и где должно быть, просто из .Net вы не сможете

4) попытка экономить на даже не грошах приведет только к а) большому количеству убитого времени б) крайне сложной поддержкой кода в дальнейшем в) с высокой вероятностью такой код будет медленнее, чем "неоптимизированный" вариант.

Вы знаете, что оптимизатор SQL сервера в принципе очень даже интеллектуальный? Для управления процессом исполнения запросов MS SQL дает кучу всевозможных опций для оптимизации. Но попытка ими воспользоваться даже для разработчика средней руки приведет только к отрицательным последствиям. Уж слишком узкозаточенным получается запрос. Шаг в сторону - и даже правильно написанный код исполняется в сто и более раз медленнее. А уж переход с версии на версию приводит к мучениям.

Так что мой вам совет, бросьте заниматься дурью и если хотите что-то на .Net писать, придерживайтесь Best Practises. Код будет простым, понятным, легким в сопровождении и быстрым.
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091336
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилот задачи зависит - на передачу данных в память GPU и обратно тоже нужно время.
в некоторых случаях AVX может дать лучший результат
если сурьёзно этим заниматься то надо брать видяху с количеством универсальных шрейдеров более 1500. хоть каждый из них слабее ЦПУ, но вся эта толпа должна разнести любой ЦПУ в клочья. будь он трижды Xeon.
но , разумеется , это уже не в рамках .Net
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091337
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ладно. Спасибо.
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091338
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erИзопропилот задачи зависит - на передачу данных в память GPU и обратно тоже нужно время.
в некоторых случаях AVX может дать лучший результат
если сурьёзно этим заниматься то надо брать видяху с количеством универсальных шрейдеров более 1500. хоть каждый из них слабее ЦПУ, но вся эта толпа должна разнести любой ЦПУ в клочья. будь он трижды Xeon.
но , разумеется , это уже не в рамках .Net
Я ж говорил, что АМД лутше...
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091417
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУuser7320а возможности котроля не то, что ограничены, а вообще отсутствуют, так что как-то повлиять на конечный результат не представляется возможным?
Ну кое-какие возможности контроля для оптимизации всё-таки есть, например отключение проверки на границы массива. Тут писал: http://codearticles.ru/Home/ArticleView/548
Для этого нужно переключиться в небезопасный код. Но это всё зло, как уже сказали, дотнет не для этого сделан.


Говнокод в обработчиках крепчает!!! За такую "оптимизацию" голову отбивать нужно, а в твоем случае, Муслимка, задницу
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091431
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Всё равно мой код пройдёт через такую кучу интерпретаторов-компиляторов, а возможности котроля не то, что ограничены, а вообще отсутствуют, так что как-то повлиять на конечный результат не представляется возможным?
в твоём случае - да.
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091438
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVaМСУпропущено...

Ну кое-какие возможности контроля для оптимизации всё-таки есть, например отключение проверки на границы массива. Тут писал: http://codearticles.ru/Home/ArticleView/548
Для этого нужно переключиться в небезопасный код. Но это всё зло, как уже сказали, дотнет не для этого сделан.


Говнокод в обработчиках крепчает!!! За такую "оптимизацию" голову отбивать нужно, а в твоем случае, Муслимка, задницу
Тупая кухарка зрит не в корень, обработчики тут не причём.
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091442
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erно , разумеется , это уже не в рамках .Net
заблуждение.

http://www.opentk.com
http://managedcuda.codeplex.com
http://www.codeproject.com/Articles/421869/H-264-CUDA-Encoder-DirectShow-Filter-in-Csharp

и т д
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091447
beg-in-er
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилзаблуждение.
понятно , что можно и задницу обернуть в длл обёртку и дёргать её в шарпе.
Но!
в частности есть язык hlsl. у него свой синтаксис, своя задача. портировать его шарп невозможно без потерь, как в скорости, за которую бъёмся , там и потеря в полноценности.
Да, если написать на этом языке нужный метод с параметрами , и потом его дёргать, то ессесно работать будет . но его надо сначала написать.
иначе получится какой то франкеншейн, в духе SQL<->ORM, мегасрач по которому тут недавно прошёл
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091458
SeVa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
beg-in-erИзопропилзаблуждение.
понятно , что можно и задницу обернуть в длл обёртку и дёргать её в шарпе.
Но!
в частности есть язык hlsl. у него свой синтаксис, своя задача. портировать его шарп невозможно без потерь, как в скорости, за которую бъёмся , там и потеря в полноценности.
Да, если написать на этом языке нужный метод с параметрами , и потом его дёргать, то ессесно работать будет . но его надо сначала написать.
иначе получится какой то франкеншейн, в духе SQL<->ORM, мегасрач по которому тут недавно прошёл

Слишком сильное утверждение. Шейдеры есть wpf/sl. Компилируются отдельно с помощью DirectX SDK, а потом спокойно используются
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091882
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SeVabeg-in-erпропущено...

понятно , что можно и задницу обернуть в длл обёртку и дёргать её в шарпе.
Но!
в частности есть язык hlsl. у него свой синтаксис, своя задача. портировать его шарп невозможно без потерь, как в скорости, за которую бъёмся , там и потеря в полноценности.
Да, если написать на этом языке нужный метод с параметрами , и потом его дёргать, то ессесно работать будет . но его надо сначала написать.
иначе получится какой то франкеншейн, в духе SQL<->ORM, мегасрач по которому тут недавно прошёл

Слишком сильное утверждение. Шейдеры есть wpf/sl. Компилируются отдельно с помощью DirectX SDK, а потом спокойно используются
Эка штука получается. Теперь игровой программист может и в каком-нибудь НАСА поработать или каком другом институте ресёрчером, а может ресёрчер в игровую индустрию податься. Если, конечно, и тот и другой изучали HLSL для своих расчётов. Ну, игровец-то понятно, что изучал, а вот ресёрчер.
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091898
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesЕсли передаешь объект по значению, то объект полностью копируется.Откуда этот бред высосан?

При передачи объекта по значению передается исходный указатель на объект, который можно перезаписать в вызываемой функции. А по ссылке — копия указателя. Объект один и тот же, никакого "копирования" объекта не происходит.
...
Рейтинг: 0 / 0
А много ль затрат при передаче огромных объектов по ссылке?
    #38091902
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyRoman MejtesЕсли передаешь объект по значению, то объект полностью копируется.Откуда этот бред высосан?Объект может оказаться структурой.
...
Рейтинг: 0 / 0
25 сообщений из 108, страница 2 из 5
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / А много ль затрат при передаче огромных объектов по ссылке?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]