![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 16.10.2010
Сообщений: 47
|
![]()
Доброго времени суток!
Задача такова: есть матрица-эталон и 50.000.000 других матриц. Нужно вычислить процент совпадений каждой матрицы с эталонной. Размерность эталона и дочерних - 50*50. Весьма приближенно выглядит так: Код:
Все это безобразие выполняется 14.9 сек. Нужно добиться результата в 100 мс. Вопрос - как? Заранее спасибо за ответы. |
![]() |
![]() |
![]() |
#2 |
Участник клуба
Регистрация: 03.06.2009
Сообщений: 1,871
|
![]()
нужно сократить количество проверок на равенство:
Код:
вам необходимо проверить на неравенство и в случае его выполнения немедленный выход из цикла, чтоб начать обрабатывать другую матрицу из Ваших 50.000.000. Вот такую строчку добавьте: Код:
но в цикле по X, наверное, должен продолжать работать, но вам и этого нет смысла доканчивать - надо и его прервать. значит,надо поставить ещё одну строчку: Код:
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
Последний раз редактировалось NetSpace; 17.09.2011 в 00:17. |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 08.09.2010
Сообщений: 880
|
![]()
Задачка, граждане, чисто разводная: либо автор народ разводит, либо его.
Повезло же автору с высокопроизводительным кластером. А у простых смертных даже с одной операцией сравнения в циклах эти 12,5 млрд итераций на двухядерном интеле крутятся ~4 минуты. А какая память в его распоряжении, где он собирается хранить 50 млн. матриц размерностью 250 элементов? Завидно. Ведь даже для целочисленных массивов потребуется не менее 50 Гб ОЗУ (в реальности много больше). Одна незадача: где он столько матриц возьмет? А через тысячи подключенных периферийных устройств., наверное Отсюда вывод: т.к. задача чисто теоретическая, то и ответ такой же. Чтобы добиться результата в 100 мс нужно обратиться к спонсорам, чтобы те увеличили производительность этого крутого компа в 150 раз. 2 NetSpace. Если прочитать условие задачи внимательно ("Нужно вычислить процент совпадений каждой матрицы..." Т.е. определить сколько в каждой матрице элементов не совпадают (совпадают) с элементами эталонной, а не то сколько матриц совпадают с эталонной), то о предложенной вами оптимизации здесь речи идти не может. Задача поставлена так, что все 12.5 млрд итераций в этих трех циклах обязательно нужно провернуть. Последний раз редактировалось Прик; 17.09.2011 в 05:09. |
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 05.09.2011
Сообщений: 869
|
![]()
Прик прав. Делим 15 сек на 50 млн и получаем время обсчета одной матрицы 0.3 микросекунды. Если и дальше пойти, то получим единичное сравнение элементов (с выборкой чисел) происходит за 300/2500 = 1/8 наносекунды, что равно одному такту на процессоре с частотой 8 ГГерц. Хорошо, пусть 4 ядра и прога скомпилирована под мультипоточность. Но все равно сильно сомнительно..
Ко всему прочему, если важна скорость И матрицы все фиксированного размера, а также координаты отличий не важны - зачем тогда организовывать ДВОЙНОЙ цикл?.. Одинарным циклом было бы быстрее )). Может, там 14.5 мин фигурирует? )) про 100 миллисекунд вообще молчу..
Предпочитаю на "ты".
|
![]() |
![]() |
![]() |
#5 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 16.10.2010
Сообщений: 47
|
![]()
Прик, часть я умолчал - матрицы дочерние генерируются по опр. принципу, все 50 млн. в памяти хранить не нужно.
Если приблизить к реальности, будет выглядеть так: Код:
|
![]() |
![]() |
![]() |
#7 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
I'm learning to live...
|
|
![]() |
![]() |
![]() |
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Для любых 2 матриц (вводятся) надо найти объединение и пересечение этих матриц (Pascal) | novicok | Помощь студентам | 6 | 15.09.2011 09:51 |
Обработка Матриц(Упорядочивание Элементов,Вывод На Экран Матриц При Условии...) | timepoka | Помощь студентам | 8 | 01.07.2011 13:20 |
умножение матриц | Mila Volkova | Помощь студентам | 3 | 25.12.2010 14:17 |
Сравнение матриц | xakkkkker | Помощь студентам | 0 | 02.12.2010 22:57 |
Сравнение 2-ух квадратных матриц размер 3*3 | Artem1987 | Помощь студентам | 2 | 23.03.2008 16:16 |