Здравствуйте, khimiki, Вы писали:
K>Здравствуйте, gandjustas, Вы писали:
G>>За 10к рублей — нивопрос. Забесплатно ниче больше 20 строк писать не буду.
K>Я на Qt и OpenGL более сложную программу написал всего лишь за 15 минут когда знакомился с возможностями этой бибдиотеки в области трёхмерной графики.
Поздравляю.
K>Боюсь, ты на кывт гораздо больше времени в день проводишь. Это не коммерческая программа чтобы за неё денег просить, это Hello World трёхмерной графики.
Я не за свое время хочу денег, а за удовлетворение твоих потребностей.
K>Так что слив засчитан. Ты и твой дот нет в луже по этому вопросу.
Мальчик, ты еще так мало в жизни знаешь.
Здравствуйте, khimiki, Вы писали:
K>Пришлёшь пример, я его сразу на CodeProject помещу и имя твоё прославлю, а если не пришлёшь, то ты болтун с большой буквы Б.
Здравствуйте, gandjustas, Вы писали:
G>Интересно, какие это задачи С++ требуют знание ассемблера?
Оптимизация. Хотя это не "задачи С++" в смысле языка, в языках типа Си/С++/Паскаль и т.п. очень легко понять, какой исходный код породил конкретный ассемблерный код, и соответственно подправить его либо вообще переписать на асме, благо все подобные языки поддерживают ассемблерные вставки.
Просто потому что С/С++ используется там, где выжимаются наносекунды и надо спускаться до уровня процессора, регистров, кешей и прочей радости.
PS Подозреваю, что настоящие гуру C# знают MSIL, а Java — байткод.
G>Я не за свое время хочу денег, а за удовлетворение твоих потребностей.
У меня нет потребности в твоём труде. Просто нужно было вывести тебя на чистую воду, чтобы все увидели что ты пустышка в области программирования и твои слова о том, что на С# можно работать с аппаратно ускоренной графикой — это просто пустой трёп.
Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, khimiki, Вы писали:
K>>Пришлёшь пример, я его сразу на CodeProject помещу и имя твоё прославлю, а если не пришлёшь, то ты болтун с большой буквы Б.
G>3 минуты в гугле и... http://www.codeproject.com/KB/openGL/sharpgl.aspx G>Начинай прославлять. Мое имя не надо, прославляй автора статьи.
G>Жду первых результатов через месяц, ссылка должна появиться в топе гугла. Или ты ты болтун с большой буквы Х
Ты просто чудовище, а не программист. Я не собираюсь использовать непонятно кем написанные библиотеки для разработки своих программ, я прошу тебя написать пример используя студию и библиотеку из коробки. А если ты этого не понимаешь, ты ты просто детсадовец или притворяешься им. Лично я такого программиста как начальник отдела разработки взашей бы прогнал на улицу.
Здравствуйте, jazzer, Вы писали:
J>PS Подозреваю, что настоящие гуру C# знают MSIL, а Java — байткод.
И даже не гуру, ибо msil (в теории оно зовётся cil, но всем пофиг) прост до безобразия — стековая машина, никаких регистров, автоматическая валидация всего что можно, включая балансировку стека.
Разбираться в результатах jit-а — этто нудятина, всё что выше — не сильно сложно.
Здравствуйте, Sinix, Вы писали:
S>Здравствуйте, jazzer, Вы писали:
J>>PS Подозреваю, что настоящие гуру C# знают MSIL, а Java — байткод. S>И даже не гуру, ибо msil (в теории оно зовётся cil, но всем пофиг) прост до безобразия — стековая машина, никаких регистров, автоматическая валидация всего что можно, включая балансировку стека.
S>Разбираться в результатах jit-а — этто нудятина, всё что выше — не сильно сложно.
Ну, я имею в виду, не просто знают, а понимают, как он получается из их кода и как им следует свой код поменять, чтоб получить нужный результат.
Кстати, в C# разрешены MSIL-вставки?
Хотя в языках со сборкой мусора погоня за скоростью в мелких вещах, когда в любой момент может начаться сборка мусора, выглядит не очень осмысленной...
Здравствуйте, jazzer, Вы писали:
J>Ну, я имею в виду, не просто знают, а понимают, как он получается из их кода и как им следует свой код поменять, чтоб получить нужный результат.
И я про то же
J>Кстати, в C# разрешены MSIL-вставки?
Штатно — нет, но можно добавить несколько отдельных файлов на msil (придётся чуть повозиться с правкой файла проекта).
J>Хотя в языках со сборкой мусора погоня за скоростью в мелких вещах, когда в любой момент может начаться сборка мусора, выглядит не очень осмысленной...
Здравствуйте, Sinix, Вы писали:
S>Просто il не даёт никаких особых преимуществ по скорости в сравнении с c#.
Он может дать скорость, когда компилятор делает не то. По крайней мере ,в С++ так — ты пишешь какой-то код, ожидая, что компилятор его определенным образом соптимизирует/раскидает по регистрам/упорядочит в памяти/во времени, а потом смотришь в дизассемблер — а там ужас какой-то.
В таких случаях приходится извращаться.
Не думаю, что C# такого не бывает и компилятор всегда генерит наилучший код из возможных, даже с JIT, так что по-хорошему, если стоит задача выжать максимум в рамках платформы, нужно и уметь читать сгенеренный код, и понимать, как и почему он такой получается, и как на него воздействовать.
Здравствуйте, jazzer, Вы писали:
J>Он может дать скорость, когда компилятор делает не то. По крайней мере ,в С++ так — ты пишешь какой-то код, ожидая, что компилятор его определенным образом соптимизирует/раскидает по регистрам/упорядочит в памяти/во времени, а потом смотришь в дизассемблер — а там ужас какой-то. J>В таких случаях приходится извращаться.
Для c# такого практически не бывает. il очень прост и компилятор шарпа не содержит в себе никакой магии. Раскладыванием по регистрам занимается jit, его не подтюнишь
Здравствуйте, khimiki, Вы писали:
K>Здравствуйте, gandjustas, Вы писали:
G>>Здравствуйте, khimiki, Вы писали:
K>>>Пришлёшь пример, я его сразу на CodeProject помещу и имя твоё прославлю, а если не пришлёшь, то ты болтун с большой буквы Б.
G>>3 минуты в гугле и... http://www.codeproject.com/KB/openGL/sharpgl.aspx G>>Начинай прославлять. Мое имя не надо, прославляй автора статьи.
G>>Жду первых результатов через месяц, ссылка должна появиться в топе гугла. Или ты ты болтун с большой буквы Х
K>Ты просто чудовище, а не программист.
Я не собираюсь использовать непонятно кем написанные библиотеки для разработки своих программ, я прошу тебя написать пример используя студию и библиотеку из коробки. А если ты этого не понимаешь, ты ты просто детсадовец или притворяешься им. Лично я такого программиста как начальник отдела разработки взашей бы прогнал на улицу.
Расслабься, я уже и начальником побывал, а теперь на себя работаю. И занимаюсь как раз тем, что использую "написанные неизвестно кем" программы\библиотеки, для решения задач заказчиков. Прибыльное знаешь ли дело, гораздо прибыльнее, чем писать что-то с нуля
Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, Sinix, Вы писали:
S>>Просто il не даёт никаких особых преимуществ по скорости в сравнении с c#. J>Он может дать скорость, когда компилятор делает не то. По крайней мере ,в С++ так — ты пишешь какой-то код, ожидая, что компилятор его определенным образом соптимизирует/раскидает по регистрам/упорядочит в памяти/во времени, а потом смотришь в дизассемблер — а там ужас какой-то. J>В таких случаях приходится извращаться.
Извращаешься-извращаешься, а потом оказывается что компилятор нагенерил довольно-таки оптимальный код, и врукопашную его не обгонишь. Имхо единственный реальный сценарий применения ассемблера — задействование векторных вычислений (mmx, sse), автоматом это пока ни один компилятор делать не умеет.
Но только причем тут C++? Можно написать такую библиотеку и задействовать её из управляемого кода. Вот например accelerator может генерить sse для параллельных вычислений.
J>Не думаю, что C# такого не бывает и компилятор всегда генерит наилучший код из возможных, даже с JIT, так что по-хорошему, если стоит задача выжать максимум в рамках платформы, нужно и уметь читать сгенеренный код, и понимать, как и почему он такой получается, и как на него воздействовать.
Начну с конца: воздействовать на генеренный машинный код нельзя, поэтому никого не парит почему он такой получается. В принципе jit вылизывают постоянно и на подавляющем большинстве сценариев он генерит хороший код. Если даже этот код не совсем оптимален, то его вылизывание даст проценты. Гораздо эффективнее заниматься оптимизацией работы с памятью и алгоритмической оптимизацией.
Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, jazzer, Вы писали:
J>>Здравствуйте, Sinix, Вы писали:
S>>>Просто il не даёт никаких особых преимуществ по скорости в сравнении с c#. J>>Он может дать скорость, когда компилятор делает не то. По крайней мере ,в С++ так — ты пишешь какой-то код, ожидая, что компилятор его определенным образом соптимизирует/раскидает по регистрам/упорядочит в памяти/во времени, а потом смотришь в дизассемблер — а там ужас какой-то. J>>В таких случаях приходится извращаться.
G>Извращаешься-извращаешься, а потом оказывается что компилятор нагенерил довольно-таки оптимальный код, и врукопашную его не обгонишь.
Если бы я не видел своими глазами плохой сгенеренный код, я бы, наверное, тебе поверил.
Плюс если ты вчитаешься в то, что я написал, то скилл не в том, чтобы писать на асме, а в том, чтобы его читать и понимать (т.е. понимать как то, что он делает, так и почему он такой получился), и чтобы изменять свой неасмовый код таким образом, чтоб получился правильный асм (например, переупорядочить поля структуры, повставлять руками дырки, так что структура хоть и распухнет, но будет быстрее работать, переупорядочить куски кода в функции, и т.п.).
G>Имхо единственный реальный сценарий применения ассемблера — задействование векторных вычислений (mmx, sse), автоматом это пока ни один компилятор делать не умеет.
Умеет. Автовекторизация называется. Но плохо. Только в примитивных случаях.
G>Гораздо эффективнее заниматься оптимизацией работы с памятью и алгоритмической оптимизацией.
Букварь я читал, не надо мне его цитировать.
P.S. А как можно заниматься оптимизацией работы с памятью в управляемых языках, когда доступа к собственно памяти нету? Или речь о С/С++?
Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, gandjustas, Вы писали:
G>>Здравствуйте, jazzer, Вы писали:
J>>>Здравствуйте, Sinix, Вы писали:
S>>>>Просто il не даёт никаких особых преимуществ по скорости в сравнении с c#. J>>>Он может дать скорость, когда компилятор делает не то. По крайней мере ,в С++ так — ты пишешь какой-то код, ожидая, что компилятор его определенным образом соптимизирует/раскидает по регистрам/упорядочит в памяти/во времени, а потом смотришь в дизассемблер — а там ужас какой-то. J>>>В таких случаях приходится извращаться.
G>>Извращаешься-извращаешься, а потом оказывается что компилятор нагенерил довольно-таки оптимальный код, и врукопашную его не обгонишь. J>Если бы я не видел своими глазами плохой сгенеренный код, я бы, наверное, тебе поверил.
Исключения бываю, но они не стоят того чтобы погружаться в ассемблерный код ради процентов прироста производительности.
J>Плюс если ты вчитаешься в то, что я написал, то скилл не в том, чтобы писать на асме, а в том, чтобы его читать и понимать (т.е. понимать как то, что он делает, так и почему он такой получился), и чтобы изменять свой неасмовый код таким образом, чтоб получился правильный асм (например, переупорядочить поля структуры, повставлять руками дырки, так что структура хоть и распухнет, но будет быстрее работать, переупорядочить куски кода в функции, и т.п.).
Нууу pragma pack помоему в любом учебнике есть и совсем без необходиомсти знать ассемблер.
G>>Имхо единственный реальный сценарий применения ассемблера — задействование векторных вычислений (mmx, sse), автоматом это пока ни один компилятор делать не умеет.
J>Умеет. Автовекторизация называется. Но плохо. Только в примитивных случаях.
"Плохо и в примитивных случаях" — считай нету.
J>P.S. А как можно заниматься оптимизацией работы с памятью в управляемых языках, когда доступа к собственно памяти нету?
Легко. Смотришь профайлером где много памяти выделяется и\или много циклов GC происходит, потом ищешь более подходящий алгоритм, который меньше объектов создавать будет, по вкусу: переводишь объекты в структуры или организуешь пулинг долгоживущих объектов. А может просто настройка латентности gc поможет. В особо критичных местах может в 2-3 раза быстродействия добавить.
Здравствуйте, gandjustas, Вы писали:
G>>>Извращаешься-извращаешься, а потом оказывается что компилятор нагенерил довольно-таки оптимальный код, и врукопашную его не обгонишь. J>>Если бы я не видел своими глазами плохой сгенеренный код, я бы, наверное, тебе поверил. G>Исключения бываю, но они не стоят того чтобы погружаться в ассемблерный код ради процентов прироста производительности.
Такое ощущение, что ты автор книг наподобие "С++ для чайников". Столько ненужных трюизмов и "слепых" советов!
G>Нууу pragma pack помоему в любом учебнике есть и совсем без необходиомсти знать ассемблер.
pragma pack может не всё.
G>"Плохо и в примитивных случаях" — считай нету.
Нет есть! Лично мне включение опции "/arch:SSE2" в майкрософтовском компиляторе ускорило программу раза в два. Ну и код я слегка подтюнинговал под это дело.
Здравствуйте, gandjustas, Вы писали:
G>>>Извращаешься-извращаешься, а потом оказывается что компилятор нагенерил довольно-таки оптимальный код, и врукопашную его не обгонишь. J>>Если бы я не видел своими глазами плохой сгенеренный код, я бы, наверное, тебе поверил. G>Исключения бываю, но они не стоят того чтобы погружаться в ассемблерный код ради процентов прироста производительности.
Ну, на том и порешим Большинство замечательно без этих процентов обходится, софта, критичного к скорости, вообще мало довольно-таки, это обычно из области "хорошо бы", а не "жизненно необходимо".
J>>Плюс если ты вчитаешься в то, что я написал, то скилл не в том, чтобы писать на асме, а в том, чтобы его читать и понимать (т.е. понимать как то, что он делает, так и почему он такой получился), и чтобы изменять свой неасмовый код таким образом, чтоб получился правильный асм (например, переупорядочить поля структуры, повставлять руками дырки, так что структура хоть и распухнет, но будет быстрее работать, переупорядочить куски кода в функции, и т.п.). G>Нууу pragma pack помоему в любом учебнике есть и совсем без необходиомсти знать ассемблер.
Вообще-то pragma pack обычно имеет ровно обратный эффект
Не говоря уже о том, что это крайне ограниченной применимости инструмент с довольно топорным действием
Ладно, вижу, ты не очень в теме, замнем. Те общие слова, что ты говорил, про алгоритмическую оптимизаци — они все правильные, конечно же. Но когда они все сделаны — остается только спуститься на уровень ассемблера.
Здравствуйте, jazzer, Вы писали:
J>Он может дать скорость, когда компилятор делает не то. По крайней мере ,в С++ так — ты пишешь какой-то код, ожидая, что компилятор его определенным образом соптимизирует/раскидает по регистрам/упорядочит в памяти/во времени, а потом смотришь в дизассемблер — а там ужас какой-то.
А можно увидеть реальный пример, в котором Вам удалось превзойти, допустим, Intel'овский оптимизатор ? Ну или даже стандартный VS2010, на худой конец ?
А то вот лично я неоднократно наблюдал кидание коллегами понтов на эту тему, но лишь только дело доходило до реального соревнования, то обычная Visual Studio влёгкую рвала любителей покодить на ассемблере на порядок Попытки с пятой некоторым удавалось приблизиться до разницы в десятки процентов, но не более.
Здравствуйте, snaphold, Вы писали:
S>Коли тут зашла речь про сравнение этих языков. Стало мне интересно. S>Что с фундаментальной точки зрения не сделать на C#, что сделаешь на C++.