[Ответить в тред] Ответить в тред

03/04/16 - Набор в модераторы 03.04 по 8.04
26/03/16 - Конкурс: Помоги гомункулу обрести семью!
15/10/15 - Набор в модераторы 15.10 по 17.10


[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 71 | 9 | 19
Назад Вниз Каталог Обновить

Аноним 19/05/16 Чтв 10:30:31  127046641  
14636430316060.png (3Кб, 403x132)
Программисты, настало ваше время. Задача на оптимизацию

С++

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

При вычислении любого из элементов не используется никакой другой из элементов этой матрицы.

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

Оперативки это сэкономит немеряно, а т.к. планируется это использовать не на мощных станциях а на рядовых ПК - достаточно важный аспект.

Примерная конфигурация среднестатистического компа - i7, 16gb ddr3

Не подведите меня, докажите, что вы элита.
Аноним 19/05/16 Чтв 10:30:47  127046665
молниеносный бамп
Аноним 19/05/16 Чтв 10:31:23  127046711
Бам-Бам
Аноним 19/05/16 Чтв 10:31:55  127046748
Не дайте утонуть, не можете ответить - бампайте :)
Аноним 19/05/16 Чтв 10:33:08  127046829
Я падаю всё ниже и ниже
Аноним 19/05/16 Чтв 10:33:28  127046850
14636432085990.jpg (50Кб, 600x400)
Бамп
Аноним 19/05/16 Чтв 10:33:44  127046872
>>127046850
Спасибо, друг
Аноним 19/05/16 Чтв 10:34:23  127046926
>Программисты, настало ваше время.
Моё время настало потому, что я за свою работу получаю зарплату в долларах от западных заказчиков, и могу себе позволить практически всё, что захочу. А уебаны вроде тебя, ОП, не получив в ВУЗе никаких знаний, бывают выпизжены оттуда и потом в 30 лет создают треды на дваче о том, как хуёво жить с мамкой. А жизнь-то уже проёбана.
Аноним 19/05/16 Чтв 10:35:22  127047005
14636433228170.jpg (13Кб, 442x275)
>>127046872
Мне просто тоже интересно
Аноним 19/05/16 Чтв 10:35:39  127047036
Если спросите почему я так тороплюсь - время поджимает, и если вдруг окажется, что вычислять ну вообще не вариант - мне придется писать класс интерфейса 6Д матрицы для доступа к этой псевдо 2Д матрице. А я этого не хочу
Аноним 19/05/16 Чтв 10:36:28  127047091
>>127046926
Спасибо, друг
Аноним 19/05/16 Чтв 10:36:41  127047110
>>127046641 (OP)
Ты, умник, опиши нормально задачу. Может там можно использовать какую-нибудь хитрую свертку - тогда нужно курить математику.
Аноним 19/05/16 Чтв 10:37:26  127047170
14636434462840.jpg (171Кб, 1071x1080)
Бамп
Аноним 19/05/16 Чтв 10:38:00  127047214
>>127047110
Это для решения некорректной системы линейных уравнений. Эта матрица по сути - Оператор шестимерный, для которого нужно будет потом искать сопряженный и тэдэ
Аноним 19/05/16 Чтв 10:39:50  127047335
>>127047110
Тут уже ничего не свернешь, по крайней мере я и так уже все как мог сжал и заоптимизировал. Пока там задачи были одномерные или двумерные - хранил в памяти без особых проблем. А тут новый день - новые возможности и надо писать для 3Д
Аноним 19/05/16 Чтв 10:41:03  127047439
Ну же, я знаю, что сейчас прибежит анон с подробными выкладками и всё мне раскидает попутно смешав мой скилл с гавном. Но я не расстроюсь. Давайте, вы можете быть причастны к решению одной очень крутой и важной проблемы.
Аноним 19/05/16 Чтв 10:42:13  127047506
Капитан, мы тонем
Аноним 19/05/16 Чтв 10:43:37  127047613
Неужели тут только пхп-макаки с 300кк в секунду? А простых работяг клавиатуры и монитора нет?
Аноним 19/05/16 Чтв 10:44:47  127047690
Короче пока от вас нет ответа буду ебашить тест на своей машине. Сколько занимает чтение из памяти этого объёма, сколько занимает запись, сколько занимают вычисления. Но если тред за это время утонет - вы виноваты.
Аноним 19/05/16 Чтв 10:45:21  127047728
Вместо того, чтобы написать 10 строк кода, ты засираешь мой /б.
Аноним 19/05/16 Чтв 10:45:52  127047760
Bump
Аноним 19/05/16 Чтв 10:46:29  127047807
>>127047728
Уж лучше так, чем ты своей анимой ебучей
Аноним 19/05/16 Чтв 10:47:55  127047915
А говорят программистам математика не нужна
Аноним 19/05/16 Чтв 10:52:48  127048284
>>127046641 (OP)
Допустим, мы решили хранить матрицу в памяти. Возникает вопрос, как это сделать наиболее оптимально? Поправьте меня, если ошибаюсь, но STL или Boost не вариант, поскольку аллокация/деаллокация при добавлении элементов и т.п. Остается использовать арифметику указателей.
Поскольку храним float, можем вычислить сдвиг и обращаться к участку памяти напрямую.
Аноним 19/05/16 Чтв 10:55:00  127048484
>>127048284
не, никаких библиотек сторонних, буст я вообще терпеть не могу. Только через указатели, но проблема в том, что доступ к каждому конкретному элементу осуществляется не 2, а 6 координатами, каждый раз это делать ручками - ошибусь и концов не найду. Так что если придется - буду писать интерфейс.
Аноним 19/05/16 Чтв 10:59:44  127048885
Cчитай на GPU.
Даже на встроенном залетает.
Тупой кернел который запускаешь на следующую пачку элементов, пока обсчитывающий текущий.
Аноним 19/05/16 Чтв 11:05:05  127049304
>>127048885
Процесс копирования в ГПУ тоже достаточно много времени занимает. Он у меня используется на следующих этапах, где один раз скопировать и много считать. Плюс CUDA в нынешнем своём виде хуёво работает даже с двумерными массивами, и всю эту поеботу нужно разворачивать в одну полосу вообще
Аноним 19/05/16 Чтв 11:06:22  127049397
>>127048885
Хотя скорее всего буду стремится к похожему варианту. Но отработать сам алгоритм хочется как можно проще. Чтоб потом было с чем результат сравнивать
Аноним 19/05/16 Чтв 11:09:57  127049684
>>127046641 (OP)
>Дано - матрица содержащая примерно 3ккк элементов (флоаты), которая в процессе дальнейших вычислений используется 3 раза.

Одномерная?

>При вычислении любого из элементов не используется никакой другой из элементов этой матрицы.

Если элемент самостоятелен, то куда тогда она, вся эта матрица потом идет? В файл?

>Вопрос, сильно ли медленнее будет работать вариант, в котором я буду каждый из этих элементов каждый раз вычислять при необходимости? Вычисление элемента включает в себя три операции деления, три экспоненты и два умножения.

Попробуй

>Оперативки это сэкономит немеряно, а т.к. планируется это использовать не на мощных станциях а на рядовых ПК - достаточно важный аспект.

Винде допизды наши маняфантазии, если ты на винде

>Примерная конфигурация среднестатистического компа - i7, 16gb ddr3

>Не подведите меня, докажите, что вы элита.
sad
Аноним 19/05/16 Чтв 11:11:47  127049814
>>127049304
Копирование надо заранее запускать. Оно у тебя вообще процессор не занимает. Другое дело, что тут надо будет потом настраивать размер блока.
Это если на дискретной.
На встроенных уже сто лет как zero-copy есть.
Делаешь SVM буфер и вперед.
Вообще в таких задачках - быра что то посчитать и получить результат встроенные как минимум не хуже.
Аноним 19/05/16 Чтв 11:13:33  127049931
>>127049397
Вообще, раз говоришь, что матрица используется как оператор, может она имеет какой-то специальный вид (много нулей и т.п.)? Тогда имеет смысл оценить сколько элементов матрицы реально используется и сравнить скорость доступа к памяти через указатель и скорость вычисления элемента.
Аноним 19/05/16 Чтв 11:14:44  127050031
>>127049304
https://software.intel.com/sites/default/files/managed/9d/6d/TutorialSVMBasic.pdf

пример от интела
Аноним 19/05/16 Чтв 11:17:09  127050240
14636458294140.png (35Кб, 1704x572)
Если кому интересно, 100кк элементов. Симуляция не стопроцентная конечно, но я думаю, чт оне сильно далеко от истины будет
Аноним 19/05/16 Чтв 11:20:16  127050465
>>127049684
Касательно того, какого размера матрица. В "реальности" эта матрица шестимерная, но для неё нужно будет искать сопряженную потом. Поэтому для "удобства" её представляю в виде двумерной просто сильно растянутой. И тогда сопряженная матрица будет совпадать с транспонированной.

Вся инфа из этой матрицы будет идти в дальнейшие вычисления и они дадут в итоге матрицу меньшего размера и уже честно двумерную.

Попробовал. Лично на моей машине с запущеным мусором под 1ккк элементов места даже не нашлось, у меня 8гб.

Аноним 19/05/16 Чтв 11:20:58  127050526
>>127050031
за ссылку спасибо
Аноним 19/05/16 Чтв 11:22:03  127050620
>>127046641 (OP)
> Примерная конфигурация среднестатистического компа - i7, 16gb ddr3
лолд

А вообще - не еби себе мозг и заюзай генератор для чтения данных - тем более что тебе только один элемент нужен. Получается ты определяешь генератор, и потом просто перезаписываешь данные. Потом снова пробегаешься генератором, снова перезаписываешь данные, и потом ещё один раз. В итоге в памяти единовременно находится только нужный тебе элемент, с которым ты производишь вычисления.
Аноним 19/05/16 Чтв 11:22:19  127050642
>>127049931
Не, к сожалению нулевых элементов там в общем случае нет. И используются они все одинаково часто.
Аноним 19/05/16 Чтв 11:23:25  127050723
>>127046641 (OP)
Хуево ты конкретизировал.
1) Что известно про порядок, в котором будет осуществляться доступ к элементам? Скорость извлечения элементов из памяти будет выше если к ним будут обращаться в порядке близком к тому, в котором они лежат в памяти.
2) Насколько тебе важна точность? Нельзя ли использовать "быструю" экспоненту с точностью в несколько десятичных знаков, которая существенно быстрее?
3) Каково пространство этих твоих шестимерных координат? Нельзя для сохранить в памяти не полный результат арифметического действия, а частично, скажем, только экспоненты, или только результаты делений в двухмерном массиве и т.п. ?

Вообще опыт говорит мне, что арифметика скорее всего будет БЫСТРЕЕ чем массив, при грамотной реализации. Особенно шестимерный блять массив - дерефернс шести укакзателей это пиздец как долго.

Вообще мой опыт под
Аноним 19/05/16 Чтв 11:25:15  127050883
>>127050240
Лол. Собери это с максимальным уровнем оптимизаций, вангую, что выполнится мгновенно.
Аноним 19/05/16 Чтв 11:26:00  127050950
>>127050723
Вот касаемо порядка доступа. Для самого объёмного вычисления необходимо умножить эту матрицу на себя же транспонированную. Так что один из множителей будет считываться в порядке нахождения в памяти (строка матрицы), а второй скакать через размер строки (столбец, соответственно).
Аноним 19/05/16 Чтв 11:29:13  127051205
>>127050950
Плохо, кеш охуеет. Расположи данные в памяти похитрее: https://en.wikipedia.org/wiki/Z-order_curve
Аноним 19/05/16 Чтв 11:29:15  127051208
>>127050950
эммм размерность матрицы типа 50000х50000 ? как ты будешь такие матрицы перемножать?
Аноним 19/05/16 Чтв 11:29:16  127051211
>>127050723
Кстати да, есть возможность хранить заранее подсчитанные экспоненты. Там буде три матрицы по несколько тысяч (десятков тысяч) элементов. Точность важна. Использовал бы дабл, да памяти не хватает. Потом еще обратную матрицу искать, а она очень чувствительна к таким вещам
Аноним 19/05/16 Чтв 11:30:37  127051320
>>127051208
С трудом ёптель, очевидно же
Аноним 19/05/16 Чтв 11:33:54  127051570
>>127051205
за ссылку спасибо, гляну сейчас
Аноним 19/05/16 Чтв 11:34:33  127051611
>>127051320
ну может ты ниибаца быстрое умножение матрица вкурочишь... иначе оно будет не один час (или день?) считаться. ну хотя бы половину эл-тов можно не считать )
Аноним 19/05/16 Чтв 11:35:00  127051647
>>127051211
>еще обратную матрицу искать
Ты в жопе чувак, с такими-то размерностями.
Аноним 19/05/16 Чтв 11:36:59  127051780
>>127051647
Я знаю, но есть задачи под которые это нужно сделать. Если сделаю с вашими и мы группой опубликуемся - я в статью в журнале запихну ссылку на двач . Всяко лучше ракопабликов
Аноним 19/05/16 Чтв 11:37:15  127051797
>>127051780
* с вашими подсказками
Аноним 19/05/16 Чтв 11:38:30  127051895
>>127051611
Попробую сегодня вообще всё это перенести на видюху. Видюха специально под это дело покупалась год назад примерно. Заебусь только как сука наверняка
Аноним 19/05/16 Чтв 11:39:25  127051975
>>127051780
Вообще с такими размерностями посмотри в сторону viennacl той же или clBLAS
тем более что ты с флоатами работаешь.

Аноним 19/05/16 Чтв 11:40:25  127052028
>>127051975
Вот за это тоже спасибо. В эту сторону не копал еще.
Аноним 19/05/16 Чтв 11:43:12  127052231
>>127051205
Вот ненадо z-order.
Если его в лоб считать, то будет медленно. Там надо таблицу справочную лепить.

Если матрица 6-мерная, то будут аццкие ключи по 6х32 бита.
Если интересно у меня есть код который их считает для произвольной размерности.
Но щастья сортировать ключи недетского размера никакого нет.
Аноним 19/05/16 Чтв 11:45:42  127052414
Бля, мужики, у меня аж скупая слеза покатилась. Я писал сюда и не надеялся особо ни на что. А оказывается есть еще тут не те, которых тут не надо.
Аноним 19/05/16 Чтв 11:53:31  127053049
>>127051895
По GPU я не специалист, но уверен, что без хорошей библиотеке для линейки в твоем случае нет пути, типа тех же eigen или lapack. Там тебе и векторизация арифметики, и быстрые алгоритмы умножения/обращения, которые ты хуй сам реализуешь (а профит будет в виде ускорения на несколько порядков), и эффективное распараллеливание на cpu легким движением руки.

Еще, в свете того, что ты дальше собираешься делать нечто, имеющее отнюдь не квадратичную сложность, то наверняка частичным хешированием в каждом случае можно как-то сделать вычисление эл-тов матрицы далеко не основной проблемой. Удачи.
Аноним 19/05/16 Чтв 12:01:34  127053702
>>127053049
сорри пишу с калькулятора, под героином
Аноним 19/05/16 Чтв 12:02:10  127053762
>>127046641 (OP)
> в котором я буду каждый из этих элементов каждый раз вычислять при необходимости?
вычисляй один раз и складывай в кэш, потом при необходимости доставай оттуда
Аноним 19/05/16 Чтв 12:06:06  127054086
14636487668730.jpg (16Кб, 320x377)
>>127053762
слушай ка...
Аноним 19/05/16 Чтв 12:09:18  127054344
>>127046641 (OP)
>матрица содержащая примерно 3ккк элементов (флоаты)
Ёбу дал?
Аноним 19/05/16 Чтв 12:10:26  127054414
>>127054344
Ебу принял
Аноним 19/05/16 Чтв 12:11:16  127054477
>>127053762
А кэш хранить на жестком диске для экономии озу?
Аноним 19/05/16 Чтв 12:12:35  127054580
>>127054414
У меня от тебя stack overflow
Аноним 19/05/16 Чтв 12:16:53  127054936
>>127054477
я бы предложил ленту для надежности.
А то вдруг битики перепутаются.
Аноним 19/05/16 Чтв 12:19:54  127055175
>>127054936
Мне кажется, что на карьерном самосвале я мог бы передавать эти данные с достаточно высокой скоростью
Аноним 19/05/16 Чтв 12:20:25  127055222
ВЗЛОМЩИК БИТКОИНОВ В ТРЕДЕ ПОСОНЫ ВСЕ В САТОШИ
Аноним 19/05/16 Чтв 12:20:37  127055241
Чем теорией обосновывать, проверь на практике два варианта
Аноним 19/05/16 Чтв 12:21:28  127055300
КАК ПОЛУЧИТЬ 1000 БИТКОИНОВ БЕСПЛАТНО БЕЗ СМС С ПОМОЩЬЮ ДВУХ СПАРЕННЫХ ВИДЕОКАРТ 3DFX VOODOO BANSHEE ИТТ
Аноним 19/05/16 Чтв 12:50:56  127057985
>>127046641 (OP)
>12 GB
Lol
Аноним 19/05/16 Чтв 13:13:32  127059848
14636528130030.webm webm file (1471Кб, 448x536, 00:01:12)
Аноним 19/05/16 Чтв 14:17:54  127064903
14636566743820.jpg (4Кб, 237x167)
Аноним 19/05/16 Чтв 14:23:53  127065443
>>127047613
Хотел тебе ответить нормально, но после этого поста чёт обидно стало за пхп. Иди-ка ты нахуй.
Аноним 19/05/16 Чтв 14:28:13  127065893
14636572936250.jpg (49Кб, 977x513)
>>127046641 (OP)
Разбивай на блоки и кидай на видеокарту через openCL, AMP, Куду.

[Назад][Обновить тред][Вверх][Каталог] [Реквест разбана] [Подписаться на тред] [ ] 71 | 9 | 19
Назад Вверх Каталог Обновить

Топ тредов