opencv降版本和安装增加cuda支持

opencv降版本貌似根本不用删除旧版。直接安装新版本即可。
想想应该也是这样,就文件都被覆盖了。
网上那个删除旧版本的方法并不好用。
比较方便的方法是make uninstall,但是这个并不靠谱,谁他妈还留着以前的安装文件夹和make出来的东西。
还有个rm的查找文件关键字有没有opencv,这他妈更不靠谱了,容易误删文件。
所以,我直接安装旧版。
opencv3.0.0太他妈坑爹了。比2.4版本变化太大。比如ML库中的函数都他妈变了,全是C++版的了。

Read More

Matlab调用c版gpu程序

matlab中声明parallel.gpu.CUDAKernel('add2.ptx','add2.cu','add2');
其中,add2.ptx由nvcc -ptx add2.cu生成。add2.cu为源程序,如果没有源程序,需要声明程序入口('add2.ptx','int * a,int * b','add2').add2为add2.cu中的函数。即为其中声明为__global__的函数。当输入参数中有数组时,数组的尺度是不会传入的。需要使用其他参数传入。
例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
k1 = parallel.gpu.CUDAKernel('add2.ptx','add2.cu','add2');
%设置线程
k1.GridSize = [4,1,1];
k1.ThreadBlockSize = [1024,1,1];

N = 100;
a = int32(rand(N,1)*100);
b = int32(rand(N,1)*100);
ina = gpuArray(a);
inb = gpuArray(b);
%转换到gpu内存中


out1 = gpuArray(int32(rand(N,1)*100));

inN = gpuArray(N);
ores = feval(k1,ina,inb,inN,out1);
res = gather(ores);
out = gather(out1);
%转换回来
mlres = a+b;

sum(res-mlres)

此时的add2函数为:

1
2
3
4
5
6
7
8
9
__global__ void add2(const int * a ,const int * b, const int N, int * c)
{
int tid = threadIdx.x + blockIdx.x*blockDim.x;
while(tid < N)
{
c[tid] = a[tid] + b[tid];
tid += blockDim.x * gridDim.x;
}
}

声明为const为输入量,只有非const为输出。但好像并没有什么鸟用,只是说明了输出的大小,如果输出跟输入某个一样大小,完全可以

1
2
3
4
5
6
7
8
9
__global__ void add2(const int * a ,const int * b, const int N, int * c)
{
int tid = threadIdx.x + blockIdx.x*blockDim.x;
while(tid < N)
{
a[tid] = a[tid] + b[tid];
tid += blockDim.x * gridDim.x;
}
}

然后使用ores = feval(k1,ina,inb,inN);调用。

gpu初测

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
tic;
N = 100000;
A = gpuArray(rand(2^16,1));
for i=1:N
B = fft(A);
A = B;
end
toc;

tic;
mA = rand(2^16,1);
for i=1:N
mB = fft(mA);
mA = mB;
end
toc;

时间大概就是:
Imgur

cuda 安装

https://developer.nvidia.com/cuda-downloads
注意 The Local Installer has all of the components embedded into it (toolkit, driver, samples)
说明丫里面有driver

但是,在ubuntu中你要是不安装驱动,新显卡是无法切换到字符终端的,也就是说ctrl alt fn过去是黑屏。

最开始,先切换到黑屏,然后ssh过去,执行

1
sudo service lightdm stop

把X干掉
然后在官网上下载了驱动,安装。然后

1
sudo service lightdm start

分辨率就正常了,这他妈应该说明驱动好了。
然后装cuda
但是呢,装完不正常,编译样例都过,执行deviceQuery就完了。
最莫名其妙的是当执行

1
sudo ./NVIDIA-Linux-x86_64-352.21.run --uninstall

的时候,丫竟然说你没装驱动。
然后

1
sudo apt-get --purge remove cuda

再然后,ctrl alt fn切到字符终端安装cuda
莫名其妙的就ok 了
从上面注意中看到,他说里面是有驱动的。
所以只能推断,从ssh过去装的驱动是有问题的。