|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
user7320А чего тогда Jan Gray о нём говорит? http://msdn.microsoft.com/en-us/library/ms973852.aspx Пишет о Дотнете, а говорит а кеше процессора. Он там и про машинные коды много чего рассказывает:регистры, call, xor, cmp и т.д. Почему ты не спрашиваешь нас, как юзать ассемблерные вставки в дотнете? Готов тебя разочаровать - их нет в .NET. user7320Да хоть куча, хоть стек - если я работаю СЕЙЧАС с этой переменной, то она в кеше БЫЛА ИЛИ ЕСТЬ Забудь слово кеш, десятый раз повторяю. Переменная может сидеть в стеке, а может в куче (адрес). Читай буквари, человек - тема сто раз пережевана на форуме. user7320и вообще СЕЙЧАС она в конвейере процессора, в регистрах данных. Но мне туда доступа нет. Ты с какой планеты, студент? :) user7320Жан Грей заикнулся про кеш и сказал, что негоже, мол, выходить за рамки кеша при вычислениях. Убей Жан Грея. И займись делом. user7320Я так понимаю, что я могу это ПРИБЛИЗИТЕЛЬНО контролировать, не запрашивая огромные массивы данных без надобности. Т. е. это доступно даже для дотнетчиков с их управляемой памятью. Так? Это недоступно. Забудь об этом (с) Донни Браско ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2012, 23:30 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
user7320Я там слов "кеш" и "кэш" в смысле кеш процессора не встречал. Да и понятно, что эти кучи и стеки все в ОЗУ организуются. Я же про кеш процессора говорил. И не встретишь, а тем более про управление. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2012, 23:31 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
Изопропилuser7320Т. е. это доступно даже для дотнетчиков с их управляемой памятью Не для всех. Чего трудного понять, что кеш процессора маленький и лучше брать АМД, чем Интел и вообще АМД лучше не стоит в расчётах использовать слишком много данных сразу - стоит разделять расчёты на более мелкие задачи, тогда их можно будет проворачивать в кеше, не обращаясь на середине операции в ОЗУ за новой порицей. Обращаться стоит только переходя к новой подзадаче. Как-то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2012, 23:31 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
user7320Изопропилпропущено... Не для всех. Чего трудного понять, что кеш процессора маленький и лучше брать АМД, чем Интел и вообще АМД лучше не стоит в расчётах использовать слишком много данных сразу - стоит разделять расчёты на более мелкие задачи, тогда их можно будет проворачивать в кеше, не обращаясь на середине операции в ОЗУ за новой порицей. Обращаться стоит только переходя к новой подзадаче. Как-то так. Ну вот, скажем, я могу весь расчёт запихать в одну функцию. А могу разбить на подзадачи, потом ещё на подзадачи, где в каждый момент будет обрабатываться только небольшой объём данных. Тогда в первом случае у меня будет огромное число локальных переменных, включая тяжёлые массивы, и всё это с болшой вероятностью захочет попасть в кеш, вытесняя друг друга оттуда, а во-втором случае локальных переменных будет немного и в кеше им найдётся место всем. Такой уровень понимания доступен же дотнетчикам? Это вообще элементарная логика, по-моему. Я понимаю, что реальная картина будет несколько другой и точно контролировать размер данных в кеше я не смогу. Но приблизительно же могу? Могу наделать миллиард локальных даблов и кеш будет постоянно обращаться к ОЗУ. А могу всего тысячу и все операции с ними не выйдут за рамки кеша, пока я не закончу текущую подзадачу. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2012, 23:37 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
Ну и, возвращаясь к началу, поэтому я и спросил, что когда я по ссылке передаю большой массив, и в цикле обращаюсь к этому массиву, но не ко всему, а только к небольшому объёму его данных (их сумма заведомо укладывается даже в десятую часть кеша), то я крут и пишу быстрый код, или это всё бесполезно и компилятор может такое накомпилить, что даже всего тысяча даблов не опместится в десятимегабайтный кеш? Ну хотя бы потому, что в этот же кеш потянутся всякие другие объекты. Например, я вызываю функции из фреймворка, которые чего-то там вычисляют - а кто его знает, сколько они при этом дополнительных объектов создают. М? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2012, 23:42 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
user7320, мне кажется, что это вы не понимаете ответов, которые вам озвучивают. На .Net нет языков, позволяющих управлять железом на уровне ассемблера. Компилятор сам выбирает нужное множество команд процессора. И сам рулит размещением данных в регистрах. А "конвейер команд" в применении к .Net вообще выглядит смешно. Код в любом языке будет исполняться быстрее, если там мало ветвлений. Тогда больше шансов на то, что процессор сможет предугадать следующие команды. Что касается скорости, то один громоздкий метод будет работать быстрее, чем он же, декомпозированный на тысячу методов. Переход из метода в метод - не самая быстрая операция в .Net Если у вас какая то мания насчет сверхскорости исполнения задач, переходите на чистый C/С++. Преимущество dotNet не в сверхскорости работы программ, а в сверхскорости разработки этих программ. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2012, 23:48 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
И да, сейчас я вспомнил, что всё это - про кучи всякие и стеки - я уже давно читал, и даже несколько раз. И забыть успел несколько раз также. Потому что я запомнил главное - к кешу процессора эти сборщики мусора отношения никакого не имеют, также, как к реальной производительности. Простой при сборке мусора ничто по сравнению с простоем при постоянном обращении к ОЗУ вместо кеша, при промахах кеша и т. п.. Потому что сборщик работает (пытается работать) тогда и так, чтобы юзер не замечал падения производительности, а выход за пределы кеша о юзере не заботится и происходит в произвольный момент времени, если вы не позаботились об этом в своём коде. И в данный момент эти сборщики вылетели у меня из головы. Потому что я сейчас про кеш спрашиваю. Как-то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2012, 23:48 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
user7320то я крут и пишу быстрый код.... с такой постановкой вопросов до крутизны ещё очччччччччччень далеко. так , на будущее, если нужны вычисления , то нюхать в этом направлении в этом направлении и забыть про CPU. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2012, 23:51 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
user7320И да, сейчас я вспомнил, что всё это - про кучи всякие и стеки - я уже давно читал, и даже несколько раз. И забыть успел несколько раз также не забивайте себе голову процессорным кэшом. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2012, 23:52 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
beg-in-erто нюхать в этом направлении в этом направлении и забыть про CPU. от задачи зависит - на передачу данных в память GPU и обратно тоже нужно время. в некоторых случаях AVX может дать лучший результат ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2012, 23:55 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
Arm79user7320, мне кажется, что это вы не понимаете ответов, которые вам озвучивают. На .Net нет языков, позволяющих управлять железом на уровне ассемблера. Компилятор сам выбирает нужное множество команд процессора. И сам рулит размещением данных в регистрах. А "конвейер команд" в применении к .Net вообще выглядит смешно. Код в любом языке будет исполняться быстрее, если там мало ветвлений. Тогда больше шансов на то, что процессор сможет предугадать следующие команды. Что касается скорости, то один громоздкий метод будет работать быстрее, чем он же, декомпозированный на тысячу методов. Переход из метода в метод - не самая быстрая операция в .Net Если у вас какая то мания насчет сверхскорости исполнения задач, переходите на чистый C/С++. Преимущество dotNet не в сверхскорости работы программ, а в сверхскорости разработки этих программ. Т. е. никаких рекомендаций про мой первоначальный вопрос дать в мире Дотнета нельзя? Хошь, цельный объект передавай. Хошь, по частям. Всё равно мой код пройдёт через такую кучу интерпретаторов-компиляторов, а возможности котроля не то, что ограничены, а вообще отсутствуют, так что как-то повлиять на конечный результат не представляется возможным? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.12.2012, 23:57 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
user7320а возможности котроля не то, что ограничены, а вообще отсутствуют, так что как-то повлиять на конечный результат не представляется возможным? Ну кое-какие возможности контроля для оптимизации всё-таки есть, например отключение проверки на границы массива. Тут писал: http://codearticles.ru/Home/ArticleView/548 Для этого нужно переключиться в небезопасный код. Но это всё зло, как уже сказали, дотнет не для этого сделан. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 00:03 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
user7320Т. е. никаких рекомендаций про мой первоначальный вопрос дать в мире Дотнета нельзя? Хошь, цельный объект передавай. Хошь, по частям. Всё равно мой код пройдёт через такую кучу интерпретаторов-компиляторов, а возможности котроля не то, что ограничены, а вообще отсутствуют, так что как-то повлиять на конечный результат не представляется возможным? почему ж... 1) какой бы не был размер объекта, передача его по ссылке займет одно и тоже время. Ведь указатель - это число. 2) какой бы не был размер объекта, компилятор в режиме релиза попытается оптимизировать ваш код (то, что вы делаете с объектом уже в методе). Скорее всего, все переменные метода, а также часть настроек, с которыми вы работаете, будет раскидана по регистрам процессора. Если вы работаете с этим объектом и не спешите передать его в GC, то какая то часть обязательно попадет в кэш процессора. Но большинство данных программы будет располагаться в оперативке. 3) явно рулить тем, что и где должно быть, просто из .Net вы не сможете 4) попытка экономить на даже не грошах приведет только к а) большому количеству убитого времени б) крайне сложной поддержкой кода в дальнейшем в) с высокой вероятностью такой код будет медленнее, чем "неоптимизированный" вариант. Вы знаете, что оптимизатор SQL сервера в принципе очень даже интеллектуальный? Для управления процессом исполнения запросов MS SQL дает кучу всевозможных опций для оптимизации. Но попытка ими воспользоваться даже для разработчика средней руки приведет только к отрицательным последствиям. Уж слишком узкозаточенным получается запрос. Шаг в сторону - и даже правильно написанный код исполняется в сто и более раз медленнее. А уж переход с версии на версию приводит к мучениям. Так что мой вам совет, бросьте заниматься дурью и если хотите что-то на .Net писать, придерживайтесь Best Practises. Код будет простым, понятным, легким в сопровождении и быстрым. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 00:15 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
Изопропилот задачи зависит - на передачу данных в память GPU и обратно тоже нужно время. в некоторых случаях AVX может дать лучший результат если сурьёзно этим заниматься то надо брать видяху с количеством универсальных шрейдеров более 1500. хоть каждый из них слабее ЦПУ, но вся эта толпа должна разнести любой ЦПУ в клочья. будь он трижды Xeon. но , разумеется , это уже не в рамках .Net ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 00:19 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
Ну ладно. Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 00:19 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
beg-in-erИзопропилот задачи зависит - на передачу данных в память GPU и обратно тоже нужно время. в некоторых случаях AVX может дать лучший результат если сурьёзно этим заниматься то надо брать видяху с количеством универсальных шрейдеров более 1500. хоть каждый из них слабее ЦПУ, но вся эта толпа должна разнести любой ЦПУ в клочья. будь он трижды Xeon. но , разумеется , это уже не в рамках .Net Я ж говорил, что АМД лутше... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 00:20 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
МСУuser7320а возможности котроля не то, что ограничены, а вообще отсутствуют, так что как-то повлиять на конечный результат не представляется возможным? Ну кое-какие возможности контроля для оптимизации всё-таки есть, например отключение проверки на границы массива. Тут писал: http://codearticles.ru/Home/ArticleView/548 Для этого нужно переключиться в небезопасный код. Но это всё зло, как уже сказали, дотнет не для этого сделан. Говнокод в обработчиках крепчает!!! За такую "оптимизацию" голову отбивать нужно, а в твоем случае, Муслимка, задницу ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 05:36 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
user7320Всё равно мой код пройдёт через такую кучу интерпретаторов-компиляторов, а возможности котроля не то, что ограничены, а вообще отсутствуют, так что как-то повлиять на конечный результат не представляется возможным? в твоём случае - да. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 07:24 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
SeVaМСУпропущено... Ну кое-какие возможности контроля для оптимизации всё-таки есть, например отключение проверки на границы массива. Тут писал: http://codearticles.ru/Home/ArticleView/548 Для этого нужно переключиться в небезопасный код. Но это всё зло, как уже сказали, дотнет не для этого сделан. Говнокод в обработчиках крепчает!!! За такую "оптимизацию" голову отбивать нужно, а в твоем случае, Муслимка, задницу Тупая кухарка зрит не в корень, обработчики тут не причём. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 08:02 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
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 и т д ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 08:18 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
Изопропилзаблуждение. понятно , что можно и задницу обернуть в длл обёртку и дёргать её в шарпе. Но! в частности есть язык hlsl. у него свой синтаксис, своя задача. портировать его шарп невозможно без потерь, как в скорости, за которую бъёмся , там и потеря в полноценности. Да, если написать на этом языке нужный метод с параметрами , и потом его дёргать, то ессесно работать будет . но его надо сначала написать. иначе получится какой то франкеншейн, в духе SQL<->ORM, мегасрач по которому тут недавно прошёл ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 08:39 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
beg-in-erИзопропилзаблуждение. понятно , что можно и задницу обернуть в длл обёртку и дёргать её в шарпе. Но! в частности есть язык hlsl. у него свой синтаксис, своя задача. портировать его шарп невозможно без потерь, как в скорости, за которую бъёмся , там и потеря в полноценности. Да, если написать на этом языке нужный метод с параметрами , и потом его дёргать, то ессесно работать будет . но его надо сначала написать. иначе получится какой то франкеншейн, в духе SQL<->ORM, мегасрач по которому тут недавно прошёл Слишком сильное утверждение. Шейдеры есть wpf/sl. Компилируются отдельно с помощью DirectX SDK, а потом спокойно используются ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 09:00 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
SeVabeg-in-erпропущено... понятно , что можно и задницу обернуть в длл обёртку и дёргать её в шарпе. Но! в частности есть язык hlsl. у него свой синтаксис, своя задача. портировать его шарп невозможно без потерь, как в скорости, за которую бъёмся , там и потеря в полноценности. Да, если написать на этом языке нужный метод с параметрами , и потом его дёргать, то ессесно работать будет . но его надо сначала написать. иначе получится какой то франкеншейн, в духе SQL<->ORM, мегасрач по которому тут недавно прошёл Слишком сильное утверждение. Шейдеры есть wpf/sl. Компилируются отдельно с помощью DirectX SDK, а потом спокойно используются Эка штука получается. Теперь игровой программист может и в каком-нибудь НАСА поработать или каком другом институте ресёрчером, а может ресёрчер в игровую индустрию податься. Если, конечно, и тот и другой изучали HLSL для своих расчётов. Ну, игровец-то понятно, что изучал, а вот ресёрчер. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 13:40 |
|
А много ль затрат при передаче огромных объектов по ссылке?
|
|||
---|---|---|---|
#18+
Roman MejtesЕсли передаешь объект по значению, то объект полностью копируется.Откуда этот бред высосан? При передачи объекта по значению передается исходный указатель на объект, который можно перезаписать в вызываемой функции. А по ссылке — копия указателя. Объект один и тот же, никакого "копирования" объекта не происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 13:53 |
|
|
start [/forum/topic.php?fid=20&msg=38091297&tid=1405345]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 319ms |
total: | 487ms |
0 / 0 |