Несколько графических процессоров Tesla K80 и парфор петли

Я получил компьютер с Tesla K80 от 4xGPU, и я пытаюсь использовать циклы parfor из Matlab PCT, чтобы ускорить вычисления FFT, и это все еще медленнее.

Вот что я пытаюсь:

% Pupil is based on a 512x512 array

    parfor zz = 1:4
        gd = gpuDevice;
        d{zz} = gd.Index;
        probe{zz} = gpuArray(pupil); 
        Essai{zz} = gpuArray(pupil); 
    end

    tic;
    parfor ii = 1:4
        gd2 = gpuDevice;
        d2{ii} = gd2.Index;
        for i = 1:100
        [Essai{ii}] = fftn(probe{ii});
        end
    end
    toc
    %%

Starting parallel pool (parpool) using the 'local' profile ... connected to 4 workers.
Elapsed time is 1.805763 seconds.
Elapsed time is 1.412928 seconds.
Elapsed time is 1.409559 seconds.

Starting parallel pool (parpool) using the 'local' profile ... connected to 8 workers.
Elapsed time is 0.606602 seconds.
Elapsed time is 0.297850 seconds.
Elapsed time is 0.294365 seconds.
%%
tic; for i = 1:400; Essai{1} = fftn( probe{1} ); end; toc
Elapsed time is 0.193579 seconds !!!

Почему открытие 8 рабочих происходит быстрее, так как в принципе я хранил свои переменные только в 4gpu (из 8)?

Кроме того, как использовать Tesla K80 в качестве одного графического процессора?

Мерси, Николас

2 ответа

Я сомневаюсь, что parfor работает для систем с несколькими GPU. Если скорость критична и вы хотите в полной мере использовать преимущества своих графических процессоров, я предлагаю написать свой собственный маленький скрипт CUDA с использованием библиотеки cuFFT: http://docs.nvidia.com/cuda/cufft/

Вот как написать ваш mex-файл, содержащий код CUDA: http://www.mathworks.com/help/distcomp/run-mex-functions-containing-cuda-code.html

Большое спасибо за ваш быстрый ответ и за ссылки! Это правда, что я пытался избежать CUDA, но это лучший вариант для распространения БПФ. Хотя я думал, что parfor и spmd были отличными инструментами для нескольких графических процессоров..

Другие вопросы по тегам