如果想要将矩阵运算放到GPU上面跑的话,需要使用CuMatrix和CuVector,以替换CPU版的Matrix和Vector类。因为CuMatrix类使用的是GPU的存储空间,所以不能将CuMatrix和Matrix混合使用。kaldi也会判断某个运算需要使用GPU或者CPU,需要人为编程指定。
1.kaldi编译
默认的,如果系统路径中包含nvcc,那么编译选项HAVE_CUDA=1,Makefile里面关于GPU编译的选项将会打开。如果机器上面有GPU。
如果不想开启GPU编译,那么可以增加configure的选项-use-cuda=no。
如果kaldi没有找到cuda的安装路径,但是想要使用的话,可以增加选项-cudatk-dir=/opt/cuda-4.2。
如果想查看编译的kaldi是否使用了cuda,可以grepkaldi.mk,如果发现nvcc,说明使用了cuda。
2.程序执行
程序运行是否使用了GPU,可以根据程序日志查看,例如:
LOG (nnet-train-simple:IsComputeExclusive():cu-device.cc:229) CUDA setup operating under Compute Exclusive Mode.
LOG (nnet-train-simple:FinalizeActiveGpu():cu-device.cc:194) The active GPU is [1]:
LOG (nnet-train-simple:FinalizeActiveGpu():cu-device.cc:194) The active GPU is [1]: