精华内容
下载资源
问答
  • 【使用指定GPU&实时监控GPU
    千次阅读
    2022-04-03 16:43:25

    1、pytorch如何指定GPU

    pytorch默认使用第0块GPU训练模型,如果第0块用满了,我们可以指定使用别的GPU进行训练

    方法:
    用这两行代码
    需要放在整个.py文件的最开头,在调用torch之前就要用,不然无效

    import os
    os.environ["CUDA_VISIBLE_DEVICES"] = "1"
    
    

    2、gpustat监控GPU状态

    gpustat -i
    

    Ctrl+c 退出监控

    先使用上面的命令试一下,如果服务器维护人员没有安装,则直接使用下面命令即可安装。

    pip install gpustat
    
    更多相关内容
  • Tensorflow打开GPU部分相关动态链接库dlls
  • Tensorflow2.0 之开启 GPU 模式

    千次阅读 2020-07-06 11:40:52
    GPU 的使用以及与 CPU 的对比

    一、查看设备是否有合适的 GPU

    首先,我们需要先确认所用设备是否支持 Tensorflow-gpu 的使用:

    print("Num GPUs Available: ", len(tf.config.experimental.list_physical_devices('GPU')))
    
    Num GPUs Available:  1
    

    这说明当前设备中有一个 GPU 可供 Tensorflow 使用。

    二、日志设备放置

    为了查出我们的操作和张量被配置到哪个 GPU 或 CPU 上,我们可以在程序起始位置加上:

    tf.debugging.set_log_device_placement(True)
    

    三、为程序指定特定的 GPU

    如果想要在所有 GPU 中指定只使用第一个 GPU,那么需要添加以下语句。

    tf.config.experimental.set_visible_devices(gpus[0], 'GPU')
    

    四、内存分配

    1、按需分配

    第一个选项是通过调用 tf.config.experimental.set_memory_growth 来打开内存增长,它试图只分配运行时所需的 GPU 内存:它开始分配非常少的内存,随着程序运行和更多的 GPU 内存需要,我们扩展分配给 Tensorflow 进程的 GPU 内存区域。

    tf.config.experimental.set_memory_growth(gpu[0], True)
    

    2、设置 GPU 显存为固定使用量

    设置使用第一个 GPU 的显存为 1G。

    tf.config.experimental.set_virtual_device_configuration(
        gpus[0],
        [tf.config.experimental.VirtualDeviceConfiguration(memory_limit=1024)])
    

    五、显式指定 GPU

    如果我们的系统里有不止一个 GPU,则默认情况下,ID 最小的 GPU 将被选用。如果想在不同的 GPU 上运行,我们需要显式地指定优先项。

    with tf.device("/gpu:0"):
        tf.random.set_seed(0)
        a = tf.random.uniform((10000,10000),minval = 0,maxval = 3.0)
        c = tf.matmul(a, tf.transpose(a))
        d = tf.reduce_sum(c)
    

    此处显式指定了使用 GPU 0,如果指定的 GPU 不存在,则程序会报错。

    如果希望 TensorFlow 自动选择一个现有且受支持的设备来运行操作,以避免指定的设备不存在,那么可以在程序起始位置加上:

    tf.config.set_soft_device_placement(True)
    

    当然,显式指定使用 CPU 也是可以的,只需要把 tf.device("/gpu:0") 改成 tf.device("/cpu:0") 即可。并且,如果一个 TensorFlow 操作同时具有 CPU 和 GPU 两种实现,在默认情况下,当操作被分配给一个设备时,GPU 设备将被给予优先级。

    六、多 GPU 的使用

    下面是一个简单的例子说明多 GPU 的同时使用:

    tf.debugging.set_log_device_placement(True)
    
    strategy = tf.distribute.MirroredStrategy()
    with strategy.scope():
      inputs = tf.keras.layers.Input(shape=(1,))
      predictions = tf.keras.layers.Dense(1)(inputs)
      model = tf.keras.models.Model(inputs=inputs, outputs=predictions)
      model.compile(loss='mse',
                    optimizer=tf.keras.optimizers.SGD(learning_rate=0.2))
    

    七、GPU vs CPU

    import tensorflow as tf
    from tensorflow.keras import * 
    import time
    
    tf.config.set_soft_device_placement(True)
    tf.debugging.set_log_device_placement(True)
    
    gpus = tf.config.experimental.list_physical_devices('GPU')
    tf.config.experimental.set_visible_devices(gpus[0], 'GPU')
    tf.config.experimental.set_memory_growth(gpus[0], True)
    
    t=time.time()
    with tf.device("/gpu:0"):
        tf.random.set_seed(0)
        a = tf.random.uniform((10000,10000),minval = 0,maxval = 3.0)
        c = tf.matmul(a, tf.transpose(a))
        d = tf.reduce_sum(c)
    print('gpu: ', time.time()-t)
    
    t=time.time()
    with tf.device("/cpu:0"):
        tf.random.set_seed(0)
        a = tf.random.uniform((10000,10000),minval = 0,maxval = 3.0)
        c = tf.matmul(a, tf.transpose(a))
        d = tf.reduce_sum(c)
    print('cpu: ', time.time()-t)
    
    Executing op RandomUniform in device /job:localhost/replica:0/task:0/device:GPU:0
    Executing op Sub in device /job:localhost/replica:0/task:0/device:GPU:0
    Executing op Mul in device /job:localhost/replica:0/task:0/device:GPU:0
    Executing op Add in device /job:localhost/replica:0/task:0/device:GPU:0
    Executing op Transpose in device /job:localhost/replica:0/task:0/device:GPU:0
    Executing op MatMul in device /job:localhost/replica:0/task:0/device:GPU:0
    Executing op Sum in device /job:localhost/replica:0/task:0/device:GPU:0
    gpu:  0.9708232879638672
    Executing op RandomUniform in device /job:localhost/replica:0/task:0/device:CPU:0
    Executing op Sub in device /job:localhost/replica:0/task:0/device:CPU:0
    Executing op Mul in device /job:localhost/replica:0/task:0/device:CPU:0
    Executing op Add in device /job:localhost/replica:0/task:0/device:CPU:0
    Executing op Transpose in device /job:localhost/replica:0/task:0/device:CPU:0
    Executing op MatMul in device /job:localhost/replica:0/task:0/device:CPU:0
    Executing op Sum in device /job:localhost/replica:0/task:0/device:CPU:0
    cpu:  4.51805853843689
    

    可见使用 GPU 进行以上运算会比 CPU 快将近 5 倍。

    展开全文
  • 深度学习之GPU

    千次阅读 2021-10-24 19:17:05
    深度学习利器-GPU介绍 1 深度学习之GPU 近代史科技发展日新月异,摩尔定律从中显威,各种底层技术层出不穷,但是纵观科技发展史,几乎所有的新兴学科的发展背后都有一个字——“钱”! 作为近年来最火热的行业——...

    深度学习利器-GPU介绍

    1 深度学习之GPU

    近代史科技发展日新月异,摩尔定律从中显威,各种底层技术层出不穷,但是纵观科技发展史,几乎所有的新兴学科的发展背后都有一个字——“钱”!

    作为近年来最火热的行业——人工智能,在烧钱方面同样不遑多让。众所周知,人工智能的训练和推理都需要海量的高性能计算,做深度学习的朋友都知道,现今深度学习领域的SOTA模型往往需要巨大的显存空间,这直接导致了深度学习的研究者们需要配置更强劲的 GPU 设备,否则就会分分钟面临显存与算力不足的窘境。大型企业或者研究机构可以一掷千金部署 HPC,比如近年来特别热点的GPT3等SOTA模型,可以这么说,想要跑下来、跑的快可能没有个上千万都不要去想。
    当今的 AI 模型面临着对话式 AI 等更高层次的挑战,这促使其复杂度呈爆炸式增长。训练这些模型需要大规模的计算能力和可扩展性。

    以英伟达目前的最先进的A100为例,NVIDIA A100 的 Tensor Core 借助 Tensor 浮点运算 (TF32) 精度,可提供比上一代 NVIDIA Volta 高 20 倍之多的性能,并且无需更改代码;若使用自动混合精度和 FP16,性能可进一步提升 2 倍。
    2048 个 A100 GPU 可在一分钟内大规模处理 BERT 之类的训练工作负载,这是训练时间的世界纪录。

    对于具有庞大数据表的超大型模型(例如用于推荐系统的 DLRM),A100 80GB 可为每个节点提供高达 1.3 TB 的统一显存,而且速度比 A100 40GB 快高达 3 倍。
    NVIDIA 产品的领先地位在 MLPerf 这个行业级 AI 训练基准测试中得到印证,创下多项性能纪录。

    A100 80GB相对于A100 40G来说在GPU芯片上没变化,依然是A100核心,6912个CUDA核心,加速频率1.41GHz,FP32性能19.5TFLOPS,FP64性能9.7TFLOPS,INT8性能624TOPS,TDP 400W。变化的主要是显存,之前是40GB,HBM2规格的,带宽1.6TB/s,现在升级到了80GB,显存类型也变成了更先进的HBM2e,频率从2.4Gbps提升到3.2Gbps,使得带宽从1.6TB/s提升到2TB/s。

    2 GPU与GPU简介

    对于大众来说,CPU是用来处理计算的,而GPU是用来处理图像渲染的,从能力范围来说相对来说CPU可能更加强大,那么深度学习为什么可以使用GPU来进行加速,性能获得巨大的提升呢,下面和大家娓娓道来,可以先泡一杯茶,慢慢来看。

    综合来说,大家可以这么理解,举个职场的例子,相信很多人都遇到过,CPU是一个十八班武义精通汉子,但是在职场里面由于其精通的太多,所以导致什么事情都分到了他那里,所以他在疯狂的流转,大家没注意到他做到的,只注意到他没做到的。但是GPU呢,他比较矫情,也有一定的能力,但是能力范围有限,而且他挑活,相对于CPU的任劳任怨,他只想做能出成绩的,对于其他一概不理。延伸来说吧,还有一些人是SBPU,啥叫SBPU呢,就是能力也不咋地,抢别人的功劳一流,但是自己屁也做不出来,靠着不光彩的手段和龌龊的计量,占据别人的功劳为己用,然后狂吹PPT。额,跑题了,赶紧回到正题。

    2.1 CPU介绍

    中央处理器(CPU),是电子计算机的主要设备之一,电脑中的核心配件。其功能主要是解释计算机指令以及处理计算机软件中的数据。CPU是计算机中负责读取指令,对指令译码并执行指令的核心部件。中央处理器主要包括两个部分,即控制器、运算器,其中还包括高速缓冲存储器及实现它们之间联系的数据、控制的总线。电子计算机三大核心部件就是CPU、内部存储器、输入/输出设备。中央处理器的功效主要为处理指令、执行操作、控制时间、处理数据。

    在计算机体系结构中,CPU 是对计算机的所有硬件资源(如存储器、输入输出单元) 进行控制调配、执行通用运算的核心硬件单元。CPU 是计算机的运算和控制核心。计算机系统中所有软件层的操作,最终都将通过指令集映射为CPU的操作。

    本质:CPU 由专为顺序串行处理而优化的几个核心组成,当然也可以通过多核与超线程等技术进行并行,但是受限于CPU的复杂工作流程、功耗、散热、尺寸等方面的影响,整体CPU的核心不会太多,这点也是GPU的优势。

    2.2 GPU介绍

    图形处理器(英语:graphics processing unit,缩写:GPU),又称显示核心、视觉处理器、显示芯片,是一种专门在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上做图像和图形相关运算工作的微处理器。 [1]
    GPU使显卡减少了对CPU的依赖,并进行部分原本CPU的工作,尤其是在3D图形处理时GPU所采用的核心技术有硬件T&L(几何转换和光照处理)、立方环境材质贴图和顶点混合、纹理压缩和凹凸映射贴图、双重纹理四像素256位渲染引擎等,而硬件T&L技术可以说是GPU的标志。GPU的生产商主要有NVIDIA和ATI。

    2.3 CPU与GPU的区别

    首先,针对GPU 和 CPU的各自特点进行分析,阐述下GPU相对于CPU为何在并行计算上具备优势。

    • 任务模式
      • CPU 由专为顺序串行处理而优化的几个核心组成
      • GPU 则拥有一个由数以千计的更小、更高效的核心(专为同时处理多重任务而设计)组成的大规模并行计算架构。同时CPU相当的一部分时间在执行外设的中断、进程的切换等任务,而GPU有更多的时间并行计算。
    • 功能定位
      • GPU在渲染画面时需要同时渲染数以百万记的顶点或三角形,故GPU的设计是可以充分支持并行计算。
      • CPU不但要承担计算任务还有承担逻辑控制等任务。
    • 系统集成
      • GPU作为一类外插设备,在尺寸、功率、散热、兼容性等方面的限制远远小于CPU,这样可以让GPU有较大的显存和带宽。

    2.4 GPU在深度学习大放异彩的关键 – CUDA

    GPU已经存在了很长时间,那么为何最近几年才开始大放异彩呢。个人认为主要原因有以下两个:

    1. 最近几年神经网络深度学习对算力的要求不断攀升,特别是CV、NLP领域的大量超算操作。
    2. 以前NVIDIA等厂商没有提供GPU – 深度学习之间的桥梁,把GPU真正用到深度虚线上有很大的成本,直至CUDA的出现,顺利的打通了这个桥梁。给GPU的盛行,提供了坚实的基座。

    在软件层,通过CUDA抽象成了统一的编程接口并提供C/C++/Python/Java等多种编程语言的支持。CUDA的这一层抽象非常重要,因为有了这层抽象,向下开发者的代码可在不同的硬件平台上快速迁移;向上,在CUDA基础上封装了用于科学计算的cuBLAS(兼容BLAS接口),用于深度学习的cuDNN等中间件和代码库。这些中间件对于Tensorflow,PyTorch这一类的深度学习框架非常重要,可以更容易地使用CUDA和底层硬件进行机器学习的计算任务。

    3 GPU的体系结构

    3.1 GPU的物理体系结构

    仍然以英伟达的A100 GPU为例,从整体上来说A100具备6192个Core,所以大家可以这么理解,他是一个超级的CPU,可以并行执行6192个核心。如下图

    GPU的基础单位是SM,实际上在 NVidia 的 GPU 里,最基本的处理单元是所谓的 SP(Streaming Processor),而一颗 NVidia 的 GPU 里,会有非常多的 SP 可以同时做计算;而数个 SP 会在附加一些其他单元,一起组成一个 SM(Streaming Multiprocessor)。几个 SM 则会在组成所谓的 TPC(Texture Processing Clusters)。

    这里我们暂时把SM可以看成是GPU计算调度的一个基本单位。一个SM具备64个用于计算的Core。针对A100来说,整个GPU上面有个108条好汉,额,是108个SM,所以整体的A100的Core的数量就是 64 * 108 = 6192。看看,够强劲吧,1个卡可以同时跑6192个并行的计算任务。
    针对这个SM的架构图,再简单进行下补充:

    1. 最上面是PCIE层,通过PCIE接口以外设的方式集成到服务器上。
    2. 绿色的部分是GPU的计算核心,比如A100具备6192个Core。
    3. 中间蓝色部分是L2缓存
    4. NVLink是多个GPU间进行通信的组件,会对GPU之间的通信做些优化,减轻CPU负担,提升传输效率,这点在分布式训练中会用的比较多。
    5. 两侧的HBM2就是显存,目前的A100的显存有两种40G and 80G,有钱就买80G吧,差一半的显存呢

    既然SM这么重要,那么我们就看看SM的硬件。


    SM的相关结构:

    3.2 GPU的逻辑体系结构

    如果把 CUDA 的 Grid - Block - Thread 架构对应到实际的硬件上的话,会类似对应成 GPU - Streaming Multiprocessor - Streaming Processor;一整个 Grid 会直接丢给 GPU 来执行,而 Block 大致就是对应到 SM,thread 则大致对应到 SP。当然,这个讲法并不是很精确,只是一个简单的比喻而已。

    1. kernel:Thread执行的内容/代码/函数
    2. Thread:执行kernel的最小单元,调度到CUDA Core中执行
    3. Warp:GPU 有很多 Streaming Multiprocessors, 用来管理调度 Thread Block
    4. Thread Block:。多个Thread组合,被调度到SM中执行。一个SM可以同时执行多个Thread Block,但是一个Thread Block只能被调度到一个SM上。GPU 有很多 Streaming Multiprocessors, 用来管理调度 Thread Block。
    5. Grid:多个Thread Block的组合,被调度到整个GPU中执行
      同时,Thread、Thread Block和Grid由于所处层次不同,他们可以访问的存储资源也不同。如Thread只能访问自身的寄存器,Thread Block可以访问SM中的L1缓存,而Grid则可以访问L2缓存和更大的HBM显存。

    4 GPU的实战

    GPU的运行主要是四步:

    1. 从Host拷贝数据到Device
    2. CPU发送数据处理执行给GPU;
    3. 把需要Device执行的kernel函数发射给Device
    4. 从Device拷贝计算结果到Host

    4.1 CUDA编程实战

    // Device code
    __global__ void VecAdd(float* A, float* B, float* C, int N)
    {
        int i = blockDim.x * blockIdx.x + threadIdx.x;
        if (i < N)
            C[i] = A[i] + B[i];
    }
                
    // Host code
    int main()
    {
        int N = ...;
        size_t size = N * sizeof(float);
    
        // Allocate input vectors h_A and h_B in host memory
        float* h_A = (float*)malloc(size);
        float* h_B = (float*)malloc(size);
        float* h_C = (float*)malloc(size);
    
        // Initialize input vectors
        ...
    
        // Allocate vectors in device memory
        float* d_A;
        cudaMalloc(&d_A, size);
        float* d_B;
        cudaMalloc(&d_B, size);
        float* d_C;
        cudaMalloc(&d_C, size);
    
        // Copy vectors from host memory to device memory
        cudaMemcpy(d_A, h_A, size, cudaMemcpyHostToDevice);
        cudaMemcpy(d_B, h_B, size, cudaMemcpyHostToDevice);
    
        // Invoke kernel
        int threadsPerBlock = 256;
        int blocksPerGrid =
                (N + threadsPerBlock - 1) / threadsPerBlock;
        VecAdd<<<blocksPerGrid, threadsPerBlock>>>(d_A, d_B, d_C, N);
    
        // Copy result from device memory to host memory
        // h_C contains the result in host memory
        cudaMemcpy(h_C, d_C, size, cudaMemcpyDeviceToHost);
    
        // Free device memory
        cudaFree(d_A);
        cudaFree(d_B);
        cudaFree(d_C);
                
        // Free host memory
        ...
    }
    

    这里是如何体现出GPU的威力呢,举个例子:如果GPU中的每个核心都有唯一的ID,比如0号核心执行C[0] = A[0] + B[0],127号核心执行C[127] = A[127] + B[127]就好了。
    int i = blockDim.x * blockIdx.x + threadIdx.x;主要是计算线程ID,那么关于线程的编码是如何呢,请看下面的简介。

    那么关于线程的编码是如何呢,请看下面的简介。

    • threadIdx是一个uint3类型,表示一个线程的索引。
    • blockIdx是一个uint3类型,表示一个线程块的索引,一个线程块中通常有多个线程。
    • blockDim是一个dim3类型,表示线程块的大小。
    • gridDim是一个dim3类型,表示网格的大小,一个网格中通常有多个线程块。
    • 下面这张图比较清晰的表示的几个概念的关系:

    4.2 基于GPU的加速

    整个GPU的东西还是比较多的,这块我就先简单写下吧,后续会在开个专题,这里先简单列几条:

    • 算子融合
    • 空域滤波
    • High Level Graph Opt
    • CPU & GPU Filter

    5 参考资料

    https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html

    6 番外篇

    个人介绍:杜宝坤,联邦学习领域前沿探索者。基于从全链路思考与决策技术规划的考量,研究的领域比较多,从工程架构、大数据到算法与算法框架均有涉及。欢迎喜欢技术的同学和我交流,邮箱:baokun06@163.com
    个人微信:

    展开全文
  • Android检查GPU呈现模式和过度绘制

    千次阅读 2021-01-18 17:09:39
    Android提供了一些工具可以用来帮助分析你的UI是否存在图形绘制问题,例如执行过多不需要的绘制工作,或执行...在Android 4.1以上的系统中,需要分析应用的GPU呈现速度时,可以通过两种方式打开 GPU 呈现模式。 在设备

    Android提供了一些工具可以用来帮助分析你的UI是否存在图形绘制问题,例如执行过多不需要的绘制工作,或执行长时间的GPU操作。

    分析GPU呈现模式

    GPU呈现模式工具以滚动直方图的形式展现,显示渲染UI窗口每帧所花费的时间,系统的基准时间是于每帧16ms。这个分析工具可以帮助确定GPU在图形绘制过程中各阶段的状态,或过度绘制引起渲染性能降低的情况。

    打开 GPU 呈现模式分析

    在Android 系统中,需要分析应用的GPU呈现模式,可以通过两种方式打开 GPU 呈现模式。

    • 在设备上,使能开发者模式,进入 “设置”->"开发者选项",在“监控”栏中点击“GPU呈现模式分析”,然后在弹出窗中选择“在屏幕上显示为条形图”。
    • 使用ADB通过 property 打开

      $ adb shell setprop debug.hwui.profile [true/visual_bars/false]

    检查输出

    开启GPU呈现模式分析,打开需要跟踪的应用,一些条形图会显示在屏幕下方。Android 6.0(API level 23)中显示如下图,

     

    关于输出,一些说明如下,

    • 对于每个可见的应用程序,该工具都会显示一个图形。
    • 沿水平轴的每个柱状图都代表一帧,柱状图的高度代表该帧渲染所花费的时间(以毫秒为单位)。
    • 水平的绿线表示16毫秒。为了达到每秒60帧,每帧柱状图的高度必须保持在此线以下。当柱状图超过该线时,动画中可能会有卡顿。
    • 超过16毫秒阈值的帧通过加宽图形宽度和减少透明度来突出显示。
    • 每个柱状图都有不同彩色组成,这些颜色表示不同的渲染阶段。颜色的数量取决于设备所使用的API level。

    下表描述了分析工具运行Android 6.0或更高版本的设备时,柱状图中各颜色代表的意义。

    颜色渲染阶段描述
    橙色Swap Buffers表示CPU等待GPU完成工作的时间。如果此线条变高,则表示该应用在GPU上执行了太多工作。
    红色Command Issue表示Android的2D渲染器向OpenGL发送命令进行绘制及重新绘制显示列表所花费的时间。该条的高度与每个显示列表执行所花费的时间之和成正比,显示列表内容越多,红色条越高。
    浅蓝色Sync & Upload表示将位图信息上传到GPU中所需的时间。多数时候意味着该应用程序需要花费大量时间来加载大量图形。
    蓝色Draw表示用于创建和更新视图的显示列表的时间。如果这一部分很高,则可能有很多自定义的视图,或者onDraw方法中有很多工作。
    浅绿色Measure / Layout表示在视图层次结构中的onLayout和onMeasure回调上花费的时间。意味着视图层次结构需要花费很长时间进行处理。
    绿色Animation表示运行该帧中全部动画所花费的时间。如果此线条很高,则您的应用可能使用的自定义动画效果不佳,或者由于更新了属性而发生了意外工作。
    深绿色Input Handling表示应用程序在输入事件回调中执行代码所花费的时间。如果此线条很高,则表明该应用花费了太多时间来处理用户输入。应该考虑将此类处理工作分配到另一个线程。
    墨绿色Misc Time / VSync Delay表示应用在两个连续的帧之间花费执行时间的时间。如果此线条很高,可能是UI线程中发生了过多的处理,这些处理可以转移到其他线程。

    Dump Profile数据

    有时我们可能希望获得GPU呈现模式中的数据,用于进行细致的分析,这时可以通过ADB来获取。

    • 使用ADB通过property来打开GPU呈现模式

      $ adb shell setprop debug.hwui.profile true
    • 使用dumpsys获取profile数据。

      $ adb shell dumpsys gfxinfo com.xxxx.xxx

    Draw + Process + Execute = 完整显示一帧 ,这个时间要小于 16ms 才能保证每秒 60 帧。

    分析过度绘制

    检查过度绘制

    过度绘制工具可以帮助开发者检查是否进行了不必要的渲染工作。该工具使用颜色来标识过度绘制,当应用在同一帧内多次绘制同一像素时,就表明发生过度绘制,并使用不同的颜色进行标记。过度绘制表明GPU付出了额外的工作来渲染用户看不见的像素,这样会影响性能,应该尽可能修复。

    过度绘制工具可以在开发者选项中打开,设置->开发者选项->调试GPU过度绘制。打开工具后,应用中如果发生过度绘制,会表现类似下图。

     

    图中的不同颜色表示像素在一帧内重绘的次数,

    • 真实颜色:未发生重绘。
    • 蓝色:重绘1次。
    • 绿色:重绘2次。
    • 粉色:重绘3次。
    • 红色:重绘4次以及4次以上。

    需要注意的时,这些颜色是半透明的,因此您在屏幕上看到的确切颜色取决于UI的内容。有些重绘是不可避免的,因此在调试应用程序的用户界面时,获得大部分真实色彩或仅显示1倍过度绘制(蓝色)的显示效果即可。

    减少过度绘制

    可以从以下几个方向来减少或消除过度绘制,

    • 去除布局中不必要的背景。
    • 扁平化视图结构。
    • 降低透明度。

    默认情况下,布局不具有背景,这意味着它不会直接渲染任何内容。但是当布局存在背景时,它们就有可能导致过度绘制。 删除不必要的背景能快速提高渲染性能。不必要的背景可能永远都不可见,因为应用程序在该视图之上绘制的其他内容可能将其完全覆盖。例如,当系统在顶层绘制子视图时,可能会完全掩盖背景。 想要找出过度绘制原因,需要使用Layout Inspector工具遍历层次结构。在进行这个工作时,注意可以消除的背景,因为它们对用户不可见。如果许多容器共享相同的背景色,则可以消除不必要的背景:您可以将窗口背景设置为应用程序的主要背景色,并在其上方保留所有容器,但不设置背景值。

    现代布局可以非常容易的对视图进行堆叠和分层,从而产生精美的设计。但是这样做可能会导致过度绘制,从而降低性能。特别是当每个堆叠的视图对象都不透明时,可见像素和不可见像素都需要在屏幕上进行绘制。 如果遇到此类问题,可以通过优化视图层次结构以减少重叠的UI对象的数量来提高性能。

    屏幕上透明像素的渲染(Alpha渲染)也是过度绘制的关键因素。在标准的过度绘制中,系统通过在不透明像素上方绘制不透明像素来完全隐藏现有绘制像素。而在渲染透明对象时,则需要先绘制现有像素,这样才能产生正确的混合效果。诸如透明动画,淡出和阴影之类的视觉效果都涉及某种类型的透明性,因此可以显着地影响过度绘制。在这些情况下,可以通过减少渲染的透明对象的数量来改善过度绘制。例如,在TextView上绘制带有半透明alpha值的黑色文本来获得灰色文本时,也可以直接将文本绘制为灰色,即可获得相同的效果,并具有更好的性能。

    官网介绍:

    https://developer.android.google.cn/topic/performance/rendering/inspect-gpu-rendering?hl=en#profile_rendering

    展开全文
  • 安卓手机怎么开启强制GPU渲染功能?安卓手机是目前市场占有率最多的智能手机系统,但是当用户使用搭载有安卓系统的手机后,我们就会发现随着使用时间的增加,手机速度就会变得越来越慢,其实这是安卓系统手机的通病...
  • Pr入门学习之选择GPU加速

    千次阅读 2021-11-24 21:10:46
    除了下载有点麻烦,如有需要,我这里有GPU的几个版本,大家有需要可以私信我 装好GPU后,如果你的显卡类型在支持的范围内,这时候打开PR就可以选择Gpu加速了,无奈我的GTX960M不在默认范围内,所以就需要你稍微改动...
  • 适用于NVIDIA Optimus的GPU加速的... 这些实用程序提供optirun命令,该命令仅针对要调用的命令打开和关闭专用GPU。 因此,可以通过运行optirun jupyter notebook将Jupyter笔记本与NVIDIA GPU optirun jupyter noteb
  • 本文介绍“GPU 呈现模式”的使用,以及如何使用“GPU 呈现模式”进行卡顿问题定位和分析。
  • OpenCV中配置CUDA,实现GPU加速

    千次阅读 2020-12-16 23:49:32
    1、查看本机配置,查看显卡类型是否支持NVIDIA GPU,本机显卡为NVIDIA GeForce GT630;3、从https://developer.nvidia.com/cuda-toolkit根据本机类型下载相应最新版的CUDA Toolkit6.0 64位,安装,并通过样本程序...
  • 打开终端,逐步复制并插入这些逗号。 第1步git clone "https://github.com/Ritwikrajsingh/linux-firmware-amdgpu.git" 步骤2 cd linux-firmware-amdgpu/amdgpu 步骤3 cp -a . /lib/firmware/amdgpu/ cp -a . /...
  •  首先要明白,GPU要绘制什么样的视图是需要CPU发出指令的,但CPU不会直接告诉GPU怎么做,而是会先将这一命令存入一个“盒子”,在盒子中会形成一个列表,然后GPU从盒子中取出命令进行视图的渲染绘制。 ...
  • TensorFlow使用GPU

    千次阅读 2018-10-26 20:17:00
    1.在运行之前先查看GPU的使用情况:  指令:nvidia-smi 备注:查看GPU此时的使用情况 2.指定GPU训练: 方法一、在python程序中设置:  代码:os.environ[‘CUDA_VISIBLE_DEVICES’] = ‘0’ 备注:使用 GPU 0  ...
  • CSS3为咱们开发动画效果大大提升了效率,但有些动画效果,如果涉及的DOM元素比较多,会发现有...这两个属性都会开启GPU硬件加速模式,从而让浏览器在渲染动画时从CPU转向GPU,其实说白了这是一个小伎俩,也可以...
  • Vscode debug模式下的默认gpu是0,即使代码里面配置了,debug起来还是会使用默认的0号gpu,现修改配置如下,实现任意指定gpu。 第一步: 运行 -> 添加配置->Python 第二步: 添加配置 "env": { "CUDA_...
  • opencv如何利用GPU加速

    2021-05-17 11:24:18
    待补充
  • mac开启TensorFlow GPU加速

    千次阅读 2021-03-24 15:23:03
    众所周知,mac在与Nvidia决裂之后,已经不再支持cuda,让mac用户苦不堪言。2021年苹果正式发布了TensorFlow Mac优化版的Alpha版,目前已经到Alpha0.3,同时支持M1和Intel GitHub官方地址 下面给出安装方法 ...
  • Linux查看GPU的进程

    千次阅读 2021-01-26 20:02:37
    有时候会出现GPU被占满却没有进程的情况,可通过下面进程查看僵尸jin cheng sudo fuser -v /dev/nvidia*
  • 我在jupyter中输入了!python train.py online_train CPU开始工作,然而我希望用GPU运行它。</p>
  • GPU进程查看/停止

    2020-08-12 15:10:47
    nvidia-smi GPU进程查看 GPU进程停止 kill -9 PID #PID是nvidia-smi语句查询出来的PID号码
  • colab使用GPU

    千次阅读 2019-05-05 21:59:35
    4.设置gpu运行:修改-> 笔记本设置-> 硬件加速器 -> GPU   5.在使用Colab时,每一个ipynb文件都先执行以下代码 (注意修改 YourWorkPath) from google.colab import drive drive.mount('/content/...
  • UE5 GPU崩溃D3D丢失的终极解决办法

    千次阅读 2022-04-11 12:40:38
    前提是你的电脑运行大多数UE项目无问题,只在运行大型项目 例如 古代山谷 和 城市示例 这种大型项目才频繁发生GPU崩溃的情况下有效: 那就是: 把显卡降频! 对,不是超频,是降频! 你可以用显卡厂家提供的超频...
  • GPU高级调试与优化

    千次阅读 2018-05-07 16:57:29
    点击关注异步图书,置顶公众号每天与你分享IT好书 技术干货 职场知识​GPU的历史很短,只有十几年。...但是从系统架构来看,针对GPU的架构转型还在进行过程中,目前GPU依然还处于外设的地位,还没有...
  • 除此之外,为了加快TensorFlow的执行速度,还需要安装TensorFlow Matel Plugin来启用GPU加速。 本篇文章将参考苹果官方文档。 安装步骤 配置虚拟环境 如果无需虚拟环境,直接将TensorFlow安装在默认环境中,可以跳过...
  • 这里tensorflow应该是检测出了gpu,但是因为某些库无法打开而导致tensorflow无法调用,返回了false,详细查看错误信息可以看到一行: 可以看到上面几个文件都顺利打开了,但是最后一个libcudnn.so.7文件显示无法...
  • 本人电脑配置RTX2070,支持CUDA10 下载gpu版本要注意cuda的版本是否与电脑的相匹配,至于能匹配什么版本请...首先打开anaconda prompt 输入conda create --name tensorflow2-g1 python=3.7 这样就创建了一个名为tenso
  • Chrome 打开GPU硬件加速

    万次阅读 2011-09-28 10:36:09
    通过 Chrome 地址栏进入 about:flags,在页面中往下拉找到 GPU Accelerated Compositing 和GPU Accelerated Canvas 2D,将这两项启用,Chrome 11 没有 GPU Accelerated Compositing 这个选项,因为它已经默认开启了...
  • 首先确定你的显卡是否支持gpu加速,可在nvidia官网查看是否有你的显卡所对应的算力,如图。 为了不影响其他的工作环境,本教程创建anaconda虚拟python环境,打开Anaconda Prompt,输入指令 conda create -n your_...
  • tensorflow2.0 gpu版本

    2019-10-07 21:40:37
    tensorflow2.0.0下载链接,打开百度云。python3.7 Gpu版本,whl文件 tensorflow_gpu-2.0.0-cp37-cp37m-win_amd64.whl tensorflow_gpu-2.0.0-cp37-cp37m-manylinux2010_x86_64.whl
  • Keras中设置GPU使用

    万次阅读 2019-03-26 10:22:07
    指定GPU并设置为按需增长: """GPU设置为按需增长""" import os import tensorflow as tf import keras.backend.tensorflow_backend as KTF # 指定第一块GPU可用 os.environ["CUDA_VISIBLE_DEVICES"] = "0" config...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 68,787
精华内容 27,514
关键字:

怎么打开gpu