Advanced member
Статус: Не в сети Регистрация: 27.02.2007 Откуда: Москва Фото: 54
1 профильный конфиг, 52с с включенной многопоточностью.
З.Ы. дизассемблировал софтину в monodis, что-то мне этот алгоритм напоминает.. Добавлено спустя 25 минут, 17 секунд Ну вот... Теперь понятно, что он мне напоминает. Вся основная работа выполняется с помощью класса Matrix:
Код:
internal class Matrix { private int columns; private double[,] matrix; private int rows;
public Matrix(int size) { this.matrix = new double[size, size]; }
public Matrix(int sizeA, int sizeB) { this.rows = sizeA; this.columns = sizeB; this.matrix = new double[sizeA, sizeB]; }
~Matrix() { Console.WriteLine("Finalize"); }
public int Columns { get { return this.rows; } }
public double this[int i, int j] { get { return this.matrix[i, j]; } set { this.matrix[i, j] = value; } }
public int Rows { get { return this.rows; } } }
И методов Matmul и Matmul2:
Код:
private static void Matmul(Matrix A, Matrix B, Matrix C) { int rows = A.Rows; for (int i = 0; i < rows; i++) { for (int j = 0; j < rows; j++) { double num5 = C[i, j]; for (int k = 0; k < rows; k++) { num5 += A[i, k] * B[k, j]; } C[i, j] = num5; } } }
Код:
public void Matmul2(object matrixmassive) { Matrix[] matrixArray = (Matrix[]) matrixmassive; Matrix matrix = matrixArray[0]; Matrix matrix2 = matrixArray[1]; Matrix matrix3 = matrixArray[2]; Counter counter = new Counter(); counter.Start(); int rows = matrix.Rows; for (int i = 0; i < rows; i++) { for (int j = 0; j < rows; j++) { double num5 = matrix3[i, j]; for (int k = 0; k < rows; k++) { num5 += matrix[i, k] * matrix2[k, j]; } matrix3[i, j] = num5; } } counter.Stop(); this.time2 = counter.ToString(); }
Подсчет времени выполняется с помощью обертки к NTшным счетчикам производительности:
Код:
internal class Counter { private long freq = 0; private long startCount = 0; private long stopCount = 0; private long totalCount = 0;
Member
Статус: Не в сети Регистрация: 20.08.2005 Откуда: Москва
HertZ а я и не скрывал. но дело не в классах матрицы и таймере, это вещь стандарт. а реализации многопоточности и , главное, почему такие странные результаты. вот в чем прикол.
ЗЫ дизассемблировать для IL кода сильно сказано
Если непонятно по ссылке выше, то для любой виртуальной машины есть соответствующий ассемблер, так же как и для железной реалиации вычислительной машины. И перевод из двоичной формы в читабельную (в данном случае это MSIL) в любом случае называется дизассемблированием.
Ivanhoe, это я все к тому, что данный тест не предназначен для проверки железа, совершенно. Ну а лицензионные вопросы и ваша совесть-это не мое дело.
Member
Статус: Не в сети Регистрация: 20.08.2005 Откуда: Москва
HertZ просто вами было сказано очень пафосно дизассемблировать. для этого лучше всего подходит Рефлектор. ладно, не суть. Лицензия на что мне нужна? на матрицы?) а для чего этот тест предназначен? я его вообще писал из спортивного интереса и не более. я не претендую на его уникальность и гениальность.
Advanced member
Статус: Не в сети Регистрация: 27.02.2007 Откуда: Москва Фото: 54
Ivanhoe писал(а):
просто вами было сказано очень пафосно дизассемблировать
Ой да ладно, какой смысл в этом? Мне за это поднимут зарплату?
Ivanhoe писал(а):
Лицензия на что мне нужна? на матрицы?)
Если в коде нет копирайтов и не оговорена лицензия, то любое использование его без письменного разрешения автора запрещено. Писать свою реализацию этих алгоритмов можно, а копировать в ноль нельзя. Все просто... В следущий раз будьте осторожны, вдруг злой автор какой-нибудь библиотеки попадется. Я-то автору ничего докладывать не собираюсь, да и ему скорее всего пофиг будет. )
Ivanhoe писал(а):
а для чего этот тест предназначен?
Для того, что написано в статье. Сравнения быстродействия кода, генерируемого JIT-компилятором с кодом, сгенерированным статически, выполняемого на той же системе. Для чего-либо другого его использовать бесмысленно просто потому, что например настройки уборщика мусора, или аллокатора памяти могут быть очень разные, либо вообще может использоваться статическая компиляция байткода (mono, dotgnu), или интерпретатор ассемблера CLR.
Member
Статус: Не в сети Регистрация: 20.08.2005 Откуда: Москва
HertZ вообще там речь идет в статье немного о другом, о вообще возможностей Нет для математики. ну и дается сравнение далее. Согласен, этот тест не отражает реальной расстановки сил,это ясно. но кое какие результаты тем не менее имеются интересные. почему они такие разные? неясно, надо алгоритм совершенствовать. и я вообще сомневаюсь что настройки могут хоть как-то значимо повлиять на этот тест. хотя..)
Advanced member
Статус: Не в сети Регистрация: 27.02.2007 Откуда: Москва Фото: 54
Ivanhoe, если писать на c# бенчмарки для процессора, то надо использовать указатели, unsafe и самостоятельно выделять память под данные, используя методы Marshal.AllocHGlobal, Marshal.FreeHGlobal и другие для работы с памятью.. Ну и естественно классы вроде тех что в статье использовать по-минимуму. Таким образом можно будет преодолеть попытки CLR проявить сообразительность и сделать результаты более-менее адекватными..
Member
Статус: Не в сети Регистрация: 20.08.2005 Откуда: Москва
HertZ была такая мысль конечно, тогда правда все прелести c# нах идут). Хотя попробывать можно. Но я думаю дело не в этом, это скорее ОС чудит то дает приоритет то нет. а что CLR то? Тогда вообще лучше с++ вспомнить...
Advanced member
Статус: Не в сети Регистрация: 27.02.2007 Откуда: Москва Фото: 54
Ivanhoe писал(а):
тогда правда все прелести c# нах идут)
Не-а, если не использовать нативные библиотеки, то это не помешает программе запускаться на разных платформах.. Ну и плюс к тому, на х86 и амд64 будет собираться 32 и 64-разрядный код соответственно..
Member
Статус: Не в сети Регистрация: 23.08.2008 Откуда: Пермь
Ivanhoe я проводил тест раз по 5 точно и для достоверности результатов перезагружал комп, но результаты не особенно то сильно изменились! При включённом multi результат всегда был хуже, в среднем, на 8-12 секунд, чем результат с отключённым multi! Причину подобного явления сам не знаю.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения