LINUX.ORG.RU

Ответ на: комментарий от gizzka

Сравнить производительность на разных архитектурах.

LongLiveUbuntu ★★★★★
() автор топика

Еще можно сравнить на численном интегрировании системы ОДУ: http://sourceforge.net/projects/mapsim/.

Там есть гуишная тулза (винформс) и консольная. Скармливаешь исходную модель (в виде текста из примеров), меняя шаг интегирования dt, начальное время starttime и конечное stoptime. В гуишной тулзе нажимаешь Run (с сохранением результатов) или Idle Run (холостой ход без сохранения вычисленных результатов). Советую использовать Idle Run для сабжа. В консольной тулзе режима Idle нет.

Исходная модель компилируется и загружается в текущий домен на исполнение. Если dt мало, то время на компиляцию будет незначительно в общем вкладе.

В общем, сама число-дробильня в Mono достаточно неплоха, но в Mono просто отвратительная поддержка хвостовой рекурсии - для некоторых счетных задач это тоже бывает важно (процесс-ориентированное моделирование).

dave ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

Там система ОДУ всегда компилируется в C#. Можно взять этот промежуточный код (например, через кнопку Generate или запросить у консольной утилиты) и запускать уже самостоятельно. Тогда будет измеряться чистая числодробильня плюс время загрузки байт-кода.

При желании в модель легко добавить синусы и косинусы. Тут по вкусу.

dave ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

С консольным проектом будут сложности - он сохраняет результаты в файле CSV. Время, необходимое на IO, намного превышает время счета. Само вычисление очень быстрое.

Поэтому все же советую гуевую утилиту, кнопку Idle Run. Практически ничего доделывать не надо. Нужно только выставить dt малым. Сама компиляция занимает меньше секунды.

dave ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

Ну, тогда можно подредактировать код консольной утилиты, если есть интерес.

Файл CompilerProgram.cs, метод GenerateCSV. Заменить WritingIterator на IdleIterator. Вызов

IdleIterator.Iterate (...)

можно обрамить замером времени. Вызывать как в режиме /out:csv. Просто не будет создаваться файл CSV.

Но идеологически самый чистый вариант - это добавить новую опцию в CompilerProgram.cs и сделать то же самое, что я описал выше.

Можно управиться за несколько минут.

dave ★★★★★
()
Ответ на: комментарий от dave
		private static void GenerateCSV (TextReader reader, TextWriter writer, Parameters pars) {

			CompSystem system = SystemCompiler.CompileSystem (reader.ReadToEnd(), true);
			Verify (system.Domain);

			SimulationModel model = CompResolver.Resolve (system.Domain);
			SimulationContext ctx = new SimulationContext();

			ctx.Method = GetMethod (pars.MethodType);
			ctx.Randomness = GetRandomness (pars.RandomnessType);

			// тут можно запомнить текущее время

			// было так:
			// WritingIterator.Iterate (model.Simulate (ctx), writer);

			// станет так:
			IdleIterator.Iterate (model.Simulate (ctx));

			// тут можно снова замерить время и вывести разницу -
			// именно столько будет потрачено на вычисления плюс
			// небольшое копирование данных в массив, но последнее
			// роли большой не играет
		}
dave ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

Да, там некоторое время тратится на копирование результатов интегрирования в буфер. Если хочешь более честных замеров скорости собственно вычислений, то закомментируй следующую строчку в файле ProcessGenerator.cs метода GetIndexIterator:

CopyToBuffer (domain, it.Statements);
dave ★★★★★
()

Вот какой результат для ARM-а:

root@beagleboard:/mnt# mono --version
Mono JIT compiler version 2.6.3 (tarball Fri Mar 18 15:18:29 CET 2011)
Copyright (C) 2002-2010 Novell, Inc and Contributors. www.mono-project.com
        TLS:           normal
        GC:            Included Boehm (with typed GC and Parallel Mark)
        SIGSEGV:       normal
        Notifications: epoll
        Architecture:  armel,soft-float
        Disabled:      none

BeagleBoard-xM (OMAP3 Beagle Rev: xM C)

Processor       : ARMv7 Processor rev 2 (v7l)
BogoMIPS        : 842.70
Features        : swp half thumb fastmult vfp edsp thumbee neon vfpv3
root@beagleboard:/mnt# mono ./mono_bench.exe 
Mono benchmark:
test finished in 3400.879 ms count 10000000

Вот на обычном ноуте x86-ом...

$ mono --version
Mono JIT compiler version 2.6.7 (Debian 2.6.7-5ubuntu3)
Copyright (C) 2002-2010 Novell, Inc and Contributors. www.mono-project.com
        TLS:           __thread
        GC:            Included Boehm (with typed GC and Parallel Mark)
        SIGSEGV:       altstack
        Notifications: epoll
        Architecture:  x86
        Disabled:      none
Intel(R) Core(TM) Duo CPU      T2600  @ 2.16GHz
flags           : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx
 constant_tsc arch_perfmon bts aperfmperf pni monitor vmx est tm2 xtpr pdcm dts
bogomips        : 4322.41
$ mono ./mono_bench.exe 
Mono benchmark:
test finished in 157,181 ms count 10000000

тест такой:

using System;
using System.Timers;

namespace mono_bench
{
	class MainClass
	{
		public static void Main(string[] args)
		{
			Console.WriteLine("Mono benchmark:");
			MainClass mc = new MainClass();
			DateTime time_start = DateTime.Now;
			
			long count = mc.test001();
			
			DateTime time_end = DateTime.Now;
			TimeSpan time_span = time_end - time_start;
			Console.WriteLine("test finished in " + time_span.TotalMilliseconds.ToString() + " ms count " + count.ToString());
		}
		
		public long test001()
		{
			long count = 0;
			int a = 2, b = 3, c = 4;
			for(long i = 0; i < 1E7; i++)
			{
				a *= 2;
				b = a + 3;
				c = a - 8;
				a = b - 5 + c;
				count++;
			}
			return count;
		}
	}
}

бинарник один и тот же, пробовал в VirtualBox-е на windows xp на Mono 2.10.2 - такой же результат как и на ноуте Ubuntu, т.е. не виртуальная машина.

3400 мс против 157... это 21.65 раза, хотя по самому тесту можно было ожидать величин, сравнимых с разницей BogoMIPS... т.е. отставание раз 5 не более

что не так с моим тестом? :)

I-Love-Microsoft ★★★★★
()

Перемножь 2 ооочень больших числа.

gandjubas
()

(time) достаточно для всего.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.