• Регистрация
itmgk
itmgk +10.07
н/д

С чего начать?

25.02.2020

Необходима помощь с переносом алгоритма на матлаб+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 (время выполнения). алгоритм тут не весь, если договоримся по оплате - то поработаем...

Теги

    25.02.2020

    Ответы

    • itmgk
      itmgk+10.07
      27.02.2020 13:19

      спасибо всем за ответы :)

      потихоньку вникаю...

      вопрос - насколько быстрее работает математика на целых числах, чем на float и double? ибо, если прилично вырастет производительность - думаю, что будет иметь смысл изначальный массив привести к целочисленному (к примеру, умножив данные на 1000), а затем итог привести к double (обратная операция)

      есть у кого-то такие данные?

      P.S.: уже нашел информацию по оптимизации времени выполнения расчетов (может, кому пригодится) - операция деления (по крайней мере, на процессорах) выполняется в 2 раза медленнее, чем умножение. т.е., выполняя 100/2,5 процессор потратит в 2 раза больше времени (и ресурсов), чем если бы было действие 100*0,4. 

      • _______ ____________
        _______ ____________ -1.52
        5.03.2020 08:18

        Спасибо за ценную информацию!

        • itmgk
          itmgk+10.07
          5.03.2020 08:38

          да не за что...

          можете подсказать, куда копать?

          создал простой массив из чисел

          пытаюсь найти среднее по результату вычитания (в функцию 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 должно освободить тогда?)