Ошибка преемственности CPU и GPU

Обсуждение вопросов связанных с параллельными и распределенными вычислениями

Модератор: Admin

ВиталийБН
Пользователь
Сообщения: 9
Зарегистрирован: Пт июл 14, 2017 1:54 pm

Ошибка преемственности CPU и GPU

Сообщение ВиталийБН » Пт июл 14, 2017 2:10 pm

Здравствуйте! У меня MatlabR17a последние драйверы CUDA8

Суть проблемы в том, что код для GPU выполняется, а ТОЧНО такой же код для CPU нет! Выдается ошибка о несоответствии размерностей! Почему так получилось. Интересно, что на GPU выполняется без проблем!

Вот постой пример программы для GPU и для CPU:

GPU =================================================

Код: Выделить всё

A = gpuArray([6 7; 8 9])
B = gpuArray([2; 3])
C = arrayfun(@minus,A,B)

    A =

    6 7
    8 9


    B =

    2
    3


    C =

    4 5
    5 6


CPU =================================================

Код: Выделить всё

A = double([6 7; 8 9]);
B = double([2; 3]);
C = arrayfun(@minus,A,B)


    Error using arrayfun
    All of the input arguments must be of the same size and shape.
    Previous inputs had size 2 in dimension 2. Input #3 has size 1

    Error in getkmem_new (line 988)
    C = arrayfun(@minus,A,B)

=================================================

Большое спасибо за любую помощь!

sandy
Эксперт
Сообщения: 5499
Зарегистрирован: Ср сен 22, 2004 4:49 pm

Re: Ошибка преемственности CPU и GPU

Сообщение sandy » Пн июл 17, 2017 7:56 pm

Обычная arrayfun и GPUшная arrayfun не идентичны по возможностям. В частности, GPUшная производит expansion of singleton dimensions, а обычная - нет, что вы и наблюдаете. Читайте справку.
С уважением

Александр Сергиенко

ВиталийБН
Пользователь
Сообщения: 9
Зарегистрирован: Пт июл 14, 2017 1:54 pm

Re: Ошибка преемственности CPU и GPU

Сообщение ВиталийБН » Пн июл 17, 2017 9:48 pm

Спасибо за ответ!

дело в том, что тут:

http://uk.mathworks.com/help/distcomp/arrayfun.html

Я прочитал, что:

This method of a gpuArray object is very similar in behavior to the MATLAB® function arrayfun, except that the actual evaluation of the function happens on the GPU, not on the CPU. Thus, any required data not already on the GPU is moved to GPU memory, the MATLAB function passed in for evaluation is compiled for the GPU, and then executed on the GPU.

Сказано, что это очень похоже, и что разница в том что все будет на GPU. И не обратил внимание на слово очень. Даже не мог предположить, что может быть такое!

Будем надеяться, что в будущих версиях Matlab это недоразумение будет устранено.