powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Аналог switch, но более эффективный
25 сообщений из 115, страница 3 из 5
Аналог switch, но более эффективный
    #38960456
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предложенный мной способ предполагает что программа и вызываемая функция
придерживаются определенного логического интерфейса при котором expression для switch -
index для области area, содержащей таблицу переходов.
Компилятор не сможет так оптимизировать, потому что синтаксис исходного текста не несет в себе
информацию об expression более того, какого она типа.
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38960461
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Да ну ...
Ну так обрати внимания на ссылку приведенную ниже твоего post ..
По той ссылке написано то же самое что я сказал, только помимо этого приведены варианты реализации и маленьких наборов, которые оптимизируются по-другому.

В целом, любые попытки реализовать более эффективный switch на уровне исходного кода, а не компилятором, не приведут к чему кроме нечитабельного кода.
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38960464
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Предложенный мной способ

Приведите
1) код с switch,
2) эквивалентный код с вашим способом
3) замеры скорости

Пока этого всего нет и говорить не о чем.
Мое предсказание - никакие "способы" не будут быстрее встроенного switch.
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38960466
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyПо той ссылке написано то же самое что я сказал, только помимо этого приведены варианты реализации и маленьких наборов, которые оптимизируются по-другому.
Там идет речь об оптимизации дерева переходов ... ..., а в предложенном способе имеем один
array с ссылками и один goto.
Почувствуй разницу ...
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38960468
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012Почувствуй разницу ..
Не могу почувствовать пока не предоставлены
замеры скорости
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38960472
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyНе могу почувствовать пока не предоставлены
замеры скорости
Да ты прав.
"Шас спою" ...
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38960474
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно что в топике никто не обратил внимание на вероятности срабатывания кейсов.
Это особенно касается трансляторов.
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38960500
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonИнтересно что в топике никто не обратил внимание на вероятности срабатывания кейсов.
Ok!
В тесте switch значение expression будет выбираться с использованием random.
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38960518
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты наверное не понял мою мысль. При разработке синтаксических трансляторов
один кейс может срабатывать в 97% случаев, другой в 2% а все остальные кейсы
делят оставшися 1% (к примеру).

Поэтому задача "умной" оптимизации (если ты хочешь таковую получить) должна
базироваться на том что мы знаем гистограмму данных
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38960585
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не сдаюсь ...

C Programming: address of a label http://stackoverflow.com/questions/1777990/c-programming-address-of-a-label?rq=1

"... The C and C++ standards do not support this feature. However, the GNU Compiler Collection (GCC) includes a non-standard extension for doing this ..."

PS: "Но все таки она вертится" ...
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38960591
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир2012PS: Вот вспомнил о том какой ты труд приложил для достижения поставленной цели ...
http://www.sql.ru/forum/1149455-1/generator-prostyh-chisel-do-10-9-za-5-sek
Тому причина была хреновая погода, делать нечего, съездить на природу некуда ... вобщем в октябре-ноябре обращайся, буду бездельничать - поучавствую в любых бесполезных исследованиях. Чем мы хуже британских ученых?
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38960598
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TТому причина была хреновая погода,
Вообщем займусь ка VM под CentOS.
И вот в ней, то и проведу замеры под gcc.

PS: "Наши руки не для скуки ..."
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38961015
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил проверить известный факт о расположении условий по убыванию вероятности появления(по-моему о нём выше упомянул Марк). В данном коде пробовал менять case 31, но у меня получаются странные результаты. Потому маловероятно что они правдивые. Вечером на ноутбуке проверю. С точки зрения логики я придерживаюсь мнения о том, что есть смысл располагать кейсы в порядке убывания вероятности. Но вероятнее прав окажется Анатолий.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
#include <stdio.h>
#include <ctime>



int main()
{
	for (int count = 0; count < 10; ++count){
		int res = 0;
		unsigned time_s = clock();
		for (int i = 0; i < 1 << 30; ++i){
			int t = (i < 30) ? i : 31; //count values = 31
			switch (t)
			{
			case 31:
				res += 1;
				break;
			case 1:
				res += 1;
				break;
			case 2:
				res += 1;
				break;
			case 3:
				res += 1;
				break;
			case 4:
				res += 1;
				break;
			case 5:
				res += 1;
				break;
			case 6:
				res += 1;
				break;
			case 7:
				res += 1;
				break;
			case 8:
				res += 1;
				break;
			case 9:
				res += 1;
				break;
			case 10:
				res += 1;
				break;
			case 11:
				res += 1;
				break;
			case 12:
				res += 1;
				break;
			case 13:
				res += 1;
				break;
			case 14:
				res += 1;
				break;
			case 15:
				res += 1;
				break;
			case 16:
				res += 1;
				break;
			case 17:
				res += 1;
				break;
			case 18:
				res += 1;
				break;
			case 19:
				res += 1;
				break;
			case 20:
				res += 1;
				break;
			case 21:
				res += 1;
				break;
			case 22:
				res += 1;
				break;
			case 23:
				res += 1;
				break;
			case 24:
				res += 1;
				break;
			case 25:
				res += 1;
				break;
			case 26:
				res += 1;
				break;
			case 27:
				res += 1;
				break;
			case 28:
				res += 1;
				break;
			case 29:
				res += 1;
			case 30:
				res += 1;
				break;
			}
		}
		unsigned time_e = clock();
		printf("count = %i res = %i time = %i\n", count, res, time_e - time_s);//res must be 2^30 = 1.073.741.824
		res = 0;
	}
	return 0;
}



Владимир2012И так программа в качестве expression должна передавать номер индекса к какому-либо array, содержащему адреса точек
перехода для оператора goto.
Все!

Владимир2012, приведите пожалуйста пример предложенного вами способа.
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38961016
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
бинарный инкремент в коде выше лучше заменить на унарную операцию ++.
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38961017
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryбинарный инкремент в коде выше лучше заменить на унарную операцию ++.
Это еще более смешное утверждение чем тема данного топика
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38961018
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySashaMercuryбинарный инкремент в коде выше лучше заменить на унарную операцию ++.
Это еще более смешное утверждение чем тема данного топика

Разве
Код: plaintext
1.
i+=1


не медленне
чем
Код: plaintext
1.
i++

?

И это не утверждение, а пожелание для минимизации побочного времени
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38961019
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercuryРазве
Код: plaintext
1.
i+=1



не медленне
чем
Код: plaintext
1.
i++


?
Нет конечно. В стандарте языка (как С так и С++) нет требований, чтобы одно было быстрее другого. Поэтому фактическая скорость зависит от того как компилятор реализует их ))
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38961021
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно. Совершенно точно помню что мне говорили о том, что унарный оператор выполняется быстрее.
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38961022
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну да ладно. Это было только предложение и не относится к теме.
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38961055
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskySashaMercuryРазве
Код: plaintext
1.
i+=1



не медленне
чем
Код: plaintext
1.
i++


?
Нет конечно. В стандарте языка (как С так и С++) нет требований, чтобы одно было быстрее другого. Поэтому фактическая скорость зависит от того как компилятор реализует их ))

а реализуются они почти наверняка одинаково.
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38961057
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще, да, Анатолий прав, тема смешна до жути.
Производительность приложения вообще очень редко определяется скоростью работы одного оператора.
Важнее в тысячу раз применяемые алгоритмы.
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38961061
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivAnatoly Moskovskyпропущено...

Нет конечно. В стандарте языка (как С так и С++) нет требований, чтобы одно было быстрее другого. Поэтому фактическая скорость зависит от того как компилятор реализует их ))

а реализуются они почти наверняка одинаково.
В MSVC по разному. Недавно смотрели: ++ компилируется как INC, а +=1 как ADD.
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38961132
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TMasterZivпропущено...


а реализуются они почти наверняка одинаково.
В MSVC по разному. Недавно смотрели: ++ компилируется как INC, а +=1 как ADD.А как смотрели?
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38961139
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_SlaDima Tпропущено...

В MSVC по разному. Недавно смотрели: ++ компилируется как INC, а +=1 как ADD.А как смотрели?
В MSVC отладчике. Брэйкпоинт и потом правая кнопка "Goto disassembly"
Вот тот пост 17428235
...
Рейтинг: 0 / 0
Аналог switch, но более эффективный
    #38961154
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tm_Slaпропущено...
А как смотрели?
В MSVC отладчике. Брэйкпоинт и потом правая кнопка "Goto disassembly"
Вот тот пост 17428235 не сильно я встроенным дизассемблерам доверяю, IDA на exe понадежнее будет
...
Рейтинг: 0 / 0
25 сообщений из 115, страница 3 из 5
Форумы / C++ [игнор отключен] [закрыт для гостей] / Аналог switch, но более эффективный
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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