pyC*_*uda 9 parallel-processing matlab cuda gpu image-processing
这是使用Jacket/matlab的ginfo的输出:
Detected CUDA-capable GPUs:
CUDA driver 270.81, CUDA toolkit 4.0
GPU0 Tesla C1060, 4096 MB, Compute 1.3 (single,double) (in use)
GPU1 Tesla C1060, 4096 MB, Compute 1.3 (single,double)
GPU2 Quadro FX 1800, 742 MB, Compute 1.1 (single)
Display Device: GPU2 Quadro FX 1800
Run Code Online (Sandbox Code Playgroud)
问题是 :
clc; clear all;close all;
addpath ('C:/Program Files/AccelerEyes/Jacket/engine');
i = im2double(imread('cameraman.tif'));
i_gpu=gdouble(i);
h=fspecial('motion',50,45);% Create predefined 2-D filter
h_gpu=gdouble(h);
tic;
for j=1:500
x_gpu = imfilter( i_gpu,h_gpu );
end
i2 = double(x_gpu); %memory transfer
t=toc
figure(2), imshow(i2);
Run Code Online (Sandbox Code Playgroud)
任何有关代码的帮助将不胜感激.正如您所看到的,用于演示GPU功能的非常简单的示例,已不复存在.
同时使用两个 Tesla:编写一个 MEX 文件并调用cudaChooseDevice(0)
,启动一个内核,然后调用cudaChooseDevice(1)
并执行另一个内核。内核调用和内存复制(即cudaMemcpyAsync
和cudaMemcpyPeerAsync
)是异步的。我在我的其他答案之一中给出了一个关于如何编写 MEX 文件(即 DLL)的示例。只需向该示例添加第二个内核即可。仅供参考,如果您可以进行一些 C/C++ 编程,则不需要 Jacket。另一方面,如果您不想花时间学习Cuda SDK或者您没有 C/C++ 编译器,那么您将不得不使用 Jacket 或gp-you或GPUlibparfor
,直到 Matlab 改变工作方式。
另一种方法是从 Matlab调用OpenCL (同样通过 MEX 文件)。然后您可以在所有 GPU 和 CPU 上启动内核。同样,这需要一些 C/C++ 编程。