powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Что же главное в Cache?
25 сообщений из 418, страница 4 из 17
Что же главное в Cache?
    #35610316
al-veliev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну яУв. al veliev,
Вы действительно считаете, что языки Mumps и sql как-то коррелируют на самом деле?
Ув. ну я,
"слияние" языков, по моему мнению - уже почти сегодня. Стандарт ISO M предполагает включение комманд посторонних процессоров в тело М программы. Подобное включение HTML кода в тело М программ уже реализовано в M-compiler.

Например (только на уровне концепции):
set A=2
SQL select * from clients into _m.B
zwrite

-------
A=2
B(1)="Ivan Ivanov"
B(2)="Petr Petrov"
.....

Аналогично можно поступить и со стороны SQL (пример только на уровне концепции, реализация наверняка будет удобнее):

Declare M as object
....

Select * from (M.database.A) into A where (A.Nam=M.piece(M.database.A," ") and A.Lnam=M.piece(M.database.A," ",2)

Уже сейчас согласно документации разработчика м21 под Windows реализован как объект
(выводы делайте сами!).
Впрочем, подобная вещь гораздо лучше описана в журнале "Компьютеры+Программы"(№7-8/2003)
в статье "Одна СУБД - много методов доступа". Так что не я автор идеи.
К сожалению, стандарт ANSI MUMPS этого включения не предусматривает.
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35610545
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
al-velievУв. ну я,
я действительно неудачно выразился, приписав Вам то, что Вы процитировали.
Сам это заметил, когда уже выставил пост. Так что если я Вас обидел - извините.
На этом сайте Вы, похоже, один из немногих кто извиняется )))
Неожиданно. Принято.
al-velievА реализация SQL-доступа на М действительно у меня есть в виде шаблона (это всего лишь 18 комманд на М). Концепция описана у меня на сайте http://www.cgi2m.net.ua в статье M in WEB (ориентирован под Gecko броузеры). Ведь никто не мешает мыслить декларативно на процедурном языке. Чем меня М и привлекает - из него можно изваять что угодно.
Если Вы решите использовать этот пример для построения Select ... (Where Select ...), то Вы увидите рекурсию воочию.
Потому что Ваша концепция развертывания отношений на этом построена. В других реализациях sql движков планы выполнения могут быть иными. Посмотрите планы выполнения на других реализациях. В той же cache есть развертывание плана, например. Тот же MSSQL показывает планы выполнения.
al-velievСоздатели Пролога прямо заявляли, что реализации поиска в их языке - рекурсивные.
Так пролог и был исследовательским проектом, крутящимся вокруг резольвирования с конкретизацией. Их цель и состояла в идее применения резольвенты. У них и задача была исследовательская, построение машинки поиска решения и вывода, а не работы с данными.
al-velievДело в том, что реализация с использованием циклов затруднена из-за одновременного использования данных на разных уровнях программного стека (слизывание крема с разных слоёв пирожного :) ) и требует более сложных алгоритмов. Впрочем, всё это хорошо описано в специальной литературе.
Машинки развертывания отношений в sql строятся на алгебре отношений, это не просто другие алгоритмы, это другая идеология, если можно так сказать. То, что у Вас получилось построить машинку sql на рекурсии - состоявшийся факт и снимаю шляпу. К сожалению, это поверхностно. В нескольких проектах мы применяли практически такое же решение, как и у Вас. Работа со структурами данных в каше без хранимых объектов и sql, по примерно той же схеме. В какой то мере Ваше решение (d ^squl) мне понятно. Но это не sql, вынужден огорчить.
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35610573
al-veliev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ув. ну я,
безусловно, реализация разрешения запросов SQL разработчиком на физическом уровне будет протекать гораздо более развитыми средствами. Наверняка используется общий пул с хешированием данных и т.д. Но в конце концов оба пути, учитывая внутреннюю обработку на М, будут во многом похожи. С другой стороны ведь и не ставил задачу писать SQL - решатель. Моя задача была гораздо скромнее - облегчить переход с SQL на M при необходимости. Как Вы наверняка заметили, процесс этот при необходимости можно автоматизировать. Что и не удивительно - SQL ведь первоначально и создавался для системных аналитиков и постановщиков задач.
Относительно Вашего замечания по Прологу хочу заметить, что он оперирует с базой знаний
(база данных+правила вывода), т.е. объектом более сложным, чем просто база данных, и у него есть свои реализации и сторонники. У меня лично библия И.Братко по Прологу - настольная книга. Замечательная вещь. Как он мыслит!!!!
Кстати, У меня к Вам будет просьба, если Вы не будете против и у Вас есть такая возможность, протестируйте мой пример из сайта на простые числа (статья Why M из сайта. Программа example ) на Cashe,- к сожалению, я не имею такой возможности. Я буду Вам очень признателен - у этого примера просто шикарный выход на многопоточную обработку .
А относительно используемой алгебры отношений не могу не заметить, что "перелив" из одной алгебры в другую - больше дело знаний и умений того, кто это делает. Ведь получилось же у Вас.
И ставить забор, там где его нет - вредно. С одной стороны, реляционные отношения - вырожденная иерархия, а с другой, любая иерархия - это реляционное отношение на уровне (объект) <-> (его множество - его алгебра). Так что всё зависит от Вас...
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35610842
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Борис ЕгоровА вы сделайте проще - скачайте однопользовательскую версию, и попробуйте сделать какое-нибудь несложное упражнение
Могу предложить еще один вариант т.с. "для проведения сравнения" СУБД...
- Придумать задачку
- Попросить ее реализовать разным СУБДшникам

Если задачка будет интересна - обязательно предложат несколько вариантов решения. Поскольку "новичек" не сможет на все 100% реализовать возможности любой СУБД...
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35611089
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
al-velievКстати, У меня к Вам будет просьба, если Вы не будете против и у Вас есть такая возможность, протестируйте мой пример из сайта на простые числа (статья Why M из сайта. Программа example ) на Cashe,- к сожалению, я не имею такой возможности. Я буду Вам очень признателен - у этого примера просто шикарный выход на многопоточную обработку .
Миллион job?
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35613201
Бред
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DorsajПривет всем присутствующим.

Сегодня потратил целый день на выяснение, что лучше РСБУД или ОСУБД. Перелопатил кучу инфы. Приобрел кучу бесполезных знаний, но так и не понял. Мне важно понять. Имеет ли смысл уделять знакомству с Cache' много времени или нет. Не смог найти ни одного мало мальски достойного подтверждения что это лучше чем к примеру Oracle.

Во всех сравнительных анализах стоит либо прямая ссылка на intersystems. либо эта ссылка в числе прочих в списке литературы. Но позвольте, это же то же самое что спрашивать что лучше, Cache' или Oracle на oracle.com.
99% людей работающих с Cache и MUMPS расхваливают его на все лады. (Как сейчас помню, как у моего знакомого появился линукс дома, один из первых в моем городе, и как он его потом расхваливал.. уши вяли).
В многомерности не увидел ни одного преимущества, наоборот - Двумерные таблицы приучают, на мой взгляд, к дисциплинированности чем всю базу представлять единым n - мерным массивом.
Возможность обращаться напрямую к портам... Но простите, разве нельзя написать хранимку в оракле на java.
В этом самом топике прочитал что COS это язык низкого уровня как "С++ и даже глубже", долго смеялся.

Я знаю компанию, монополиста в моем и близлежащих регионах, которая перешла на оракл с Cache'

Дело вот в чем. Мне не жалко потратить время на плотное изучение ее. Но не хотелось бы тратить время на ерунду.
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35613233
Бред
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DorsajПривет всем присутствующим.

Сегодня потратил целый день на выяснение, что лучше РСБУД или ОСУБД. Перелопатил кучу инфы. Приобрел кучу бесполезных знаний, но так и не понял. Мне важно понять. Имеет ли смысл уделять знакомству с Cache' много времени или нет. Не смог найти ни одного мало мальски достойного подтверждения что это лучше чем к примеру Oracle.

Во всех сравнительных анализах стоит либо прямая ссылка на intersystems. либо эта ссылка в числе прочих в списке литературы. Но позвольте, это же то же самое что спрашивать что лучше, Cache' или Oracle на oracle.com.
99% людей работающих с Cache и MUMPS расхваливают его на все лады. (Как сейчас помню, как у моего знакомого появился линукс дома, один из первых в моем городе, и как он его потом расхваливал.. уши вяли).
В многомерности не увидел ни одного преимущества, наоборот - Двумерные таблицы приучают, на мой взгляд, к дисциплинированности чем всю базу представлять единым n - мерным массивом.
Возможность обращаться напрямую к портам... Но простите, разве нельзя написать хранимку в оракле на java.
В этом самом топике прочитал что COS это язык низкого уровня как "С++ и даже глубже", долго смеялся.
Я знаю компанию, монополиста в моем и близлежащих регионах, которая перешла на оракл с Cache'

Дело вот в чем. Мне не жалко потратить время на плотное изучение ее. Но не хотелось бы тратить время на ерунду.

1. Целый день - это много, конечно, но, видимо, не достаточно):
2. Видимо под ОСУБД Вы понимаете СУБД, основанные на парадигме ООП. Поскольку ООП не имеет никакого отношения к БД, то такие СУБД не могут продвинуть теорию и практику БД к новым вершинам, так сказать. Дейт, в частности, достаточно логично показазывает не достатки таких ОСУБД. Кроме того, "объектные технологии" (на основе ООП) внедрены во все существующие СУБД в той или иной степени.
3. Oracle, в частности, никогда не была "реляционной СУБД", хотя бы по той простой причине, что РМД принципиально не реализуема. И заимоствовала из mumps, все что могла, хотя это и было не понятно большигству разработчиков, так как выходило за рамки "реляционной теории" и, мягко говоря, не выглядело органично. ROWID, конечно, были объективно необходимы, причем не только для организации индексов (кстати говоря, они используются и в объектных ссылках). Появившиеся в 8i IOT типичный кусочек mumps, но как объяснить преимущества этого инородного для "реляционной технологии" кусочка - даже у Кайта не очень получается. И т.д.
4. Почитайте отчеты IBM 1968-1969гг. Кодд хотел бы обеспечить хоть какую-то семантику данных путем поддержки сущностей и связей между сущностями. Но не получилось. Победила "алгебра". И БД радикально утратили идентификацию, навигацию и семантику. А если называть вещи своими именами - БД перестали быть БД. Кодд мечтал приблизить данные к пользователю (благодаря практически естественному ЯМД), а получилось принципиально наоборот. Теперь данные находятся на "сервере БД" и доступны только для шаманов (архитекторов, программистов и прочих "разработчиков"). Чтобы просто получить фамилию сотрудника нужно идти к шаману):
5. Я, по этому поводу, 15 лет назад спросил Паскаля: а что думает об этом печальном результате сам Кодд (с которым Паскаль был знаком). Однако господин Паскаль был уже несколько раздражен, так как не смог ответить по-существу на несколько вопросов, и сказал: "Не надо преувеличивать". Ну коненчо, не надо. Ни преувеличивать, ни преуменьшать.
6. mumps единственная целостная технология баз данных, предназначенная, в первую очередь, для создания СУБД. Очень хорошо на mumps реализуется классическая объектная СУБД, так как, в частности, идентификаторы экземпляров принципиально отделены от свойств объекта (что невозможно в "Р"СУБД). Далее все органично вытекает одно из другого: связи естественным образом реализуются связями между идентификаторами, семантика данных поддерживается естественным образом именно благодаря тотальной идентификации метаданных.
7. В результате, можно (и это уже давно сделано на практике) создать систему, позволяющую радикально сократить программирование (в частности, вообще отказаться от программирования интерфейсов), прекратить шаманство и приблизить данные к пользователям.
8. О какой многомерности Вы говорите вообще непонятно. mumps не является "многомерной" системой в смысле MS AS, например. Но на mumps прекрасно работает OLTP+OLAP в рамках одной системы.
9. "Таблицы" в ОСУБД на mumps тоже есть, как внешнее представление объекта, причем, в отличие от Oracle или MS SQL на количество "колонок" в таблице нет ограничений (так же как и на "длину записи").
10. Наверное, Вам следует продолжать "долго смеяться". Здоровее будете):
11. Мой Вам совет: не тратьте время на изучение mumps. Сейчас не те времена. Продолжайте шаманить, так как это хороший, в коммерческом отношении, путь):
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35614559
AlexKB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бред,

Я с огромным удовольствием читаю Ваши статьи.
В них всегда нахожу много интересного, полезного, наконец умного.

Ну их всех тех тащусиков, не тратьте свои силы на их перевоспитание - бесполезно.
Как говорится, горбатого могила выправит.

Лучше пишите поучительные статьи нам, тем кто умеет слушать.

Если есть где почитать Ваши мысли, обзорные статьи и т.п. дайте в ответе ссылку, пожалуйста.

Заранее благодарен.
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35616969
al-veliev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ув. ну я,
я тестировал эту задачу на GT.M на своём ноутбуке HP/Compaq-NC8000(1700MHZ/512ram/40GB hdd).
Процесс протекал "рывками", в общей сложности более 36 мин. Максимальное количество заданий - более 300, база данных выросла до 0.5 Гбайт (У Вас может быть и меньше). Задача эта лежала у меня под спудом более 2-х лет, так как я сомневался в способности М-трансляторов провести точно обработку данных с таким количеством заданий в таком потоке. Для того, чтобы запустить её, понадобилось общение с K.S.Bhaskar. Идея задачи родилась после повторного прочтения книги И. Братко по Прологу (Гл.16, пример по нахождению наибольшего общего делителя. Просто супер! Арифметическая задача без вычислений!). Я буду очень рад, если она сработает и на другом достаточно большом числе - важна проверка работоспособности алгоритма.
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35618194
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр, я протестировал вашу программку (нахождения всех простых чисел от 2 до 1000000 методом "решета" Эратосфена) в Cache. Параметры моей тестовой установки:
>w $zv
Cache for UNIX (Red Hat Enterprise Linux for x86-64) 2008.1 (Build 401_0_6608) Fri Apr 4 2008 08:43:42 EDT

$uname -a
Linux mzserver.sparm.com 2.6.24.3-50.fc8 #1 SMP Thu Mar 20 13:39:08 EDT 2008 x86_64 x86_64 x86_64 GNU/Linux

Два вот таких двухядерных проц-а:
Dual-Core AMD Opteron(tm) Processor 2218
cpu MHz : 2613.392

Немного изменил алгоритм:
запуск Job с временем ожидания 0 в мало-мальски загруженной системе в Cache бессмыслен: они просто не будут запускаться (первый же прогон это подтвердил). Изменил на 10.

сразу захотелось контролировать максимальное кол-во параллельно запускаемых JOBов (ибо и ресурсы компа, и лицензия не резиновые :), поэтому вставил ограничитель (NJOBMAX).
Результаты таковы:
Код: plaintext
1.
2.
3.
4.
5.
6.
NJOBMAX= 128 
h1="61292,50636" |  30  -  60  s 
h2="61292,50696"

NJOBMAX= 0 
h1="61292,62170" |  13  s
h2="61292,62183"
Суммарный размер глобалов в процессе работы достигал 50Мб. Как у Вас получилось 0.5Гб - не понимаю.
При NJOBMAX=0 вся работа проделывалась в главной программе, без запуска Job'ов.
Результат меня особо не удивил: для оптимальной производительности кол-во параллельных процессов должно быть близко к кол-ву процессоров/ядер, и это если повезет и задача хорошо распараллеливается. При этом не забываем о том, что в Cache всегда присутствует минимум еще один параллельный процесс - демон записи (WRTDMN), это при условии, что БД не расширяется и глобалы не журналируются. С таким алгоритмом, как у Вас, по кр. мере в Cache однопоточный вариант оказался явным лидером.
Тем не менее, результат меня не обрадовал, что привело к появлению несколько другого подхода к распараллеливанию работы в задаче. На том же компе удалось достичь 7 сек на 4 Job'ах, на 1 Job'e - 10 сек. Разница невелика, но все-таки она есть. Кто быстрее? :)
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35618683
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Parall	n  s h1=$zh k ^mtemp("s")
	s Count= 1000000 ,JobCount= 2 ,^mtemp("s")=Count,^mtemp("s","j")=JobCount
	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 ^mtemp("s","l",p)="" i $i(^mtemp("s","n")),$i(^mtemp("s","s"),p) i (p*p)/$zln(p*p)/2>Count s ^mtemp("s","c")=p q
	f i=1:1:JobCount-1 j Job
	d Job f  q:^mtemp("s","j")=0  h 0.1
	w ^mtemp("s","s"),!,$zh-h1,!
	q
Job	n  m l=^mtemp("s","l") s Count=^mtemp("s"),qq=0 f  d  q:qq
	.s p=$i(^mtemp("s","c"),2),q=1,f="" f  s f=$o(l(f)) q:f*f>p  s q=p#f q:'q
	.q:'q  i $i(^mtemp("s","s"),p) s n=$i(^mtemp("s","n")) q:n<Count  i n=Count l +^mtemp("s","last") s qq=1,^mtemp("s","last")=p l -^mtemp("s","last") q
	.s q=0,qq=1 f  l +^mtemp("s","last") q:^mtemp("s","last")  l -^mtemp("s","last") h 0.1
	.i p>^mtemp("s","last") i $i(^mtemp("s","s"),-p) l -^mtemp("s","last") q
	.i $i(^mtemp("s","s"),^mtemp("s","last")) s ^mtemp("s","last")=p,qq=1 l -^mtemp("s","last")
	i $i(^mtemp("s","j"),- 1 )
	q
Начальная инициализация ряда простых чисел (f p=2,3:2 s q=1 x "f f=3:2 q:f*f>p!'q s q=p#f" i q.....) позаимствована из подписи Keith Lynch'а (высмотрено в MUMPS FAQ).
Считается сумма первого миллиона простых чисел.
JobCount=2 - сколькими процессами считать
На Intel Core2Duo 2.33 МГц в 2 процесса 74 секунды
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35618718
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заполнение глобала ^mtemp("s","l") простыми числами <= 1000000 на том же железе (Intel Core2Duo 2.33 МГц) в 2 процесса <2.4 сек.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Parall1	n  s h1=$zh k ^mtemp("s")
	s Count= 1000000 ,JobCount= 2 ,^mtemp("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 ^mtemp("s","l",p)="" i (p*p)/$zln(p*p)/2>Count s ^mtemp("s","c")=p q
	f i=1:1:JobCount-1 j Job1
	d Job1 f  q:^mtemp("s","c")'<Count  h 0.1
	w $zh-h1,!
	q
Job1	n  m l=^mtemp("s","l") s Count=^mtemp("s"),qq=0 f  d  q:qq
	.s p=$i(^mtemp("s","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 ^mtemp("s","l",p)=""
	q
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35618748
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу заметить, что в моем алгоритме выставлять значение JobCount больше чем число процессоров*ядер не имеет смысла, так как каждый процесс cache грузит "свой" процессор по максимуму.
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35619235
MX-1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
al-velievУв. ну я,
я тестировал эту задачу на GT.M на своём ноутбуке HP/Compaq-NC8000(1700MHZ/512ram/40GB hdd).
Процесс протекал "рывками", в общей сложности более 36 мин. Максимальное количество заданий - более 300, база данных выросла до 0.5 Гбайт (У Вас может быть и меньше). Задача эта лежала у меня под спудом более 2-х лет, так как я сомневался в способности М-трансляторов провести точно обработку данных с таким количеством заданий в таком потоке. Для того, чтобы запустить её, понадобилось общение с K.S.Bhaskar. Идея задачи родилась после повторного прочтения книги И. Братко по Прологу (Гл.16, пример по нахождению наибольшего общего делителя. Просто супер! Арифметическая задача без вычислений!). Я буду очень рад, если она сработает и на другом достаточно большом числе - важна проверка работоспособности алгоритма.

al-veliev
С днем Рождения !

и успехов
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35620408
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мои средние результаты (на той же установке, на большом числе прогонов):
Код: plaintext
1.
 1  Job(s): Calculation time of simple numbers list (from  2  to  1000000 ) =  3 . 83 
 2  Job(s): Calculation time of simple numbers list (from  2  to  1000000 ) =  3 . 95 
С другой стороны, программа MaWra выдала:
Код: plaintext
1.
 2  Job(s):  4 . 148126 
 1  Job(s):  6 . 465733 
Т.е. не получилось у меня хорошо разделить работу между JOBами, но (по кр. мере на моей системе) я быстрее :) MaWr, ради интереса, прогоните у себя мой вариант (с NJOBMAX=1 и 2). Вот он (написан по мотивам программы Ал. Велиева):
Код: 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.
 s NJOBMAX= 1   		; max number of concurrent jobs
 s Q= 2 			; jobs load balance coefficient (from  2  to  32 ) 
 s Lim= 1000000  		; 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 Lim= 1000000 ,snum= 0 ,njob= 0 ,h1=$$startt()
 f i= 1 : 1 :Lim s ^a(i)=i
 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:5 if $d(^pid($zchild)) { w " started",! q } h 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.5
   }	
 }
 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, 1000000 ) q Lim*(q- 1 )\(q**n- 1 )
startt() q $zh
deltat(h) q $zh-h
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35620461
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1 Job(s): Calculation time of simple numbers list (from 2 to 1000000) = 3.955174
2 Job(s): Calculation time of simple numbers list (from 2 to 1000000) = 3.928759
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35620539
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaWr, спасибо :) Скорость моей проги можно поднять ~ на 10%, если заполнять глобал так: f i=1:1:Lim s ^a(i)=""
но это, конечно, не принципиально. Пока что можно констатировать, что Ваша 2-поточная прога быстрее моей однопоточной на Core2 Duo, а на Dual-Core AMD - все наоборот. Разница еще и в том, что я строю глобал простых чисел (^a) в текущей области, поэтому существенно, чтобы журналирование глобалов в БД было отключено.
Было бы здорово, если для полноты картины Вы указали $zv и версию ОС.
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35620544
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Попробовал заменить в программе Алексея Маслова "простые" глобалы на ^mtemp(индекс) - результат ухудшился.
Переделал свою программу на "простые" глобалы. Получил результат 2.25с

Выходит процессоры от Intel деление производят быстрее, чем от AMD :)
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35620557
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
USER>w $zv
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
ОС Windows XP Professional SP3
В конфигурации поставил режим WIJ - частичный
Первой строчкой al сделал d DISABLE^%NOJRN
Скорость не поменялась..
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35620580
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Maslov:
А Вас в системе 2 2-х ядерных процессора. Запуск моей программы 4-мя потоками какой результат покажет?
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35620882
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Maslov
Скорость Вашей проги еще можно поднять, если заполнять глобал так:
Код: plaintext
 f i= 2 , 3 : 2 :Lim s ^a(i)=""
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35621089
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот более удачная реализация распараллеливания решета Эратосфена:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Parall2	n  s h1=$zh k ^l,^c,^j s Count= 1000000 ,JobCount= 2 
	f p= 2 , 3 : 2 :Count s ^l(p)=""
	s ^c= 3 ,^j=JobCount 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
1 поток: 1.883825 сек.
2 потока: 1.594853
все равно разница не велика..
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35621157
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaWrЗапуск моей программы 4-мя потоками какой результат покажет?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CRAI52>d ^mawr( 1 )
 1  Job(s):  6 . 10044 

CRAI52>d ^mawr( 2 )
 2  Job(s):  4 . 155397 

CRAI52>d ^mawr( 3 )
 3  Job(s):  4 . 261928 

CRAI52>d ^mawr( 4 )
 4  Job(s):  5 . 763691 

CRAI52>d Parall2^mawr( 1 )
 2 . 086427 

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

CRAI52>d Parall2^mawr( 3 )
 2 . 348038 

CRAI52>d Parall2^mawr( 4 )
 2 . 265273 
Итак, снова победил однопоточный вариант (теперь уже Ваш), по крайней мере, на AMD. Интересно было бы проверить на Core2 Duo в актуальной версии Cache.
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35621314
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.
Parall2(JobCount) n (JobCount) s h1=$zh k ^l,^c,^j s Count= 1000000 
	f p= 2 , 3 : 2 :Count s ^l(p)=""
	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
Код: plaintext
1.
2.
3.
4.
5.
CRAI52>d Parall2^mawr( 1 )
 1 . 531951 

CRAI52>d Parall2^mawr( 2 )
 2 . 208054 
...
Рейтинг: 0 / 0
Что же главное в Cache?
    #35621521
al-veliev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые друзья!
Вчера у меня был день рождения.
Зайдя сегодня на форум, я и представить не мог такого отклика на представленную задачу.
Это для меня огромный и неожиданный подарок от МУМПС-сообщества.
Спасибо огромное Вам всем, здоровья и удачи на жизненном пути!
...
Рейтинг: 0 / 0
25 сообщений из 418, страница 4 из 17
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Что же главное в Cache?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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