- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图找出在将数据传输到设备之前将数据复制到固定内存是否有意义,因为我对输入数据的分配没有影响(它是一个库)。
std::vector<int> idata(WORK_SIZE);
int *idata_aligned = NULL;
int *d1 = NULL;
int *d2 = NULL;
for (int i = 0; i < WORK_SIZE; ++i)
idata[i] = i;
CUDA_CHECK_RETURN(cudaMalloc((void**) &d1, sizeof(int) * WORK_SIZE));
CUDA_CHECK_RETURN(cudaMalloc((void**) &d2, sizeof(int) * WORK_SIZE));
printf("unpinned:\n");
{
boost::timer::auto_cpu_timer t;
CUDA_CHECK_RETURN(cudaMemcpy(d1, &idata[0], sizeof(int) * WORK_SIZE, cudaMemcpyHostToDevice));
}
printf("copy to pinned:\n");
{
boost::timer::auto_cpu_timer t;
CUDA_CHECK_RETURN(cudaHostAlloc((void**) &idata_aligned, sizeof(int) * WORK_SIZE,cudaHostAllocDefault));
memcpy(idata_aligned, &idata[0], sizeof(int) * WORK_SIZE);
CUDA_CHECK_RETURN(cudaMemcpy(d2, idata_aligned, sizeof(int) * WORK_SIZE, cudaMemcpyHostToDevice));
}
unpinned:
0.018919s wall, 0.020000s user + 0.000000s system = 0.020000s CPU (105.7%)
copy to pinned:
0.045428s wall, 0.020000s user + 0.020000s system = 0.040000s CPU (88.1%)
最佳答案
使用固定内存的速度增益还取决于传输的大小和您的系统。您可以先运行 CudaBandwidthTest 示例,看看它是否真的有意义。
否则我会测量你程序的特定部分,看看时间在哪里丢失。 (alloc, memcpy, pcie-transfer)
根据您分配页面锁定内存的大小,您的系统也可能需要将其他一些内存交换到磁盘,从而增加运行时间。
无论如何,您显示的时间很短,所以我想,传输大小也很小。您还应该能够通过将多个小写入合并为一个更大的写入来提高速度。
关于cuda - 节省 cudaHostAlloc 所需的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14156167/
我在看 Page-Locked Host Memory在 Cuda Programming Guide并想知道在使用函数 cudaHostAlloc 创建时分配的固定内存在哪里?它在内核地址空间中吗?
我试图找出在将数据传输到设备之前将数据复制到固定内存是否有意义,因为我对输入数据的分配没有影响(它是一个库)。 std::vector idata(WORK_SIZE); int *idata_ali
我多次启动内核,直到找到解决方案。解决方案将被至少一个 block 找到。 因此,当一个 block 找到解决方案时,它应该通知 cpu 找到了解决方案,以便 cpu 打印该 block 提供的解决方
在 CUDA 文档中,特别是在有关 cudaSetDevice 的设备管理部分的 CUDA Runtime API 中,它是这样写的 Any host memory allocated from th
我是 CUDA 的新手,我想使用 cudaHostAlloc。我能够将我的问题隔离到以下代码。使用 malloc 进行主机分配工作,使用 cudaHostAlloc 导致段错误,可能是因为分配的区域无
我想通过 cudaHostGetDevicePointer 在映射内存上使用零拷贝.我可以用thrust::host_vector或者我必须使用 cudaHostAlloc(...,cudaHostA
在 CUDA 中,我想知道 cudaMallocHost() 之间的区别和 cudaHostAlloc() . 它们在 API 引用中的各自摘要说: cudaMallocHost():“在主机上分配页
我正在执行一个简单的测试,比较主机(CPU 正在执行访问)使用 malloc() 分配的数据和使用 cudaHostAlloc() 分配的数据的访问延迟。我注意到在 Jetson Tk1 上访问使用
我刚接触 Nvidia 的这些 API,有些表达对我来说不太清楚。我想知道是否有人可以帮助我以简单的方式了解何时以及如何使用这些 CUDA 命令。更准确地说: 研究如何通过并行执行内核(例如使用 CU
我是一名优秀的程序员,十分优秀!