powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Что же главное в Cache?
25 сообщений из 418, страница 5 из 17
Что же главное в Cache?
    #35621977
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Maslov
Код: plaintext
1.
2.
3.
4.
5.
CRAI52>d Parall2^mawr( 1 )
 1 . 531951 

CRAI52>d Parall2^mawr( 2 )
 2 . 208054 


С другой стороны, возможно, выборка простых чисел <1 000 000 слишком мала...
Код: plaintext
1.
2.
Parall2(Count,JobCount) n (Count,JobCount) s h1=$zh k ^l,^c,^j
................

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
USER>d Parall2^Simple( 1000000 , 1 )
 1 . 4571 
 
USER>d Parall2^Simple( 1000000 , 2 )
 1 . 606018 

USER>d Parall2^Simple( 10000000 , 1 )
 16 . 341748  

USER>d Parall2^Simple( 10000000 , 2 )
 15 . 2468 

USER>d Parall2^Simple( 20000000 , 1 )
 34 . 233212 
 
USER>d Parall2^Simple( 20000000 , 2 )
 30 . 628557 
То есть на большем количестве параллельный алгоритм уже выигрывает.

Вечером с http://iron.intersys.com/wrc/Distribution.csp скачаю cache-2008.2.0.526-win.exe
и тогда завтра попробую на ней погонять примеры.
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35622159
ceshka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaWr,
можно вопрос: что нужно сделать, чтоб получить сюда http://iron.intersys.com/wrc/Distribution.csp доступ?
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35622196
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ceshkaMaWr,
можно вопрос: что нужно сделать, чтоб получить сюда http://iron.intersys.com/wrc/Distribution.csp доступ?
Это лучше узнать у представителей InterSystems :)
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35622399
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот решето Аткина на конфигурации тоже хорошо распараллеливается:
Код: 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.
Atkin(Count,JobCount)	;
	n (Count,JobCount) s h1=$zh k ^l,^j,^c s sc=$p(Count** 0 . 5 ,".")
	if JobCount= 1  {
		d ja1(Count,sc),ja2(Count,sc)
	} else {
		s ^j=JobCount f i= 1 : 1 :JobCount- 1  j ja1p(Count,sc)
		d ja1p(Count,sc) f  q:'^j  h 0.1
		s ^j=JobCount,^c=4 f i=1:1:JobCount-1 j ja2p(Count,sc)
		d ja2p(Count,sc) f  q:'^j  h  0 . 1 
	}		
	s ^l( 2 )= 1 ,^l( 3 )= 1 
	s i="" f  s i=$o(^l(i)) q:i=""  i '^l(i) k ^l(i)
	w $zh-h1,!
ja1p(Count,sc) n (Count,sc) s x2=0,q=0
	f  s i=$i(^c) q:i>sc  s x2=x2+(2*i-1),y2=0 f j=1:1:sc s y2=y2+(2*j-1) d
	.s n=4*x2+y2 i (n'>Count),(n# 12 = 1 )!(n# 12 = 5 ) s ^l(n)='$g(^l(n))
	.s n=n-x2 i (n'>Count),(n# 12 = 7 ) s ^l(n)='$g(^l(n))
	.s n=n-(2*y2) i (i>j),(n'>Count),(n# 12 = 11 ) s ^l(n)='$g(^l(n))
	i $i(^j,-1) q
ja2p(Count,sc) n (Count,sc) f  s i=$i(^c) q:i>sc  i $g(^l(i)) s n=i*i f j=n:n:Count k ^l(j)
	i $i(^j,-1) q
ja1(Count,sc) n (Count,sc) s x2=0 f i=1:1:sc s x2=x2+(2*i-1),y2=0 f j=1:1:sc s y2=y2+(2*j-1) d
	.s n=4*x2+y2 i (n'>Count),(n# 12 = 1 )!(n# 12 = 5 ) s ^l(n)='$g(^l(n))
	.s n=n-x2 i (n'>Count),(n# 12 = 7 ) s ^l(n)='$g(^l(n))
	.s n=n-(2*y2) i (i>j),(n'>Count),(n# 12 = 11 ) s ^l(n)='$g(^l(n))
	q
ja2(Count,sc) n (Count,sc) f i= 5 : 1 :sc i $g(^l(i)) s n=i*i f j=n:n:Count k ^l(j)
	q

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
USER>d Atkin^Simple( 1000000 , 1 )
 1 . 296719 
 
USER>d Atkin^Simple( 1000000 , 2 )
 1 . 232715 
 
USER>d Atkin^Simple( 10000000 , 1 )
 16 . 915967 
 
USER>d Atkin^Simple( 10000000 , 2 )
 12 . 299662 
 
USER>d Atkin^Simple( 20000000 , 1 )
 35 . 726587 
 
USER>d Atkin^Simple( 20000000 , 2 )
 25 . 550804 

А если убрать
Код: plaintext
s i="" f  s i=$o(^l(i)) q:i=""  i '^l(i) k ^l(i)
будет еще быстрее, но в глобале будут наряду с простыми числами (^l(n)=1) будут присутствовать составные (^l(n)=0)
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35622416
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
упс... Читать так:

Код: plaintext
1.
2.
3.
..........
	w $zh-h1,! q
ja1p(Count,sc) n (Count,sc) s x2= 0 
..........
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35623864
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Намудрил я с Аткином - параллельный режим работал неверно. Вот правильный вариант:
Код: 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.
Atkin(Count,JobCount)	;
	n (Count,JobCount,n) s h1=$zh k ^l,^j,^c s sc=$p(Count** 0 . 5 ,".")
	if JobCount= 1  {
		d ja1(Count,sc),ja2(Count,sc)
	} else {
		s ^j=JobCount f i= 1 : 1 :JobCount- 1  j ja1p(Count,sc)
		d ja1p(Count,sc) f  q:'^j  h 0.1
		s ^j=JobCount,^c=4 f i=1:1:JobCount-1 j ja2p(Count,sc)
		d ja2p(Count,sc) f  q:'^j  h  0 . 1 
	}
	s ^l( 2 )= 1 ,^l( 3 )= 1 
	s i="" f  s i=$o(^l(i)) q:i=""  i '^l(i) k ^l(i)
	w $zh-h1,! q
ja1p(Count,sc) n (Count,sc) f  s i=$i(^c) q:i>sc  s x2=i*i f j=1:1:sc s y2=j*j d
	.s n=4*x2+y2 i (n'>Count),(n# 12 = 1 )!(n# 12 = 5 ) l +^l(n) s ^l(n)='$g(^l(n)) l -^l(n)
	.s n=n-x2 i (n'>Count),(n# 12 = 7 ) l +^l(n) s ^l(n)='$g(^l(n)) l -^l(n)
	.s n=n-(2*y2) i (i>j),(n'>Count),(n# 12 = 11 ) l +^l(n) s ^l(n)='$g(^l(n)) l -^l(n)
	i $i(^j,-1) q
ja2p(Count,sc) n (Count,sc) f  s i=$i(^c) q:i>sc  i $g(^l(i)) s n=i*i f j=n:n:Count k ^l(j)
	i $i(^j,-1) q
ja1(Count,sc) n (Count,sc) f i=1:1:sc s x2=i*i f j=1:1:sc s y2=j*j d
	.s n=4*x2+y2 i (n'>Count),(n# 12 = 1 )!(n# 12 = 5 ) s ^l(n)='$g(^l(n))
	.s n=n-x2 i (n'>Count),(n# 12 = 7 ) s ^l(n)='$g(^l(n))
	.s n=n-(2*y2) i (i>j),(n'>Count),(n# 12 = 11 ) s ^l(n)='$g(^l(n))
	q
ja2(Count,sc) n (Count,sc) f i= 5 : 1 :sc i $g(^l(i)) s n=i*i f j=n:n:Count k ^l(j)
	q

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
USER>d Atkin^Simple( 1000000 , 1 )
 1 . 291022 
 
USER>d Atkin^Simple( 1000000 , 2 )
 1 . 302707 
 
USER>d Atkin^Simple( 10000000 , 1 )
 16 . 788452 
 
USER>d Atkin^Simple( 10000000 , 2 )
 13 . 908347 
 
USER>d Atkin^Simple( 20000000 , 1 )
 34 . 886791 
 
USER>d Atkin^Simple( 20000000 , 2 )
 28 . 661598 
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35624261
al-veliev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ув. коллеги!
Вот и мне есть что сказать...:)
Ведь у нас в М такие замечательные циклы! Силу этого цикла
Код: plaintext
1.
f i= 2 , 3 : 2 :Lim s ^a(i)=""
можно увеличить следующим образом
Код: plaintext
1.
2.
3.
 f i= 1 , 2 , 3 , 5 , 7 , 9  s ^a(i)=""
 s Lim=Lim- 10 
 f j= 10 : 10 :Lim f i= 1 , 3 , 7 , 9  s ^a(i+j)="" 
Выигрыш по времени должен быть заметным - убираются ненужные множители пятёрки.

Увлеченный вашим примером, я также протестировал однозадачный вариант первоначальной задачи. Поскольку в GT.M Job запускает системные процессы, а не задания М, в выигрыше оказался многозадачный вариант (сегодня он протекал на 5% быстрее, чем многозадачный). Также хочу сообщить, что в этой связи время исполнения несколько "пляшет", но тенденция остаётся.

Персонально to Alexey Maslov хочу сообщить размер базы данных : 93949К - вдвое больше Caсhe. Так получилось, что первоначально я запускал другую подобную задачу, которая просто заполняла базу данных рядами(проверял многопоточность), а потом ту, которую просил попробовать в Caсhe. Чувствуя, что её размер должен быть меньше, я написал это в скобках, а на момент написания поста не имел возможности повторно перезапустить задачу с новой базой данных (не было 36 мин:). Надеюсь, что не причинил этим особых неудобств...
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35624325
al-veliev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ув. коллеги!
Вот и мне есть что сказать...:)
Ведь у нас в М такие замечательные циклы! Силу этого цикла
Код: plaintext
1.
f i= 2 , 3 : 2 :Lim s ^a(i)=""
можно увеличить следующим образом
Код: plaintext
1.
2.
3.
 f i= 1 , 2 , 3 , 5 , 7  s ^a(i)=""
 s Lim=Lim- 10 
 f j= 10 : 10 :Lim f i= 1 , 3 , 7 , 9  s ^a(i+j)="" 
Никто не гарантирован от ошибок....
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35624646
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
al-veliev
Код: plaintext
1.
2.
3.
 f i= 1 , 2 , 3 , 5 , 7  s ^a(i)=""
 s Lim=Lim- 10 
 f j= 10 : 10 :Lim f i= 1 , 3 , 7 , 9  s ^a(i+j)="" 


Все-таки, наверное, вот так:
Код: plaintext
1.
2.
 f i= 2 , 3 , 5 , 7  s ^a(i)=""
 f j= 10 : 10 :Lim- 10  f i= 1 , 3 , 7 , 9  s ^a(i+j)=""
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35624809
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Протестировал все приведенные выше алгоритмы на
Код: plaintext
1.
USER>w $zv
Cache for Windows (x86- 32 )  2008 . 2  (Build  526 ) Fri Oct  17   2008   02 : 28 : 33  EDT
Система: Windows XP Professional SP3
CPU: Intel Core2Duo 2,33 ГГц
2 ГБ ОЗУ кэш бд выставлен вручную 1536 МБ
Журналирование базы USER отключено, база предварительно расширена до 3 ГБ
В агоритмах цикл
Код: plaintext
f i= 2 , 3 : 2 :Lim s ^a(i)=""
заменен на вариант ув. al-veliev
Код: plaintext
1.
2.
 f i= 2 , 3 , 5 , 7  s ^a(i)=""
 f j= 10 : 10 :Lim- 10  f i= 1 , 3 , 7 , 9  s ^a(i+j)=""

Результаты:
1. Алгоритм с делением на простые числа:
Limit=1000000, JobCount=1, Time=3.461106
Limit=1000000, JobCount=2, Time=2.207736
Limit=10000000, JobCount=1, Time=67.622076
Limit=10000000, JobCount=2, Time=36.391247
Limit=20000000, JobCount=1, Time=169.475283
Limit=20000000, JobCount=2, Time=89.043663

2. Моя реализация решета Эратосфена с изменениями Алексея Маслова:
Limit=1000000, JobCount=1, Time=1.080419
Limit=1000000, JobCount=2, Time=1.267313
Limit=10000000, JobCount=1, Time=12.459379
Limit=10000000, JobCount=2, Time=12.814223
Limit=20000000, JobCount=1, Time=26.047151
Limit=20000000, JobCount=2, Time=25.736279

3. Алгоритм от al-veliev без каких-либо переделок (но без вывода на экран)
Limit=1000000, Time=697.431159

4. Алгоритм от al-veliev с изменениями Алексея Маслова:
Limit=1000000, JobCount=1, Time=1.853483
Limit=1000000, JobCount=2, Time=1.97762
Limit=10000000, JobCount=1, Time=24.433566
Limit=10000000, JobCount=2, Time=25.123423
Limit=20000000, JobCount=1, Time=52.238333
Limit=20000000, JobCount=2, Time=52.51064

5. Решето Аткина:
Limit=1000000, JobCount=1, Time=1.111294
Limit=1000000, JobCount=2, Time=1.222627
Limit=10000000, JobCount=1, Time=14.68235
Limit=10000000, JobCount=2, Time=12.085616
Limit=20000000, JobCount=1, Time=30.78442
Limit=20000000, JobCount=2, Time=24.814908
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35625087
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
al-velievПоскольку в GT.M Job запускает системные процессы, а не задания М, в выигрыше оказался многозадачный вариант (сегодня он протекал на 5% быстрее, чем многозадачный).В Cache аналогично: Job запускает системные процессы. "Задания М" остались в далеком прошлом (MSM, DTM). Выигрыш 5% может быть в пределах погрешности. У меня получался даже больший выигрыш (см. начало дискуссии), который впоследствии не подтвердился. Думаю, это в природе Linux: скорость записи на диск не вполне предсказуема, т.к. на нее влияет много факторов, поэтому полностью согласен с MaWr'ом: чтобы уменьшить случайные флуктуации, имеет смысл тестировать на бОльших интервалах. Предложение (к MaWr'у): если не трудно, выложите здесь последний вариант исходников, чтобы была уверенность, что все мы запускаем одно и то же.
Мне кажется, интересно было бы протестировать их и в GT.M, но пока у меня нет такой возможности. Столь значительный проигрыш в скорости в GT.M (пусть и на относительно слабом ноуте) по сравнению с Cache, который получил Ал. Велиев, продолжает казаться мне странным.
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35625114
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey MaslovСтоль значительный проигрыш в скорости в GT.M (пусть и на относительно слабом ноуте) по сравнению с Cache, который получил Ал. Велиев, продолжает казаться мне странным.Имелся в виду проигрыш однозадачного варианта.
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35625302
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey MaslovПредложение (к MaWr'у): если не трудно, выложите здесь последний вариант исходников, чтобы была уверенность, что все мы запускаем одно и то же.


Код: 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.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
	; Параллельный через деление на простые числа
Parall1(Count,JobCount)	n (Count,JobCount) s h1=$zh k ^s,^l,^c s ^s=Count
	f p= 2 , 3 : 2  s q= 1  x "f f=3:2 q:f*f>p!'q  s q=p#f" i q s ^l(p)="" i (p*p)/$zln(p*p)/2>Count s ^c=p q
	f i=1:1:JobCount-1 j Job1
	d Job1 f  q:^c'<Count  h 0.1
	w $zh-h1,! q
Job1	n  m l=^l s Count=^s,qq=0 f  d  q:qq
	.s p=$i(^c,2) i p>Count s qq=1 q
	.s q=1,f="" f  s f=$o(l(f)) q:f*f>p  s q=p#f q:'q
	.q:'q  s ^l(p)=""
	q
	
	; Решето Эратосфена
Parall2(Count,JobCount) n (Count,JobCount) s h1=$zh k ^l,^c,^j
	f i=2,3,5,7 s ^l(i)=""
	f j=10:10:Count-10 f i=1,3,7,9 s ^l(i+j)=""
	s ^c=3,^j=JobCount
	if JobCount=1 { 
		d Job21(Count)
	} else {		
		f i=1:1:JobCount-1 j Job2(Count)
		d Job2(Count) f  q:'^j  h 0.1
	}		
	w $zh-h1,!
	q
Job2(Count) n (Count) s q=0 f  d  q:q
	.l +^c s j=^c i j="" l -^c s q=1 q
	.s n=j*j k ^l(n) s m=$o(^l(j)) i m="" l -^c s q=1 q
	.s ^c=m l -^c f i=n+j:j:Count k ^l(i)
	i $i(^j,-1)
	q
Job21(Count) n (Count) s q=0 f  d  q:q
	.s j=^c i j="" s q=1 q
	.s n=j*j k ^l(n) s m=$o(^l(j)) i m="" s q=1 q
	.s ^c=m f i=n+j:j:Count k ^l(i)
	i $i(^j,-1)
	q
	
	; Решето Аткина
Atkin(Count,JobCount)	;
	n (Count,JobCount,n) s h1=$zh k ^l,^j,^c s sc=$p(Count**0.5,".")
	if JobCount=1 {
		d ja1(Count,sc),ja2(Count,sc)
	} else {
		s ^j=JobCount f i=1:1:JobCount-1 j ja1p(Count,sc)
		d ja1p(Count,sc) f  q:'^j  h 0.1
		s ^j=JobCount,^c=4 f i=1:1:JobCount-1 j ja2p(Count,sc)
		d ja2p(Count,sc) f  q:'^j  h 0.1
	}
	s ^l(2)=1,^l(3)=1
	s i="" f  s i=$o(^l(i)) q:i=""  i '^l(i) k ^l(i)
	w $zh-h1,! q
ja1p(Count,sc) n (Count,sc) f  s i=$i(^c) q:i>sc  s x2=i*i f j=1:1:sc s y2=j*j d
	.s n=4*x2+y2 i (n'>Count),(n#12=1)!(n#12=5) l +^l(n) s ^l(n)='$g(^l(n)) l -^l(n)
	.s n=n-x2 i (n'>Count),(n#12=7) l +^l(n) s ^l(n)='$g(^l(n)) l -^l(n)
	.s n=n-(2*y2) i (i>j),(n'>Count),(n#12=11) l +^l(n) s ^l(n)='$g(^l(n)) l -^l(n)
	i $i(^j,-1) q
ja2p(Count,sc) n (Count,sc) f  s i=$i(^c) q:i>sc  i $g(^l(i)) s n=i*i f j=n:n:Count k ^l(j)
	i $i(^j,-1) q
ja1(Count,sc) n (Count,sc) f i=1:1:sc s x2=i*i f j=1:1:sc s y2=j*j d
	.s n=4*x2+y2 i (n'>Count),(n#12=1)!(n#12=5) s ^l(n)='$g(^l(n))
	.s n=n-x2 i (n'>Count),(n#12=7) s ^l(n)='$g(^l(n))
	.s n=n-(2*y2) i (i>j),(n'>Count),(n#12=11) s ^l(n)='$g(^l(n))
	q
ja2(Count,sc) n (Count,sc) f i=5:1:sc i $g(^l(i)) s n=i*i f j=n:n:Count k ^l(j)
	q
	
	; Alexey Maslov
AM(Lim,NJOBMAX)
	n (Lim,NJOBMAX)
	;s NJOBMAX=2		; max number of concurrent jobs
	s Q=2				; jobs load balance coefficient (from 2 to 32) 
	;s Lim=20000000		; max simple number
	s SuppressOutput=1	; if =1, don't output simple numbers list to $principal device
	/* Out:
	^a - simple numbers list
	>$p - its copy (if not SuppressOutput) */
	n c,d1,h1,i,n,njob,j,jd,jstat,k,locallim,vm
	s NJOBMAX=$G(NJOBMAX,0) i NJOBMAX=0 w !,"NJOBMAX=0" q
	s Q=$g(Q,2) i Q'>1 w !,"Wrong Q="_Q q
	k ^a,^pid,jj s snum=0,njob=0,h1=$$startt()
	f i=2,3,5,7 s ^a(i)=""
	f j=10:10:Lim-10 f i=1,3,7,9 s ^a(i+j)=""
	If NJOBMAX=1 {
		d al(1,Lim,Lim)
	} else {	 
		s i=1,locallim=$$b1(Q,NJOBMAX) s locallim=locallim/4
		for j=1:1 { 
			q:i'<Lim  s vm=$s(Lim<(i+locallim-1)||(j=NJOBMAX):Lim,1:i+locallim-1)
			w $zt($p($h,",",2),1)," ",$j(i,7)," ",$j(vm,7)," " j al(i,vm,Lim)
			s i=vm+1 s locallim=locallim*Q s:j<3 locallim=locallim*2
			s jj($zchild)="" w "job "_$zchild f k=1:1:50 if $d(^pid($zchild)) { w " started",! q } h 0.1
		}
		w !
		for  { 
			s jstat=0,j="" f  s j=$o(jj(j)) q:j=""  s jd=$d(^pid(j)),jstat=jstat+jd i jd=0 w $zt($p($h,",",2),1)_" job "_j_" finished",! k jj(j)
			q:jstat=0
			h 0.1
		}	
	}
	s d1=$$deltat(h1)
	if '$g(SuppressOutput) {
		s i=1,snum=0 f  s i=$o(^a(i)) q:i=""  i $i(snum) w "S ",i,!
		s d2=$$deltat(h1)
	} 	
	w !,NJOBMAX_" Job(s): Calculation time of simple numbers list (from  2  to "_Lim_") = "_d1
	if '$g(SuppressOutput) w !,"Output time = "_(d2-d1)
	q
al(v0,vm,Lim)
	s ^pid($j)=""
	s i=v0 f  s i=$o(^a(i)) q:i=vm||(i="")  s c=i+i i c<Lim f n=c:i:Lim i $d(^a(n)) k ^a(n)
	k ^pid($j)
	q
b1(q,n) s Lim=$g(Lim,10000000) q Lim*(q-1)\(q**n-1)
startt() q $zh
deltat(h) q $zh-h

	; al-veliev
ParallA	;
	k ^a,^b,^c,^pid s Lim=1000000,p=0,h1=$Zh
	f i=1:1:Lim s ^a(i)=i
	s i=1
	f  s i=$o(^a(i)) q:i=""  d
	.j a(i,Lim)::0 i  d c
	.e  d a(i,Lim) ;w "L ",i,!
	s h2=$Zh w h2-h1,!  q
a(v1,v2) s ^pid($j)="",(^b(v1,v1),^c(v1))=v1,c=v1+v1
	i c<v2 f n=c:v1:v2 k ^a(n) s (^b(v1,n),^c(n))=n
	k ^pid($j) q
c	k p m p=^pid s c=""
	f s=0:1 s c=$o(p(c)) q:c=""
	s c=$g(p) s:c<s ^pid=s ;w "P ",i," ",s," ",c,!
	q
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35625453
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaWr, спасибо, запланирую запуск на вечер (чтоб поменьше побочных эффектов :). Результатами поделюсь завтра.
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35625935
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А к чему все-таки пришли, скорость удовлетворительная или нет?
Или это были "шахматные этюды"?

"Быстрее, выше, сильнее"-лозунг на стадионе.
"МАМПС-это сила, а сила есть-ума не надо"-высказывание одного МАМПСиста.
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35626538
al-veliev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за информацию о способе запуска в Cache.
Вы совершенно правы, говоря о значительном влиянии ОС на скорость протекания задачи. У меня также сложилось устойчивое впечатление, что у меня слишком тихий HDD . В процессе наблюдал "зависания" из-за процессов чтения-записи на диск в разные моменты времени.
Также могу сказать с уверенностью, что чем б о льший максимум запущенных процессов, тем
хуже результат.
Для полноты сравнения с GT.M - можно его запустить без инсталляции . В Linux необходимы только 3 файла: mumps, libgtmshr.so и shell-скрипт для его запуска (около 2 Мбайт).
Я Вам смогу этот набор выслать по e-mail в архиве - сейчас под рукой нет.
Также я несколько улучшил алгоритм и завтра выложу усредненные результаты и свой код.
Алгоритм с решетом Аткина пока перевариваю... Новая для меня функция $i - в GT.M её нет.
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35627068
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наметился явный лидер среди алгоритмов для нахождения ряда простых чисел для cache
Оптимизировав еще решето Эратосфена таким образом:
Код: 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.
Parall2(Count,JobCount) n (Count,JobCount) s h1=$zh k ^l,^c,^j
	f i= 2 , 3 , 5 , 7  s ^l(i)=""
	f j= 10 : 10 :Count- 10  f i= 1 , 3 , 7 , 9  s ^l(i+j)=""
	s ^c= 3 ,^j=JobCount
	if JobCount= 1  { 
		d Job21(Count, 3 )
	} else {		
		f i= 1 : 1 :JobCount- 1  j Job2(Count)
		d Job2(Count) f  q:'^j  h  0 . 1 
	}		
	w $zh-h1,!
	q
Job2(Count) n (Count) s q= 0 ,cp=$p(Count/ 2 ,".")+ 1  f  d  q:q
	.l +^c s j=^c i (j="")!(j>cp) l -^c s q= 1  q
	.s n=j*j k ^l(n) s m=$o(^l(j)) i m="" l -^c s q= 1  q
	.s ^c=m l -^c q:j= 5   f i=n+(j*(j# 2 + 1 )):j* 2 :Count k ^l(i)
	i $i(^j,- 1 )
	q
Job21(Count,j) n (Count,j) s q= 0 ,cp=$p(Count/ 2 ,".")+ 1  f  d  q:q
	.i (j="")!(j>cp) s q= 1  q
	.s n=j*j k ^l(n) s m=$o(^l(j)) i m="" s q= 1  q
	.s jj=j,j=m q:jj= 5   f i=n+(jj*(jj# 2 + 1 )):jj* 2 :Count k ^l(i)
	i $i(^j,- 1 )
	q

Получил следующее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
USER>d Parall2^Simple( 1000000 , 1 )
. 828327 
 
USER>d Parall2^Simple( 1000000 , 2 )
 1 . 066355 
 
USER>d Parall2^Simple( 10000000 , 1 )
 9 . 775708 
 
USER>d Parall2^Simple( 10000000 , 2 )
 9 . 509487 
 
USER>d Parall2^Simple( 20000000 , 1 )
 20 . 651358 
 
USER>d Parall2^Simple( 20000000 , 2 )
 18 . 883166 
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35627088
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Результаты из предыдущего поста были получены на 5.0.20
На 2008.2 результаты следующие:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
USER>d Parall2^Simple( 1000000 , 1 )
. 695657 
 
USER>d Parall2^Simple( 1000000 , 2 )
. 960779 
 
USER>d Parall2^Simple( 10000000 , 1 )
 8 . 385334 
 
USER>d Parall2^Simple( 10000000 , 2 )
 8 . 406567 
 
USER>d Parall2^Simple( 20000000 , 1 )
 17 . 695525 
 
USER>d Parall2^Simple( 20000000 , 2 )
 16 . 851799 
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35627092
ceshka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
al-veliev, да, там и $LB() нету, очень, очень жаль, но, может появится...
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35627333
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот результаты вечернего прогона. Гонял только самые быстрые варианты (Аткина и Эратосфена от Мавра), по десять раз с каждым набором параметров. Сегодня ночью погоняю новый вариант "решета Мавра" (от Зратосфена там уже почти ничего, кроме идеи решета, не осталось :).
Код: 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.
*** Atkin ***  Count =  20000000    JobCount =  1  *  10 
 47 . 38458 
 47 . 577035 
 47 . 905709 
 49 . 043595 
 51 . 213214 
 50 . 943759 
 50 . 941086 
 50 . 806581 
 50 . 646581 
 50 . 709047 

*** Atkin ***  Count =  20000000    JobCount =  2  *  10 
 40 . 046957 
 39 . 824207 
 39 . 878648 
 39 . 885135 
 39 . 868178 
 38 . 361714 
 39 . 778633 
 39 . 870828 
 39 . 743118 
 39 . 746763 

*** Atkin ***  Count =  20000000    JobCount =  4  *  10 
 24 . 775915 
 24 . 715404 
 24 . 560634 
 24 . 719361 
 24 . 696522 
 24 . 731198 
 24 . 67062 
 24 . 740125 
 24 . 775475 
 24 . 872131 
AlexKBА к чему все-таки пришли, скорость удовлетворительная или нет?
Меня давно интересуют параллельные вычисления. Были случаи удачного применения их в работе. Но об общих закономерностях говорить пока рано (даже применительно к Cache - как к наиболее знакомому мне серверу БД/приложений). Все решает, в конечном счете, эксперимент. Предварительные соображения есть, но пока на уровне предположений. Например, в решете Эратосфена частые Kill 'ы в активно читаемый глобал приводят к его "перетряске", устареванию блоков в кэше, и кол-во ядер уже не спасает: процессы банально ждут, пока закончится цикл работы WRTDMN - а он (демон записи) в Cache один. Но почему-то (почему?) не менее частые команды set ^l(n)='$g(^l(n)) в решете Аткина оказываются меньшим злом.al-velievЯ Вам смогу этот набор выслать по e-mail в архиве - сейчас под рукой нетСпасибо, скачать GT.M для меня не проблема - проблема, чтобы руки дошли :). К тому же Вы немного не в курсе: $increment() в GT.M появился достаточно давно - посмотрите на SourceForge.
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35627344
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эратосфена забыл вставить. Вот:
Код: 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.
*** Eratosthenes ***  Count =  20000000    JobCount =  1  *  10 
 35 . 980755 
 36 . 006985 
 35 . 937574 
 35 . 852477 
 35 . 930427 
 35 . 952219 
 36 . 49792 
 35 . 99789 
 35 . 938981 
 35 . 937491 

*** Eratosthenes ***  Count =  20000000    JobCount =  2  *  10 
 41 . 674648 
 42 . 443895 
 42 . 079839 
 41 . 949844 
 41 . 945829 
 42 . 120846 
 42 . 099874 
 41 . 842123 
 41 . 887185 
 41 . 696166 

*** Eratosthenes ***  Count =  20000000    JobCount =  4  *  10 
 36 . 693771 
 35 . 448851 
 36 . 610853 
 35 . 248828 
 35 . 737866 
 35 . 969849 
 35 . 459895 
 36 . 146816 
 35 . 939816 
 35 . 776049 
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35627904
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Maslov,
Ой не последний вариант случайно выложил... Вот последний:
Код: 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.
Parall2(Count,JobCount) n (Count,JobCount) s h1=$zh k ^l,^c,^j
	f i= 2 , 3 , 5 , 7  s ^l(i)=""
	f j= 10 : 10 :Count- 10  f i= 1 , 3 , 7 , 9  s ^l(i+j)=""
	s ^c= 3 ,^j=JobCount
	if JobCount= 1  { 
		d Job21(Count, 3 )
	} else {		
		f i= 1 : 1 :JobCount- 1  j Job2(Count)
		d Job2(Count) f  q:'^j  h  0 . 1 
	}		
	w $zh-h1,!
	q
Job2(Count) n (Count) s q= 0 ,cp=$p(Count** 0 . 5 ,".")+ 1  f  d  q:q
	.l +^c s j=^c i (j="")!(j>cp) l -^c s q= 1  q
	.s n=j*j k ^l(n) s m=$o(^l(j)) i m="" l -^c s q= 1  q
	.s ^c=m l -^c q:j= 5   f i=n+(j*(j# 2 + 1 )):j* 2 :Count k ^l(i)
	i $i(^j,- 1 )
	q
Job21(Count,j) n (Count,j) s q= 0 ,cp=$p(Count** 0 . 5 ,".")+ 1  f  d  q:q
	.i (j="")!(j>cp) s q= 1  q
	.s n=j*j k ^l(n) s m=$o(^l(j)) i m="" s q= 1  q
	.s jj=j,j=m q:jj= 5   f i=n+(jj*(jj# 2 + 1 )):jj* 2 :Count k ^l(i)
	i $i(^j,- 1 )
	q
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35627923
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Принял к сведению :)
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35629277
al-veliev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AlexKBИли это были "шахматные этюды"?
У меня чисто практический интерес. Хочу в связи с этим рассказать историю. Захожу как-то к товарищу, а он чёрный как туча около своего компьютера. Оказывается, что в базе данных сайта, который он разрабатывал, хранились протоколы сессий - того требовал характер обработки данных. Очистка мусора была "зацеплена" на админку. Так вышло, что на неё долго никто не заходил, и накопилось очень много таких "хвостов". В результате они начали "топить" обработку.
Мой товарищ оказался в сложной ситуации - броузер выделяет на ответ 300 миллисекунд, сервер загружается одним запросом по полной, защита сервера срабатывает по подозрению в fork bomb (метод взлома, основанный на бесконечном вызове процессом самого себя или съедания памяти подобным образом. После перезагрузки системы неопытным администратором остаётся ловить пользовательские пароли) и обрезает ему квоту до минимума. Броузер, не дождавшись ответа, разрывает соединение, и ответ получить не удаётся. Ему пришлось потратить весь вечер и всю ночь, чтобы очищать по малюсенькому кусочку базу данных. Если бы у него в руках на тот момент был подобный механизм, он потратил бы час-два, и сайт не бездействовал бы весь вечер и всю ночь.
Во избежание необоснованных обвинений в некомпетентности, расхлябанности и т. д. сайт, имена и фамилии не называю.
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35629309
al-veliev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу продолжить тему с fork bomb применительно к нашей с Вами теме.
Пришел вчера домой. Подумал. Отключил антивирус и сетевую поддержку. Скорость и стабильность прохода задач резко выросли. В среднем прогон задачи шел около 3-х минут (Рост более чем в 2 раза). Если не считать одного случая с явным вмешательством ОС в процессы вычислений, то отклонения не превышали 10 сек., количество процессов колебалось в пределах 40-60. Но, говоря о нестабильности результатов в Linux, Вы абсолютно правы - сегодня днём цифры были немного больше. К концу следующей недели-середине месяца я запущу GT.M под Windows в режиме эмуляции, чтобы исключить этот фактор.

Спасибо за информацию об $i , а то начал уже огород городить с пользовательской функцией.
Говоря об её отсутствии, я ориентировался на документацию. Похоже, она слегка устарела.
Кстати, увидев H 0.1 я порадовался за то, что в Cache сделали более точный механизм задержек. Преисполненный радужных надежд, я направился в онлайн-документацию по Cache, надеясь увидеть такой же прогресс в командах Read, Open и Use, но был разочарован. Как Вы выходите из ситуации, когда нужно более точно реагировать при использовании этих комманд(скажем, с точностью до миллисекунд)?

Алгоритм Аткина меня порадовал более аккуратной работой с диском - таково первое впечатление.

Хорошо Вам провести выходные!
...
Рейтинг: 0 / 0
25 сообщений из 418, страница 5 из 17
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Что же главное в Cache?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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