Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
 Оптимизация циклов в Caché Object Script  [new]
Шваров Евгений
Member

Откуда:
Сообщений: 849
Привет!
Смотрите какой пост Тимоти Левитт про оптимизацию for циклов работающих с $piece: читать.

Помоему очень даже.
14 май 16, 17:42    [19173180]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация циклов в Caché Object Script  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
Шваров Евгений
Смотрите какой пост <..>
Смотрите материалы прошлых лет: 10143911, 7038333, 9141885.
А вариант Александра 7039591 так пока и не был там предложен.
14 май 16, 18:29    [19173283]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация циклов в Cach&#233; Object Script  [new]
ну я
Member

Откуда: Stalingrad
Сообщений: 1181
Шваров Евгений,

Там в каментах приводится код с $find / $extract, непонятно почему оно должно быть slow
init()
 
str,i
 
i=1:1:100 s $p(str,",",i)="12345678901234567890"
 
str
time1 ; k  d time1^timeofpiece
 
string string=$$init()
 
time time=$zh
 n 
i,j,piece
 
j=1:1:10000 d
 
For i=1:1:$Length(string,","d
 
. . Set piece $Piece(string,",",i)
 
w $zh-time,!
 
q
time2 ; k  d time2^timeofpiece
 
string string=$$init()
 
time time=$zh
 n 
i,j,piece,pos1,pos2,pos3
 
j=1:1:10000 d
 
pos1=0,pos2=0 f  s pos3=$f(string,",",pos1d  q:'pos3
 
. . pos3=0 pos2=$l(string)+2
 . . 
e  s pos2=pos3
 
. . piece=$e(string,pos1,pos2-2) pos1=pos2
 
w $zh-time,!
 
q
У меня вариант с $f/$e быстрее чем $l/$p примерно в 12 раз.
14 май 16, 18:31    [19173289]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация циклов в Cach&#233; Object Script  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
ну я,

Зачем использовать устаревший синтаксис?
У меня (тестировал на 2016.3) разница с ним в ~8 раз, а вот с современным синтаксисом - тоже в ~12 раз.
+ timeofpiece.mac с новым синтаксисом
main() public {
  
try {
    
old=$system.Process.Undefined(2)
    
N=10000
    
string=$$init(100)
    
t1=$$time1(N,.string)
    
t2=$$time2(N,.string)
    
t1,!,t2,!,t1/t2,!
    
  
}catch(ex){
    
"Error: ",ex.DisplayString(),!
  
}
  
d $system.Process.Undefined(old)
}

init(N) {
  
i=1:1:s $p(str,",",i)="12345678901234567890"
  
str
}

time1(N,&string) {
  
time=$zh
  f 
j=1:1:i=1:1:$l(string,","piece $p(string,",",i)
  
q $zh-time
}

time2(N,&string) {
  
time=$zh
  f 
j=1:1:{
    
pos1=0,pos2=0
    
do {
      
pos3=$f(string,",",pos1)
      
pos3=0 {
        
pos2=$l(string)+2
      
else {
        
pos2=pos3
      
}
      
piece=$e(string,pos1,pos2-2), pos1=pos2
    
while(pos3)
  
}
  
q $zh-time
}
14 май 16, 21:31    [19173734]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация циклов в Cach&#233; Object Script  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13155
servit
Зачем использовать устаревший синтаксис?

Чтобы легче было переходить на другой М-вариант языка...
16 май 16, 08:16    [19177187]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация циклов в Cach&#233; Object Script  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
krvsa
Чтобы легче было переходить на другой М-вариант языка...
другой М-вариант языка = другой продукт со всеми вытекающими последствиями оптимизациями.

Если сравнивалась скорость не на Caché, а например на GT.M или MiniM, то наверное стоит это упомянуть.
16 май 16, 08:44    [19177226]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация циклов в Cach&#233; Object Script  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
Шваров Евгений,
servit
А вариант Александра 7039591 так пока и не был там предложен.
Спасибо, теперь предложен. Только стоило упомянуть, что это касается случая, когда в цикле используется счётчик.
Но судя по коду Тимоти, у него цикл холостой, поэтому вряд ли предложенная оптимизация "выстрелит".

Но за ссылку на наш форум - отдельная благодарность.
Ради такого дела, специально для гостей из-за рубежа раскрасил код в старом топике.

PS: может стоит ещё им там ссылку на https://translate.yandex.ru/ предложить?
16 май 16, 08:53    [19177245]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация циклов в Cach&#233; Object Script  [new]
krvsa
Member

Откуда: г Волжский
Сообщений: 13155
servit
другой М-вариант языка = другой продукт со всеми вытекающими последствиями оптимизациями.

Твоими бы устами да меда хлебать!
16 май 16, 08:54    [19177247]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация циклов в Cach&#233; Object Script  [new]
Шваров Евгений
Member

Откуда:
Сообщений: 849
servit
Шваров Евгений,
servit
А вариант Александра 7039591 так пока и не был там предложен.
Спасибо, теперь предложен. Только стоило упомянуть, что это касается случая, когда в цикле используется счётчик.
Но судя по коду Тимоти, у него цикл холостой, поэтому вряд ли предложенная оптимизация "выстрелит".

Но за ссылку на наш форум - отдельная благодарность.
Ради такого дела, специально для гостей из-за рубежа раскрасил код в старом топике.

PS: может стоит ещё им там ссылку на https://translate.yandex.ru/ предложить?

Предложите, конечно)
Я за взаимную коммуникацию!

Т.е. while теперь быстрее for без параметров?
17 май 16, 00:30    [19181437]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация циклов в Cach&#233; Object Script  [new]
Шваров Евгений
Member

Откуда:
Сообщений: 849
Шваров Евгений
Т.е. while теперь быстрее for без параметров?

Я имел ввиду вот эту сентенцию:
Из строки в массив(COS)
17 май 16, 00:35    [19181440]     Ответить | Цитировать Сообщить модератору
 Re: Оптимизация циклов в Cach&#233; Object Script  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
Шваров Евгений
Шваров Евгений
Т.е. while теперь быстрее for без параметров?

Я имел ввиду вот эту сентенцию:
Из строки в массив(COS)
Где об этом там написано?
Результат зависит от того что и как сравнивать. Например сразу за этой "сентенцией" идут тесты Александра и Turk:
>h=$zh,i=1 while($i(i)<=1000000){}  "w: ",$zh-h
>h=$zh,i=1 q:($i(i)>1000000) }  "f1: ",$zh-h
>h=$zh f i=1:1:1000000 {} "f2: ",$zh-h
, которые наглядно всё показывают.
Шваров Евгений
Предложите, конечно)
Я за взаимную коммуникацию!
Я на других ресурсах теперь только в качестве читателя.
Мне с лихвой хватило хабра.
17 май 16, 08:01    [19181634]     Ответить | Цитировать Сообщить модератору
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить