powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Насчет производительности
8 сообщений из 83, страница 4 из 4
Насчет производительности
    #39214628
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилпервую матрицу хранить по строкам, вторую по столбцам(транспонированую)
полезно что для SQL рассчётов, что C
Пофиг. Просто создать правильные индексы. Нормальная БД вообще в таблицу не полезет, будет брать данные из упорядоченного индекса.
...
Рейтинг: 0 / 0
Насчет производительности
    #39214647
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилtip78что если в памяти хранить по столбам например?

первую матрицу хранить по строкам, вторую по столбцам(транспонированую)
полезно что для SQL рассчётов, что C

а чем полезны эти пляски?
(спрашиваю для просвещения, как НЕ математик)
...
Рейтинг: 0 / 0
Насчет производительности
    #39214652
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima TПри такой структуре похоже вообще селектом не посчитать. Сломал мозг в
попытках придумать условие объединения.
Мой запрос с первой страницы пробовал?

Сейчас попробовал. Подходит. Оказалось я в тестовых данных накосячил. В итоге совсем запутался.
Матрицы 500000*5 с индексами 4 сек. работает. Без индексов - 5 сек.

скрипт
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
IF object_id('tempdb..#a') IS NULL begin
	-- заполнение матриц
	create table #a (x int, y int, v float(53))
	declare @i int
	set @i = 1

	while @i <= 500000 begin
		insert into #a values (@i, 1, @i)
		insert into #a values (@i, 2, @i + 0.1)
		insert into #a values (@i, 3, @i + 0.2)
		insert into #a values (@i, 4, @i + 0.3)
		insert into #a values (@i, 5, @i + 0.4)
		set @i = @i + 1
	end
	CREATE CLUSTERED INDEX #IX_ax ON #a (x, y)

	select x as y, y as x, v + 0.5 as v into #b from #a 
	CREATE CLUSTERED INDEX #by ON #b (y, x)
end
go

select #b.x, #a.y, sum(#a.v * #b.v) 
	from #a join #b on #b.y = #a.x
	group by #b.x, #a.y

...
Рейтинг: 0 / 0
Насчет производительности
    #39214656
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78а чем полезны эти пляски?
(спрашиваю для просвещения, как НЕ математик)

вычисляем скалярное произведение строки первой на столбец второй
если вторая матрица хранится по строкам как и первая - придётся обращаться к несмежным ячейкам памяти -
выборка и работа кэша процесссора станут неэффективными и лишимся возможности на полную катушку задействовать SSE/AVX
...
Рейтинг: 0 / 0
Насчет производительности
    #39217002
log_here
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimmf28Есть такая задача, умножить одну матрицу на другую , делаю я эту в БД занимает оно 24 часа, думаю если вот перемножать матрицы на С++,а не SQL даст ли оно выигрыш в производительности, в каждой матрице где то 500 тысяч записей ну и 5 столбиков?

не читал всю тему, отвечу, что есть формулы для квадратных матриц, которые делают перемножение не за N * N * N, а за N ^ 2.7 (примерно), выигрыш ощущается. Твои матрицы можно свести к квадратным, дописав нули. А можно, наверное, и для неквадратных ускоряющие формулы вывести.
...
Рейтинг: 0 / 0
Насчет производительности
    #39217199
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
log_hereDimmf28Есть такая задача, умножить одну матрицу на другую , делаю я эту в БД занимает оно 24 часа, думаю если вот перемножать матрицы на С++,а не SQL даст ли оно выигрыш в производительности, в каждой матрице где то 500 тысяч записей ну и 5 столбиков?

не читал всю тему, отвечу, что есть формулы для квадратных матриц, которые делают перемножение не за N * N * N, а за N ^ 2.7 (примерно), выигрыш ощущается. Твои матрицы можно свести к квадратным, дописав нули. А можно, наверное, и для неквадратных ускоряющие формулы вывести.
и что получится, если умножить на 0?
...
Рейтинг: 0 / 0
Насчет производительности
    #39217306
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
log_hereDimmf28Есть такая задача, умножить одну матрицу на другую , делаю я эту в БД занимает оно 24 часа, думаю если вот перемножать матрицы на С++,а не SQL даст ли оно выигрыш в производительности, в каждой матрице где то 500 тысяч записей ну и 5 столбиков?

не читал всю тему, отвечу, что есть формулы для квадратных матриц, которые делают перемножение не за N * N * N, а за N ^ 2.7 (примерно), выигрыш ощущается. Твои матрицы можно свести к квадратным, дописав нули. А можно, наверное, и для неквадратных ускоряющие формулы вывести.
Предлагаешь матрицу 5*500000 привести к 500000*500000, т.е. сделать ее в 100000 раз больше и думаешь ускорить потом это какими-то алгоритмами? Похоже ты даже то что процитировал не почитал.
...
Рейтинг: 0 / 0
Насчет производительности
    #39217318
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В науке и технике для представления толстых матриц (больше тыщи строк или столбцов) используется
механизм Sparse matrix (разреженные).

Представить себе матрицу порядка 50 на 50 тыщ которая-бы несла ценную и полезную инфу весьма
сложно.
...
Рейтинг: 0 / 0
8 сообщений из 83, страница 4 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / Насчет производительности
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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