CUDA之cublas实例

代码如下:

#include <iostream> #include <ctime> #include <cublas.h> //使用cublas必须包含的头文件 #include <cutil_inline.h> using namespace std; int main( int argc, char** argv) { int n=5000000; float *x=new float[n]; float *y=new float[n]; float *x_dev,*y_dev; for(int i=0;i<n;++i) x[i]=y[i]=static_cast<float>(i); cublasInit();//初始化cublas环境 cublasAlloc (n, sizeof(*x), (void**)&x_dev);//在设备上分配空间 cublasAlloc (n, sizeof(*y), (void**)&y_dev);//在设备上分配空间 cublasSetMatrix (n, 1, sizeof(*x), x, n, x_dev, n);//把主机上的数据移入设备中 cublasSetMatrix (n, 1, sizeof(*x), y, n, y_dev, n);//把主机上的数据移入设备中 unsigned int timer = 0; cutilCheckError( cutCreateTimer( &timer)); cutilCheckError( cutStartTimer( timer)); for(int i=0;i<2000;++i) cublasSaxpy (n, 1.0f, x_dev, 1, y_dev, 1); //调用saxpy函数 cutilCheckError( cutStopTimer( timer)); cout<<"GPU处理时间: "<<cutGetTimerValue(timer)<<"毫秒"<<endl; cutilCheckError( cutDeleteTimer( timer)); cublasGetMatrix (n, 1, sizeof(*x), y_dev, n, y, n); //把设备上的数据移入主机中 cublasFree (x_dev); //释放设备空间 cublasFree (y_dev); //释放设备空间 cublasShutdown(); //关闭cublas环境 // 主机上相应程序,作比较 clock_t start=clock(); for(int i=0;i<2000;++i) { for(int j=0;j<n;++j) y[j]+=1.0f*x[j]; } cout<<"CPU处理时间: "<<static_cast<int>(clock()-start)<<"毫秒"<<endl; delete[] x; delete[] y; }

运行结果如下:

GPU处理时间: 2493.16毫秒
CPU处理时间: 19094毫秒

环境:CUDA toolkit3.2+Windows XP+CUDA SDK中的vs2008模板release编译通过,显卡是GeForce GT240。感觉测试效果不太好。大家可根据自己的情况进行测试,报告一下结果吧。项目文件下载(把扩展名改为rar然后解压即可)。

你可能感兴趣的:(CUDA之cublas实例)