Re[14]: CIL switch и сопоставление с образцом
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.09.10 15:48
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

H>>Что-то я сомневаюсь в том, что C# компилятор производит оптимизацию №2.

H>>На каком количестве разреженных вхождений бинарный поиск будет в среднем быстрее линейного?

ВВ>
ВВ>            switch (x)
ВВ>            {
ВВ>                case 0: x += 1; break;
ВВ>                case 5: x += 1; break;
ВВ>                case 100: x += 1; break;
ВВ>                case 200: x += 1; break;
...
ВВ>


А можно объяснить как приведенный код отвечает на поставленный вопрос?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: CIL switch и сопоставление с образцом
От: Воронков Василий Россия  
Дата: 15.09.10 18:59
Оценка:
Здравствуйте, VladD2, Вы писали:

ВВ>>
ВВ>>            switch (x)
ВВ>>            {
ВВ>>                case 0: x += 1; break;
ВВ>>                case 5: x += 1; break;
ВВ>>                case 100: x += 1; break;
ВВ>>                case 200: x += 1; break;
VD>...
ВВ>>


VD>А можно объяснить как приведенный код отвечает на поставленный вопрос?



Данный код отвечает на вопрос:
H>>>Что-то я сомневаюсь в том, что C# компилятор производит оптимизацию №2.
Re[13]: CIL switch и сопоставление с образцом
От: Воронков Василий Россия  
Дата: 16.09.10 06:41
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Подумай сам. Глупо ведь на основании синтетических тестов вводить оптимизации которые замедляют реальные приложения?


А какой прирост (в процентах) скорости работы реального приложения в виде компилятора дала реализация Switch?
Re[14]: CIL switch и сопоставление с образцом
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.09.10 18:36
Оценка: 1 (1)
Здравствуйте, Воронков Василий, Вы писали:

ВВ>А какой прирост (в процентах) скорости работы реального приложения в виде компилятора дала реализация Switch?


В релизе при константе 12 ~ +5 секунд на двух минутах. При константе 3 ~ -5 секунд.

Короче незначительный.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: CIL switch и сопоставление с образцом
От: hardcase Пират http://nemerle.org
Дата: 16.09.10 18:57
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Здравствуйте, VladD2, Вы писали:


VD>>Подумай сам. Глупо ведь на основании синтетических тестов вводить оптимизации которые замедляют реальные приложения?


ВВ>А какой прирост (в процентах) скорости работы реального приложения в виде компилятора дала реализация Switch?


В процентах не считал. Но разница в несколько секунд сборки самого себя.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[15]: CIL switch и сопоставление с образцом
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.09.10 22:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В релизе при константе 12 ~ +5 секунд на двух минутах. При константе 3 ~ -5 секунд.

VD>Короче незначительный.

Новые данные. При компиляции релиза скорость версии со свитчем выше на 7 сек.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: CIL switch и сопоставление с образцом
От: hardcase Пират http://nemerle.org
Дата: 17.09.10 09:24
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Кстати, у меня тут была одна идея... Вместо использования виртуального метода можно в каждый вариант (в базовый тип) добавлять поле типа int (или даже byte) и инициализировать его для каждого своим значением, и проверять потом именно его.


VD>Это немного увеличит объем памяти занимаемый вариантами и потребует лишний инструкции при создании их экземпляров, но возможно это увеличит скорость ПМ.


Попробовал — стало медленнее (заменил виртуальный вызов обращением к полю _N_VariantCode).
Патч можно забрать тут.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: CIL switch и сопоставление с образцом
От: catbert  
Дата: 17.09.10 11:43
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Попробовал — стало медленнее (заменил виртуальный вызов обращением к полю _N_VariantCode).

H>Патч можно забрать тут.

То есть увеличение потребления памяти на один вариант влияет на производительность сильнее устранения виртуального вызова на один match?
Это хороший урок... значит есть смысл оптимизировать в компиляторе использование памяти.
Re[5]: CIL switch и сопоставление с образцом
От: hardcase Пират http://nemerle.org
Дата: 17.09.10 11:46
Оценка:
Здравствуйте, catbert, Вы писали:

C>Здравствуйте, hardcase, Вы писали:


H>>Попробовал — стало медленнее (заменил виртуальный вызов обращением к полю _N_VariantCode).

H>>Патч можно забрать тут.

C>То есть увеличение потребления памяти на один вариант влияет на производительность сильнее устранения виртуального вызова на один match?

C>Это хороший урок... значит есть смысл оптимизировать в компиляторе использование памяти.

Ну, я не исключаю что у меня просто руки кривые.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: CIL switch и сопоставление с образцом
От: catbert  
Дата: 17.09.10 11:51
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Ну, я не исключаю что у меня просто руки кривые.


Ну, вроде бы в патче ляпов не видно... единственное, может быть прокол в самом тестировании... ты одинаковые версии кода компилировал для измерения производительности?
Re[5]: CIL switch и сопоставление с образцом
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.09.10 19:43
Оценка:
Здравствуйте, catbert, Вы писали:

C>То есть увеличение потребления памяти на один вариант влияет на производительность сильнее устранения виртуального вызова на один match?

C>Это хороший урок... значит есть смысл оптимизировать в компиляторе использование памяти.

Это ничего не значит. Там факторов выше крыши.

Скажем там есть статический вызов который тоже нужно устранить. Без него рассклд может быть совсем другим.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.