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+ Для ин = 0 По размер - 1 Цикл
30+ х[ин] = (х[ин] + а) * б - (х[ин] + ц) * д + (х[ин] + е) * ф -
31+ (х[ин] + г) * ш + (х[ин] + ж) * к - (х[ин] + л) * м +
32+ (х[ин] + о) * п - (х[ин] + ку) * р + (х[ин] + с) * т -
33+ (х[ин] + ю) * в + (х[ин] + вв) * у;
34+ КонецЦикла ;
35+ КонецПроцедуры
36+
37+ Процедура триадаСредняя (размер , а , б , ц , д , е , ф , х )
38+ Для ин = 0 По размер - 1 Цикл
39+ х[ин] = (х[ин] + а) * б - (х[ин] + ц) * д + (х[ин] + е) * ф;
40+ КонецЦикла ;
41+ КонецПроцедуры
42+
43+ Процедура триада (размер , а , б , х )
44+ Для ин = 0 По размер - 1 Цикл
45+ х[ин] = (х[ин] + а) * б;
46+ КонецЦикла ;
47+ КонецПроцедуры
48+
49+ Процедура триадаКонстОгромная (размер , х )
50+ Для ин = 0 По размер - 1 Цикл
51+ х[ин] = (х[ин] + аЗнач) * бЗнач - (х[ин] + цЗнач) * дЗнач + (х[ин] + еЗнач) * фЗнач -
52+ (х[ин] + гЗнач) * шЗнач + (х[ин] + жЗнач) * кЗнач - (х[ин] + лЗнач) * мЗнач +
53+ (х[ин] + оЗнач) * пЗнач - (х[ин] + куЗнач) * рЗнач + (х[ин] + сЗнач) * тЗнач -
54+ (х[ин] + юЗнач) * вЗнач + (х[ин] + ввЗнач) * уЗнач;
55+ КонецЦикла ;
56+ КонецПроцедуры
57+
58+ Процедура триадаКонстСтредняя (размер , х )
59+ Для ин = 0 По размер - 1 Цикл
60+ х[ин] = (х[ин] + аЗнач) * бЗнач - (х[ин] + цЗнач) * дЗнач + (х[ин] + еЗнач) * фЗнач;
61+ КонецЦикла ;
62+ КонецПроцедуры
63+
64+ Процедура триадаКонст (размер , х )
65+ Для ин = 0 По размер - 1 Цикл
66+ х[ин] = (х[ин] + аЗнач) * бЗнач;
67+ КонецЦикла ;
68+ КонецПроцедуры
69+
70+ Функция получитьОп (часть )
71+ Если часть = 0 Тогда
72+ Возврат 2 ;
73+ ИначеЕсли часть = 1 Тогда
74+ Возврат 8 ;
75+ ИначеЕсли часть = 2 Тогда
76+ Возврат 32 ;
77+ Иначе
78+ Возврат 0 ;
79+ КонецЕсли ;
80+ КонецФункции
81+
82+ Процедура иницХЦпу (value , хЦпу )
83+ размер = хЦпу.Количество() - 1 ;
84+ Для i = 0 По размер Цикл
85+ хЦпу[i] = value;
86+ КонецЦикла ;
87+ КонецПроцедуры
88+
89+ Функция проверить (хЦпу , слов , новДанные )
90+ ок1 = Истина ;
91+ первый = хЦпу[0 ];
92+
93+ Если первый = новДанные Тогда
94+ ок1 = Ложь ;
95+ КонецЕсли ;
96+
97+ Для i = 0 По слов - 1 Цикл
98+ Если первый <> хЦпу[i] Тогда
99+ ок1 = Ложь ;
100+ КонецЕсли ;
101+ КонецЦикла ;
102+
103+ Возврат ок1;
104+ КонецФункции
105+
106+ Функция запуститьТесты (слов , повторы , смещение , часть , хЦпу )
107+ секунд = ТекущаяУниверсальнаяДатаВМиллисекундах () / 1000.0 ;
108+ сл = слов;
109+
110+ хцп = Новый Массив;
111+ Для ин = смещение * сл По хЦпу.Количество() - 1 Цикл
112+ хцп.Добавить(хЦпу[ин]);
113+ КонецЦикла ;
114+
115+ Для ин = 0 По повторы - 1 Цикл
116+ Если часть = 0 Тогда
117+ триада(сл, аЗнач, хЗнач, хцп);
118+ ИначеЕсли часть = 1 Тогда
119+ триадаСредняя(сл, аЗнач, бЗнач, цЗнач, дЗнач, еЗнач, фЗнач, хцп);
120+ ИначеЕсли часть = 2 Тогда
121+ триадаОгромная(сл, аЗнач, бЗнач, цЗнач, дЗнач, еЗнач, фЗнач, гЗнач, шЗнач,
122+ жЗнач, кЗнач, лЗнач, мЗнач, оЗнач, пЗнач, куЗнач,
123+ рЗнач, сЗнач, тЗнач, юЗнач, вЗнач, ввЗнач, уЗнач, хцп);
124+ КонецЕсли ;
125+ КонецЦикла ;
126+ хЦпу = хцп;
127+ Возврат ТекущаяУниверсальнаяДатаВМиллисекундах () / 1000.0 - секунд;
128+ КонецФункции
129+
130+ Процедура запуститьВсё (числоПовторов , начСлов , частьС , калибровать , заглавие , заголовок )
131+ размерХ = 0 ;
132+ мфлопс = 0.0 ;
133+ тестыОк = Ложь ;
134+ секунд = ТекущаяУниверсальнаяДатаВМиллисекундах () / 1000.0 ;
135+ начПовт = числоПовторов;
136+
137+ Сообщить ("##############################################" );
138+ Сообщить ("" );
139+ Сообщить (СтрШаблон (" %1, %2 Потоков, %3" , заглавие, 1 , 1 ));
140+ Сообщить ("" );
141+ Сообщить (" Тест 4 Байт Опер/ Повторов Секунд МФлопс Первые Всё" );
142+ Сообщить (" Слов Слово всего Результаты Ок" );
143+
144+
145+ Для часть = 0 По частьС - 1 Цикл
146+ слов = начСлов;
147+ повторы = начПовт;
148+ Для p = 0 По частьС - 1 Цикл
149+ размерХ = слов * 4 ;
150+
151+ // Allocate arrays for host CPU
152+ хЦпу = Новый Массив(размерХ);
153+ Для Инд = 0 По хЦпу.Количество() - 1 Цикл
154+ хЦпу[Инд] = 0 ;
155+ КонецЦикла ;
156+
157+ Если калибровать Тогда
158+ конецСекунд = запуститьТесты(слов, повторы, новДанные, часть, хЦпу);
159+ повторы = Цел (повторы * 15.0 / конецСекунд);
160+ начПовт = повторы;
161+
162+ калибровать = Ложь
163+ КонецЕсли ;
164+
165+ тестСекунд = запуститьТесты(слов, повторы, новДанные, часть, хЦпу);
166+ оп = получитьОп(часть);
167+
168+ фмопс = слов * оп;
169+ мфлопс = повторы * фмопс / 1000000.0 / тестСекунд;
170+ секунд = секунд + тестСекунд;
171+
172+ // Print результатs
173+ результат = СтрШаблон ("%1 %2 %3 %4 %5 %6" , ДополнитьСтроку(заголовок, 15 , " " ), ДополнитьСтроку(слов, 9 , " " ),
174+ ДополнитьСтроку(оп, 6 , " " ), ДополнитьСтроку(повторы, 10 , " " ),
175+ ДополнитьСтроку(Формат (тестСекунд, "ЧЦ=10; ЧДЦ=6" ), 10 , " " ), ДополнитьСтроку(Формат (мфлопс, "ЧЦ=7; ЧДЦ=1" ), 8 , " " ));
176+ //fmt.Printf("%15s %9d %5d %8d %10.6f %8.0f ", заголовок, слов, оп, повторы, тестСекунд.Seconds(), мфлопс)
177+
178+ isTestOk = Истина ;
179+ isTestOk = проверить(хЦпу, слов, новДанные);
180+
181+ слов = слов * 10 ;
182+ повторы = Цел (повторы / 10 );
183+
184+ Если повторы < 1 Тогда
185+ повторы = 1 ;
186+ КонецЕсли ;
187+
188+ Если isTestOk Тогда
189+ Сообщить (СтрШаблон ("%1%2 Да" , результат, ДополнитьСтроку(Формат (хЦпу[0 ], "ЧЦ=10; ЧДЦ=6" ), 15 , " " )));
190+ Иначе
191+ Сообщить ("%1 См лог Нет" , результат);
192+ КонецЕсли ;
193+ КонецЦикла ;
194+
195+ Сообщить ("" );
196+ КонецЦикла ;
197+
198+ Если НЕ isTestOk Тогда
199+ Сообщить (" ERROR - At least первый first результат of 0.999999 - no calculations?" );
200+ КонецЕсли ;
201+ КонецПроцедуры
202+
203+ Функция ДополнитьСтроку (Знач Значение , Знач ДлинаСтроки , Знач Символ = "0" , Знач Режим = "Слева" ) Экспорт
204+ // Длина символа не должна превышать единицы.
205+ Символ = Лев (Символ, 1 );
206+ // Удаляем крайние пробелы слева и справа строки.
207+ Значение = СокрЛП (Значение);
208+ КоличествоСимволовНадоДобавить = ДлинаСтроки - СтрДлина (Значение);
209+ Если КоличествоСимволовНадоДобавить > 0 Тогда
210+ СтрокаДляДобавления = СформироватьСтрокуСимволов(Символ, КоличествоСимволовНадоДобавить);
211+ Если ВРег (Режим) = "СЛЕВА" Тогда
212+ Значение = СтрокаДляДобавления + Значение;
213+ ИначеЕсли ВРег (Режим) = "СПРАВА" Тогда
214+ Значение = Значение + СтрокаДляДобавления;
215+ КонецЕсли ; КонецЕсли ; Возврат Значение;
216+ КонецФункции
217+
218+ Функция СформироватьСтрокуСимволов (Знач Символ , Знач ДлинаСтроки ) Экспорт
219+ Результат = "" ;
220+ Для Счетчик = 1 По ДлинаСтроки Цикл
221+ Результат = Результат + Символ;
222+ КонецЦикла ;
223+ Возврат Результат;
224+ КонецФункции
225+
226+ хЗнач = 0.999950 ;
227+ аЗнач = 0.000020 ;
228+ бЗнач = 0.999980 ;
229+ цЗнач = 0.000011 ;
230+ дЗнач = 1.000011 ;
231+ еЗнач = 0.000012 ;
232+ фЗнач = 0.999992 ;
233+ гЗнач = 0.000013 ;
234+ шЗнач = 1.000013 ;
235+ жЗнач = 0.000014 ;
236+ кЗнач = 0.999994 ;
237+ лЗнач = 0.000015 ;
238+ мЗнач = 1.000015 ;
239+ оЗнач = 0.000016 ;
240+ пЗнач = 0.999996 ;
241+ куЗнач = 0.000017 ;
242+ рЗнач = 1.000017 ;
243+ сЗнач = 0.000018 ;
244+ тЗнач = 1.000018 ;
245+ юЗнач = 0.000019 ;
246+ вЗнач = 1.000019 ;
247+ ввЗнач = 0.000021 ;
248+ уЗнач = 1.000021 ;
249+
250+ новДанные = 0.999999 ;
251+
252+ заголовок = "Данные вх & вых " ;
253+ заголовокConst = "Данные конс " ;
254+ заглавие = "МП МФлопс Бенчмарк" ;
255+
256+ числоСлов = 10240 ; // E Number of слов in arrays
257+ числоПовторов = 500 ; // R Number of repeat passes
258+
259+ запуститьВсё(числоПовторов, числоСлов, 3 , Ложь , заглавие, заголовок);
0 commit comments