一共有四个方法进行对资源进行更新:
CPU调用:
ID3D11DeviceContext::Map
GPU调用:
ID3D11DeviceContext::CopySubresourceRegion
ID3D11DeviceContext::CopyResource
ID3D11DeviceContext::UpdateSubresource
首先如果想更新GPU中的resource,1是可以通过map()函数来让CPU读写GPU的数据;2还可以通过ID3D11DeviceContext::CopyResource(),ID3D11DeviceContext::UpdateSubresource()等来直接让GPU写更新它自己的resource。
资源创建时都会描述资源的D3D11_USAGE 特性:
D3D11_USAGE_DEFAULT
D3D11_USAGE_IMMUTABLE
D3D11_USAGE_DYNAMIC
D3D11_USAGE_STAGING
这四种针对不同的CPU和GPU访问权限的情况
CopySubresourceRegion:
void CopySubresourceRegion(
[in] ID3D10Resource *pDstResource, // 目标
[in] UINT DstSubresource, // 目标的子
[in] UINT DstX, // 左上角开始的起始位置
[in] UINT DstY,
[in] UINT DstZ,
[in] ID3D10Resource *pSrcResource, // 源
[in] UINT SrcSubresource, // 源的子
[in] const D3D10_BOX *pSrcBox // box 描述拷贝资源的区域
);
如果可以的话,尽量全部拷贝,常见使用即可,微软的东西不稳定。D3D11_SUBRESOURCE_DATA 根本就不能直接赋值2D纹理,如果很难用不如不提供。
CopyResource:
void CopyResource(
[in] ID3D10Resource *pDstResource,
[in] ID3D10Resource *pSrcResource
);
CopySubresourceRegion的简洁版
UpdateSubresource:
void UpdateSubresource(
[in] ID3D10Resource *pDstResource,
[in] UINT DstSubresource,
[in] const D3D10_BOX *pDstBox,
[in] const void *pSrcData,
[in] UINT SrcRowPitch,
[in] UINT SrcDepthPitch
);
其实CopySubresourceRegion针对的是D3D创建的资源,这些资源或者就存储在GPU里面,而UpdateSubresource跟多的是把内存中的一些外来物种溶于到里面去,所以叫更新值。这里让描述源每行的跨度,而不是像D3D11_SUBRESOURCE_DATA 要求描述目标的跨度,目标的跨度并不等于每一行的像素,它是大于的。
补充:
DEFAULT用于GPU快速读写,并且只能用updatesubresource()来更新。IMMUTABLE用于被GPU只读,其中存放的数据不可变。DYNAMIC提供快速的CPU写和较慢的GPU读。只能用Map()来更新。STAGING提供了一种方法让你可以读取GPU写回的数据。扼要归纳综合来说:必要CPU常常更新的数据用DYNAMIC,必要CPU常常更新的可用DEFAULT,完全不必要CPU更新的数据用IMMUTABLE,CPU必要读的用STAGING。综上所述,我们的cb一样平常是要常常被更新的,以是用DYNAMIC较为符合,进而可推断,用Map较符合,同时NVDIA也表达保举利用DYNAMIC+Map。这个跟硬件实现其实关系也挺大。UpdateSubresource()必要体系内存和特别的拷贝操纵,而Map()则不必要这些。
分享到:
相关推荐
GPU编程资源GPU编程资源GPU编程资源GPU编程资源
根据所用计算资源的规模将CPUGPU协同并行计算研究划分为三类尔后从立项依据研究内容和研究方法等方 面重点介绍了几个混合计算项目并指出了可进一步研究的方向以期为领域科学家进行协同并行计算研究提供一定 ...
服务器资源测试用,cpu,gpu
CPU-GPU异构多核系统对计算密集型的应用加速效果显著而得到广泛应用,但易出现负载均衡问题。针对此问题,提出了一种CPU-GPU异构多核系统的动态任务调度算法。该算法充分利用CPU的线程资源和GPU的计算资源,准确测量...
CPU与GPU并行计算的火焰模拟.pdf
GPU编程虽然能利用数以百计的核心来加速,但是一些编程技术的忽视会导致程序性能极差,加速比很低. 如访存方式,线程组织形式,内核函数的切换等等,这些都是要考虑的在程序设计过程中.
Slurm:可扩展负载管理器,用于排队调度集群CPU/GPU资源
cpu gpu 监测工具
procexp64.exe Windows平台进程线程CPU GPU资源监控
摘要随着图形处理器(GPU)的计算能力和可编程性的不断提高,利用 GPU 进行通用计算(GPGPU)逐渐成为研究的热点。的异构模式,虽然这种异构模式能够获得好的
Rockchip 平台CPU/GPU/DDR 频率调整 。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...
面向多核CPU和GPU平台的数据库星形连接优化.pdf
通过分析GPU程序访存特征,借鉴之前的缓存管理方案,提出对CPU-GPU融合系统的末级缓存进行等量的静态划分和最优静态划分的方案。实验结果表明:通过缓存划分可以有效避免CPU和GPU程序间的干扰。与传统LRU策略相比,...
面向CPU-GPU源到源编译系统的渐近拟合优化方法.pdf
基于CPU_GPU异构资源协同调度的改进H-Storm平台.pdf
这是个关于GPU+CPU集群简介。介绍了我们实验室基于开源软件搭建的一个GPU+CPU集群架构
基于CPU与GPU_OpenCL的快速傅里叶变换的实现和性能比较.pdf
资源名:并行运算与神经网络_基于CPU_GPU的并行神经网络运算_matlab 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我进行指导或者更换。 ...
但是,这些GPU实现可能无法充分利用所有CPU内核和GPU资源。 GPU执行计算任务时,仅使用一个CPU内核来控制GPU,其余所有CPU内核均处于空闲状态,这导致大量可用浪费CPU资源。 本文提出了一种高效的CPU-GPU协同计算...
用,因此有关CPU-GPU异构系统以及GPU本身的一系列研究课题也得到广泛关 注,诸如编程模型、编译优化、可靠性优化以及低功耗优化等等。本课题从编程 和编译的角度展开,首先研究了CPU-GPU异构并行系统的编程模型,...