关于CUFFT
2015-07-23 20:49
330 查看
我们知道,程序在首次执行调用GPU函数时,会有一个初始化的过程。该初始化过程有很大的开销,不应被计入实际执行时间。然而我们发现,在调用CUFFT库的时候,第一次生成plan handle 也会有很大的开销:
运行结果:
Create plan1: 228.562ms
Execute plan1: 0.27255ms
Create plan2: 0.328378ms
Execute plan2: 0.275842ms
可以看到,第一次调用 cufftPlan1d 函数时,耗时高达228毫秒,远远超过执行第二次调用 cufftPlan1d 函数以及执行FFT的时间。因此,大家在测试 CUFFT 运行时间时,应该注意吧首次生成 Plan 的函数排除在外,或者在此之前执行一个额外的 Plan 调用。
更多0
void main() { int n = 100; float2 *data_h = new float2 ; for (int i=0; i<n; ++i) { data_h[i].x = i; data_h[i].y = 0; } float2 *data_d; cudaMalloc((void**)&data_d, n * sizeof(float2)); cudaMemcpy(data_d, data_h, n * sizeof(float2), cudaMemcpyHostToDevice); static StopWatchInterface *timer; sdkCreateTimer(&timer); sdkStartTimer(&timer); cufftHandle plan1; cufftPlan1d(&plan1, n, CUFFT_C2C, 1); sdkStopTimer(&timer); cout<<"Create plan1: "<<sdkGetTimerValue(&timer)<<"ms"<<endl; sdkResetTimer(&timer); sdkStartTimer(&timer); cufftExecC2C(plan1, data_d, data_d, CUFFT_FORWARD); cufftDestroy(plan1); sdkStopTimer(&timer); cout<<"Execute plan1: "<<sdkGetTimerValue(&timer)<<"ms"<<endl; sdkResetTimer(&timer); sdkStartTimer(&timer); cufftHandle plan2; cufftPlan1d(&plan2, n, CUFFT_C2C, 1); sdkStopTimer(&timer); cout<<"Create plan2: "<<sdkGetTimerValue(&timer)<<"ms"<<endl; sdkResetTimer(&timer); sdkStartTimer(&timer); cufftExecC2C(plan2, data_d, data_d, CUFFT_INVERSE); cufftDestroy(plan2); sdkStopTimer(&timer); cout<<"Execute plan2: "<<sdkGetTimerValue(&timer)<<"ms"<<endl; }
运行结果:
Create plan1: 228.562ms
Execute plan1: 0.27255ms
Create plan2: 0.328378ms
Execute plan2: 0.275842ms
可以看到,第一次调用 cufftPlan1d 函数时,耗时高达228毫秒,远远超过执行第二次调用 cufftPlan1d 函数以及执行FFT的时间。因此,大家在测试 CUFFT 运行时间时,应该注意吧首次生成 Plan 的函数排除在外,或者在此之前执行一个额外的 Plan 调用。
更多0
相关文章推荐
- 融云即时聊天,IM
- 2015 HUAS Summer Training#2~E
- 每天一个小知识点11(jQuerMobile总结二)
- 《编译原理》学习心得
- Thinking in Java 笔记(第四章 初始化和清除)
- Java的运行原理
- Android 监听器
- animateWithDuration动画效果
- android在指定区域监听滑动事件
- jQuery源码框架思路
- Programming Concepts
- hdu 5305 回溯+剪枝
- 毕业之后实习公司的选择
- 微信公众平台开发时需要判断微信浏览器访问
- 虚幻4如何通过C++创建UObject或者UClass
- Scala入门到精通——第八节 包和引入
- dijk
- CentOS 6.6安装Mysql
- 细节啊细节
- hdu-2115(结构体,sort) I Love This Game