С чего начать?
Необходима помощь с переносом алгоритма на матлаб+cuda
на обложке расчет около 2 млн параметров в 8 потоков на процессоре i7
сейчас стоит вопрос - переписать на матлаб+cuda, чтобы считала видеокарта (GTX850), либо брать 4 процессорный сервер с 80 потоками... ибо, по хорошему, надо будет запускать с комбинациями под 1 млрд...
будет ли быстрее видеокарта? сможет ли матлаб нормально распараллелить?
Дано:
массив из файла (возьмем, для начала) 35000 строк (i), 4 столбца (столбцы - A,B,C,D).
все элементы double (если будет float - насколько увеличится производительность?)
2 параметра - X и Y. их необходимо полностью перебрать.
допустим, X от 1 до 10, Y от 10 до 100
необходимо найти среднее значение при данных X и Y для каждой строки массива.
Ищем среднее для значений (A - B) для строк, предшествующим текущему i на X строк (вроде понятно объяснил), а так же, среднее для С - D, для строк с i-Y до i
результаты для каждого значения можно в новый массив, с возможностью сортировки или по 1-му среднему, или по второму
Если не сложно - ответьте на вопросы с начальным примером данного алгоритма? Ибо в матлаб - полный 0... с Вашей начальной помощью, надеюсь, разберусь...
просьба не отсылать к документации, нужны примеры... вопросов от меня в дальнейшем будет ну очень много - это только начало))
И что лучше использовать для данного случая - Optimization Toolbox или Parallel Computing Toolbox? И как их начать использовать? Документацию, конечно, изучаю сижу - но слишком много информации - быстро не осилю, по этому нужна помощь...
P.S.: Будет ли быстрее считаться на видеокарте все это? сможет распараллелить?
Заранее большое спасибо за ответы.
P.S.: Если кто возьмется помочь за адекватную плату - пишите... но желательно результаты выполнения теста на cpu и gpu (время выполнения). алгоритм тут не весь, если договоримся по оплате - то поработаем...
Ответы
спасибо всем за ответы :)
потихоньку вникаю...
вопрос - насколько быстрее работает математика на целых числах, чем на float и double? ибо, если прилично вырастет производительность - думаю, что будет иметь смысл изначальный массив привести к целочисленному (к примеру, умножив данные на 1000), а затем итог привести к double (обратная операция)
есть у кого-то такие данные?
P.S.: уже нашел информацию по оптимизации времени выполнения расчетов (может, кому пригодится) - операция деления (по крайней мере, на процессорах) выполняется в 2 раза медленнее, чем умножение. т.е., выполняя 100/2,5 процессор потратит в 2 раза больше времени (и ресурсов), чем если бы было действие 100*0,4.
Спасибо за ценную информацию!
да не за что...
можете подсказать, куда копать?
создал простой массив из чисел
пытаюсь найти среднее по результату вычитания (в функцию mean не отправляйте - там будет все несколько сложнее...)
специально создал и запараллелил цикл, чтобы 1000 раз считало тоже самое - нужно изначально посмотреть выигрыш в производительности - а то, может быть, и не стоит алгоритм переносить...
tic();
parfor n=1:1000
for i=len:-1:1 %так нужно, чтобы был обратный порядок
X = data1(i,3)-data1(i,4) + X;
end
end
X=X/len
toc ();
в итоге - на процессоре время выполнения ~0.01, на видеокарте 10 сек
вопрос - где порылась собака?
и еще - gpuDevice дает KernelExecutionTimeout: 1. вроде указал в настройках видеокарт, что использовать по умолчанию встроенную видюху (вроде как nvidia должно освободить тогда?)