这是使用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 …Run Code Online (Sandbox Code Playgroud) 我正在使用[PTX文件与matlab parallel.gpu.CUDAkernel] [2]在GPU上并行工作[此文件] [1].我[kron tensor product] [3]的问题如下.我的代码应该乘以两个向量kron(a,b)乘以第一个向量a=<32x1>的每个元素乘以另一个向量的所有元素,b=<1x32>输出向量大小将是k<32x32>=a.*b.我试着用C++编写它并且它起作用,因为我只关心求和2d数组的所有元素.我认为我可以轻松实现一维数组因为m=sum(sum(kron(a,b)))我正在处理的代码
for(i=0;i<32;i++)
for(j=0;j<32;j++)
k[i*32+j]=a[i]*b[j]
Run Code Online (Sandbox Code Playgroud)
这意味着让第a[i]th个元素乘以eachelement b而且我会使用32块,每个块都有一个32线程,代码应该是
__global__ void myKrom(int* c,int* a, int*b) {
int i=blockDim.x*blockIdx.x+threadIdx.x;
while(i<32) {
c[i]=a[blockIdx.x]+b[blockDim.x*blockIdx.x+threadIdx.x];
}
Run Code Online (Sandbox Code Playgroud)
这应该成为blockIdx.x外部循环的技巧,但事实并非如此.任何身体可以告诉我在哪里,我可以要求平行的方式来做平行和.