Страница: 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|
Вопрос: Что нового в VB6 sp6
|
Добавлено: 16.08.11 07:55
|
|
|
Ответы
|
Всего ответов: 101
|
|
Номер ответа: 63 Автор ответа: Сергей Юдин
Вопросов: 8 Ответов: 81
|
Профиль | | #63
|
Добавлено: 14.09.11 22:36
|
Сергей, мое предложение состояло в том чтоб тестировать простой общеизвестный алгоритм с предсказуемыми известными результатами. Если вы такой знаете, приведите его описание, псевдокод, ссылку на википедию, решим в каких условиях будет делаться бенчмарк, какие параметры сравнивать, и проверим.
Те программы, которые вы написали для этих целей никак не подходят.
Не понял чем это не подходят для этого программы, где используется простейший метод численного решения дифференциальных уравнений, т.е. метод Эйлера, который изучают во всех вузах. Но, если Вы с ним не знакомы могут дать описание. А что касается режимов работы таких программ, то уж наверное я то знаю что при этом надо научным работникам.
С наилучшими пожеланиями Сергей Юдин.
Ответить
|
Номер ответа: 66 Автор ответа: Artyom
Разработчик
Вопросов: 130 Ответов: 6602
|
Профиль | | #66
|
Добавлено: 17.09.11 02:29
|
Сергей, я посмотрел вашу таблицу. Хочу узнать, вас, как научного работника, не смутила разница между временем работы программы на FB и другими? Я привожу данные из таблицы
-
- FBM 0.9
- VB6MV 163
- VBnetMV 670
- VB6MV+FB 162
- SiM 130
- DelM 550
Вы же понимаете, что скорость работы современных императивных компилируемых языков программирования (даже если таковыми в том числе считать VB6 и Delphi), учитывая развитие компиляторов и оптимизаторов, отличается на проценты, десятки процентов. И даже в разы. Эту разницу вполне можно объяснить качеством компиляторов, оптимизаторов и виртуальных машин.
Но как можно объяснить разницу в 150-750 раз на одной и той же задаче?
Вот довольно показательный результат
-
- FBM 0.9
- VB6MV 163
- VB6MV+FB 162
Как вы видите перенос вычислений в FB не дал абсолютно никаких преимуществ. Почему? Я не смотрел исходные коды всех программ, но с большой степенью вероятности можно утверждать, что вычисления занимают минимальное время, все остальное время (больше 99 тратится на поддержку GUI. Во-первых, куда годится такой бенчмарк?
Еще более показательный результат
FreeBasic умудрился обогнать С++ (который заслуженно считается одним из самых быстрых языков программирования) в 144 раза. После таких результатов абсолютно все научные сотрудники должны перейти на FreeBasic, но я пока этого не наблюдаю.
Я, конечно, не научный работник, но из всего этого видно что данная методика тестирования абсолютно неприменима для замеров скорости работы языков программирования, и программа нуждается в серьезной оптимизации.
Ответить
|
Номер ответа: 68 Автор ответа: Сергей Юдин
Вопросов: 8 Ответов: 81
|
Профиль | | #68
|
Добавлено: 19.09.11 00:37
|
Дайте же Артему ученую степень :D
К сожалению, его научные методы не позволяют этого сделать. Во-первых, он не внимательно читал данные таблицы и не заметил звездочку у программ на Free Basic и си++, а во-вторых он пренебрегает экспериментами, чтобы самому в этом убедиться. Так вот, звездочка означает, что программы работают как бы в консольном режиме (Free Basic точно в консольном, а си++ в псевдоконсольном), т.е. вывод всей информации и графической (kodG) и текстовой (kodT) идет в одно окно и управление программами осуществляется в связи с этим клавиатурой. При этом, как я писал в программе SiM у меня при каждом выводе информации происходит перерисовка всей картинки, что занимает очень много времени работы программы при малых значениях NC0, т.е. числа циклов вычислений после которого информация выводится на экран и общее количество таких выводов будет NV. Если же мы будем рассматривать только саму скорость вычислений (NC0 => 10000), то программа SiM и покажет, как пишет Artyom, что язык си++ //заслуженно считается одним из самых быстрых языков программирования//. Таким образом, Artyom просто не разобрался в обозначениях kodG, kodT, NC0 и NV. А по этому рано ему еще ученую степень давать.
С наилучшими пожеланиями Сергей Юдин.
Ответить
|
Номер ответа: 69 Автор ответа: Сергей Юдин
Вопросов: 8 Ответов: 81
|
Профиль | | #69
|
Добавлено: 19.09.11 00:43
|
Объясняю почему данная программа не подходит для бенчмарка.
В замере времени принимают участия операции, которые учитывать просто неуместно.
А именно:
Присвоение значений текстбоксам
Вызов Application.DoEvents()
Вы для кого собираетесь писать бечмарк? Мы говорим о научных работниках, а им, как я писал нужен не бечмарк, где /выплевывается/ только конечный результат.
//Дело в том, что все три режима с примерными значениями NC0 (количество циклов через которое выводятся данные на экран), kodG (код вывода графики) и kodT (код вывода текста) приведенными в таблице нужны для научных программ. NC0=1, kodG=1, kodT=1 при отладке программ, NC0=100, kodG=1, kodT=1 при анализе рассматриваемой физической проблемы и NC0=10000, kodG=0, kodT=1 при проведение массовых вычислительных экспериментов, когда интересует только конечный результат.//
А вы говорите только об одном режиме, когда программа уже отлажена и проведен анализ рассматриваемой физической проблемы, т.е. когда пошли массовые эксперименты. Да мне сейчас в программе Solsys как раз и нужен такой режим и поэтому я открывал тему о многопоточности. Но ведь до этого я уже провел и отладку программы и анализ рассматриваемой физической проблемы, по этому, использовал и другие режимы работы программы. А, если Вас так сильно беспокоит именно скорость математических вычислений, то посмотрите в статье мои данные именно по такому бечмарку, которые я взял в статье Виталия Крячко "О бедном Basic замолвите слово!" (на сайте по программированию VBNet) http://www.vbnet.ru/articles/Showarticle.aspx?id=220 и в скобочках добавил еще и данные полученные мною на моем компьютере.
Microsoft QuickBasic v4.5 - 56.13 (144.6)
Microsoft Visual Basic v6.0 - 5.12 (1.73)
FreeBASIC v0.15 - 0.578 (0.70)
PowerBASIC Windows Compiler 7.0 - 5.14 (16.9)
PureBasic v3.94 - 0.965
Blitz3D V1.83 - 74.94
Microsoft Visual С++ v6.0 - 4.0 (0.81)
Delphi v7 - 3.33 (1.81)
Здесь Бенчмак, код которого приведен ниже, у QuickBasic v4.5 работал под DOS, а у остальных языков под Windows XP. При этом в строке для Delphi v7 приведены мои данные для TurboPascal v7.0 тоже под операционной системой DOS. Как видим, и здесь С++ в группе фаворитов, хотя и уступает лидерам.
Rem BENCHMARK
Print "НАЧАЛО" : start = Timer : K = 0
Dim M(5)
50: K = K + L : A = K / 2 * 3 + 4 – 5 : GoSub 140
For L = 1 To 5 : M(L) = A : Next L
If K < 90000000 Then GoTo 50
finish = Timer – start : Print "КОНЕЦ - " + Str$(finish)
INPUT ; q : End
140: Return
А вот несколько иной по структуре простейший бенчмарк, который выложил Sharp (на сайте по программированию VBNet) http://www.vbnet.ru/forum/show.aspx?id=125800&page=1 и код которого тоже приведен ниже, показал несколько другие результаты. Время работы на FreeBasic было 4,2 сек, а на VisualC++ 2,1 сек. Так что, как видим при предвзятом мнение всегда можно /сбацать/ такой бенчмарк, который выведет в лидеры твой любимый язык. Вот по этому, я и предложил для тестирования языков на быстродействие не простейший бенчмарк, а типичную программу для проведения научных исследований.
K = 0 : While K < 90000000 : GoSub 100 : Wend
100: K=K+L: A=K / 2 * 3 + 4 – 5 : GoSub 140 : For L=1 To 5: M(L)=A: Next L : Return
140: C = C + 1 : Return
K=0: While K< 90000000: K=K+L: A = K/2*3+4–5: GoSub 140: For L=1 To 5: M(L)=A: Next L: Wend
140: C = C + 1 : Return
С наилучшими пожеланиями Сергей Юдин.
Ответить
|
Номер ответа: 72 Автор ответа: Artyom
Разработчик
Вопросов: 130 Ответов: 6602
|
Профиль | | #72
|
Добавлено: 19.09.11 01:36
|
Сергей, как бы скорость вычислений это единтсвенный параметр, который имеет смысл принимать во внимание, сравнивая разные языки программирования.
Я объясняю, в общем, в последний раз, как делается бенчмарк, результаты которого можно считать достоверными и применимыми для принятия каких-то решений.
Делатеся функция, которая принимает исходные данные на вход, и выдает результат вычислений на выходе.
Кроме вычислений функция не делает больше никаких операций.
Время работы этой функции и замеряется. Если в каких-то случаях оно очень низкое, в пределах погрешности таймера, то она вызывается в цикле много раз, замеряется общее время работы и делится на кол-во тестов.
Алгоритм в функции должен быть реализован одинаково во всех случаях.
Все типы данных должны быть одинаковыми (недопустимо в одном случае использовать int16 а в других int32, в одних float в других double, я думаю, по понятным причинам).
Если алгоритм предусматривает возможность распараллелить его, то это делается либо во всех тестах, либо ни в одном из них.
Тесты запускаются на одном и том же компьютере, в одно и то же время, причем по несколько раз и в качестве результата берется минимально достигнутое время (для того чтоб исключить результаты с погрешностью, случаи когда требовалось время для подгрузки библитоек, подготовки кода (JIT комплияция дотнета, привет), когда запускался сборщик мусора, случаи когда система прерывала выполнение работы программы чтоб дать возможность работать фоновым процесам и т.п.)
После этого результаты можно сравнивать.
То что делаете вы называется "тестируем все что попало и как хотим". И получается что в кучу смешалось тестирование абсолютно разных вещей. Встроенные функции библиотечных функций VB6, С++, PB, рядом с графической библиотекой дотнета, программы, работающие в совершенно разных UI режимах (от интерактивных оконных до консольных) и т.п. Отсюда и получаются неадекватные результаты.
Если вы согласны делать тест в условиях, которые я описал, я готов принять в нем участие. Но писать программу для выполнения какого-то маргинального бенчмарка я не вижу никакого смысла.
Сергей Юдин пишет:
образом, Artyom просто не разобрался в обозначениях kodG, kodT, NC0 и NV. А по этому рано ему еще ученую степень давать.
Сергей, я не вижу смысла разбираться в этих обозначениях, тем более что вы сами не потрудились объяснить что это за обозначения и дать им понятные имена.
Если тесты с обозначениями 10000/19 - это единственные которые у вас являются объективными, то сами по себе они уже свидетельствуют не в пользу VB6.
Реально вы мне напоминаете ученика, который решает задачу, получает скорость автомобиля 2000 км/ч и пишет этот результат как ответ, либо не задумываясь о том что он может быть ошибочным, либо считая что раз ошибка была допущена в середине решения, искать ее уже поздно, пусть будет как есть.
Ответить
|
Номер ответа: 73 Автор ответа: Artyom
Разработчик
Вопросов: 130 Ответов: 6602
|
Профиль | | #73
|
Добавлено: 19.09.11 01:56
|
Сергей Юдин пишет:
http://www.vbnet.ru/forum/show.aspx?id=125800&page=1
Прочитал эту тему, вобщем-то давно это было, но понял что похоже доказывать вам что-либо абсолютно бесполезно. За 4 года вы никак не выровняли свои взгляды. Даже после того как вам указали на кучу недочетов в исходном коде вы продолжаете его же мучить.
Сергей Юдин пишет:
NC0=1, kodG=1, kodT=1
Сергей или русским языком напишите что это значит или прекратите писать эти числа, потому тут что никто кроме вас не понимает их смысл. Если не прав, пусть тот кто понимает отпишется.
Сергей Юдин пишет:
K = 0 : While K < 90000000 : GoSub 100 : Wend
100: K=K+L: A=K / 2 * 3 + 4 – 5 : GoSub 140 : For L=1 To 5: M(L)=A: Next L : Return
140: C = C + 1 : Return
K=0: While K< 90000000: K=K+L: A = K/2*3+4–5: GoSub 140: For L=1 To 5: M(L)=A: Next L: Wend
140: C = C + 1 : Return
Простой вопрос, вы вообще понимаете какие типы у всех этих переменных? Я не вижу чтоб они где-то были объявлены, могу предположить что они вообще нигде не объявлены и везде используется позднее связывание. Если туда попадают числа с плавающей запятой, какая у них точность, одинарная или двойная?
Сергей Юдин пишет:
Вообще то, устранить мои недочеты в программе, написанной на Visual Basic .NET я просил EROS, но, если Вы заинтересовались этим, то я буду не против если это сделаете Вы.
Я не заинтерисован исправлять недочеты в чужом кривом коде. Но могу на них указать, что я и сделал.
Ответить
|
Страница: 1 | 2 | 3 | 4 | 5 | 6 | 7 |
Поиск по форуму