zoukankan      html  css  js  c++  java
  • memory management Vulkan

    https://www.youtube.com/watch?v=rXSdDE7NWmA

    vulkan/Bifrost

    1. DEVICE_LOCAL_BIT | HOST_VISIBLE_BIT | HOST_COHERENT_BIT

    2. DEVICE_LOCAL_BIT | HOST_VISIBLE_BIT | HOST_CACHED_BIT
    3. DEVICE_LOCAL_BIT | HOST_VISIBLE_BIT | HOST_COHERENT_BIT | HOST_CACHED_BIT
    4. DEVICE_LOCAL_BIT | LAZILY_ALLOCATED_BIT

    vulkan/Midgard

    1. DEVICE_LOCAL_BIT | HOST_VISIBLE_BIT | HOST_COHERENT_BIT

    2. DEVICE_LOCAL_BIT | HOST_VISIBLE_BIT | HOST_CACHED_BIT

    3. DEVICE_LOCAL_BIT | LAZILY_ALLOCATED_BIT

    cache就是cpu cache了 cpu read 用

    coherent看下来是cup gpu 同步 选了 硬件会保证它们一致 但是会费电。。。。选这个就不用我们手动copy来 copy去了吧

    host就是cpu这边

    device是gpu这边

    coherent肯定就是cpu gpu都可见了

    lazily是 给临时资源的 ontile的资源 不需要开framebuffer

    resources: 

    Uniform Buffer,Dynamic VB  CPU, GPU 都可见, 频繁write  ---这种通常用nbuffe缓存(gl下 避免同步map 会卡住 避免invalidmap会复制 ghost,vulkan用coherent自动处理了)

    Texture, IB,VB,Const Buffer  CPU只写一次 CPU GPU可见----这种资源设置成write only 就不需要cache ,cpu不要读它

    Framebuffer  仅GPU可见

    CPU读的才要cache 这样的GPU资源很少吧。。。

    1. not cached, coherent

       write-only on CPU,为了不污染CPU cache,可以在cpu把小的合到一个大的buffer里给device

    2.cached, incoherent

      需要map出来给cpu read的资源 map出来用vkInvalidateMappedRanges

      cpu 写完给gpu用时要调用 vkFlushMappedRanges

      这两步操作都需要driver 维护cpu cahe 在main memory和cpu cache之间

      这会是不少的开销

    3.cached, coherent

      此种类型仅Bifrost支持,并且需要cpu 和gpu的芯片组支持一致的协议,如果不支持会用2.cache,incoherent替代

      如果不需要cpu read 就用coherent就可以了 不要用cached

    4.lazily

      短暂transient的gpu外不可访问的,仅在tile上的resource

    看资料实在太不方便了 以后再看吧

    用vulkan 做render to texture 的rt的 memory type 是啥

    DEVICE_LOCAL_BIT最合适 但是mali没有可能要落到1

     建议

    不变的资源用1

    cpu只读资源用1

    用1的时候 write update的时候 用memcpy()顺着写

    频繁update的buffer要map出来 比如uniform buffer , dynamic vb,map有cpu开销

    cpu read要用cache

    ====

    staging

    大概是这样一种概念,cpu资源copy一份 gpu用copy的这份

    知道两种用途 一种是dx9那时候 这种staging的资源 可以用于恢复device lost 的资源 再copy一次就可以了 感谢jin先生

    另一种cpu写入一次的texture 资源 copy一份 给gpu bind srv,cpu就不再用这份资源了

    一种类似资源uploading的概念 

    =======

    https://www.khronos.org/assets/uploads/developers/library/2018-vulkan-devday/03-Memory.pdf

    https://gpuopen.com/vulkan-device-memory/

  • 相关阅读:
    图(个人复习专用)
    树(复习用)
    由后序遍历与中序遍历确定前序遍历
    网络流问题
    无向图的结合点
    有向图的强连通分量
    最短路径Shortest Path algorithm
    【转】Vector与ArrayList区别
    Java中compareto的用法。
    Java中的Integer和int等包装类和基本数据类型简单比较
  • 原文地址:https://www.cnblogs.com/minggoddess/p/11777132.html
Copyright © 2011-2022 走看看