首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CUDA内存分配性能

CUDA内存分配性能
EN

Stack Overflow用户
提问于 2016-05-16 22:05:18
回答 1查看 812关注 0票数 0

我正在研究数据自动化系统的图像过滤器。图像处理比在CPU上快得多。但问题是,图像的分配真的很慢。

这就是我分配内存和设置映像的方式。

代码语言:javascript
运行
复制
hr = cudaMalloc(&m_device.originalImage,    size);                                                                          
hr = cudaMalloc(&m_device.modifiedImage,    size);                                                                          
hr = cudaMalloc(&m_device.tempImage,    size);                                                                  
hr = cudaMemset( m_device.modifiedImage, 0, size);                                                                          
hr = cudaMemcpy( m_device.originalImage, host.originalImage, size, cudaMemcpyHostToDevice); 

这是执行程序的结果。

代码语言:javascript
运行
复制
C:\cpu_gpu_filters(GPU)\x64\Release>cpu_gpu_filters test-case.txt
C:\Users\Max\Desktop\test_set\cheshire_cat_1280x720.jpg
Init time: 519 ms
Time spent: 2.35542 ms
C:\Users\Max\Desktop\test_set\cheshire_cat_1366x768.jpg
Init time: 31 ms
Time spent: 2.68595 ms
C:\Users\Max\Desktop\test_set\cheshire_cat_1600x900.jpg
Init time: 44 ms
Time spent: 3.54835 ms
C:\Users\Max\Desktop\test_set\cheshire_cat_1920x1080.jpg
Init time: 61 ms
Time spent: 4.98131 ms
C:\Users\Max\Desktop\test_set\cheshire_cat_2560x1440.jpg
Init time: 107 ms
Time spent: 9.0727 ms
C:\Users\Max\Desktop\test_set\cheshire_cat_3840x2160.jpg
Init time: 355 ms
Time spent: 20.1453 ms
C:\Users\Max\Desktop\test_set\cheshire_cat_5120x2880.jpg
Init time: 449 ms
Time spent: 35.815 ms
C:\Users\Max\Desktop\test_set\cheshire_cat_7680x4320.jpg
Init time: 908 ms
Time spent: 75.4647 ms

具有时间测量的UPD代码:

代码语言:javascript
运行
复制
start = high_resolution_clock::now();
Initialize();
stop = high_resolution_clock::now();
long long ms = duration_cast<milliseconds>(stop - start).count();
long long us = duration_cast<microseconds>(stop - start).count();
cout << "Init time: " << ms << " ms" << endl;


start = high_resolution_clock::now();
GpuTimer gpuTimer;
gpuTimer.Start();
RunGaussianBlurKernel(
    m_device.modifiedImage,
    m_device.tempImage,
    m_device.originalImage, 
    m_device.filter,
    m_filter.width,
    m_host.originalImage.rows, 
    m_host.originalImage.cols
    );
gpuTimer.Stop();

第一个图像是最小的,但是初始化需要519 ms。也许,这是因为需要加载驱动程序或其他什么的。然后,当图像的大小增加时,初始化时间也会增加。实际上,这看起来是合乎逻辑的,但我仍然不确定初始化过程是否应该那么慢。我做错了什么吗?

EN

Stack Overflow用户

回答已采纳

发布于 2016-05-17 06:12:08

在单元代码中,您有一个cudaMemset,它的执行时间取决于大小。还有cudaMemcpy,它的执行时间大约由mem拷贝大小(以字节为单位)除以PCI的带宽来表示。这部分很可能是init时间增加的原因。在NSIGHT中运行它将为您提供更精确的执行时间数字。然而,没有MCVE,很难确定答案。

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37264010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档