Chrome 的 GPU 加速问题。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Chrome 的 GPU 加速问题。相关的知识,希望对你有一定的参考价值。
RT,GPU compositing on all pages 和 GPU 加速画布 2D 的实际效果。GPU 的加速问题一直让我很疑惑,在各个版本的更新中发现实际效果并不是很明显,甚至有延迟现象。不知是否显卡的硬性要求不够,亦或者是插件以及APPS对于CPU的占用影响。有没有在纯净chrome的测试过的用户。DEV 13.0.782.24 版。
我也是一个chrome的老用户了,遇到过很多问题。你可以尝试在chrome上输入 about:gpu 然后进入页面看看 log message 里的数据,error里边显示的都有什么。如果GPU的加速有延迟问题,你可以试加上-incognito隐私模式这个参数。还是不行的话,你可以试试 Disable GPU VSync 重启浏览器,应该就可以了,如果还是不行的话,建议你更换显卡了,其实GPU加速本来就是针对低端显卡的,还是不行的话就说明电脑实在是该换硬件了,你这个应该也不是这个问题。电脑配置还可以的话,也可以在 about:flags 里关闭GPU加速。另外,我在纯净版chrome DEV上试过,有点改变,chrome上APPS对CPU还是有点影响的,占用了一些,建议把不用的插件都卸载了。 参考技术A 因为chrome过于占用内存,导致卡屏所以才要关闭的,方法;
禁用GPU加速,地址栏输入 chrome://flags,找到“对所有网页执行 GPU 合成 Mac, Windows, Linux”项,下拉选择“已停用”。
除此之外,其他几个设置也很有必要:
禁用掉一个flash插件;
在地址栏中输入chrome://plugins,找到Adobe Flash Player这个插件,能看到旁边括号中写的(2files),点击右边的详细信息,把其中的一个禁用掉,只留一个flash插件,建议禁用chrome自带的flash插件;
清除chrome浏览器缓存cache;
同时按下Ctrl + Shift + Delete 组合键,调出“清除浏览数据”的对话框,选中“清空缓存”,在“清除这y段时间的数据”后面的下拉列表中选择“所有内容”,然后点击“清除浏览数据”按钮。如果“清空缓存”后问题仍然存在,可以尝试清除其它数据;
尝试禁用某些特别占用CPU的扩展,临时禁用杀毒软件(内存验证不足时可以禁用杀毒)。
在具有 GPU 加速的 arrayfun 中使用匿名函数 (Matlab)
【中文标题】在具有 GPU 加速的 arrayfun 中使用匿名函数 (Matlab)【英文标题】:Usage of anonymous functions in arrayfun with GPU acceleration (Matlab) 【发布时间】:2012-10-25 13:10:04 【问题描述】:我是 Matlab R2012b 的 Parallel 工具箱的新手,想知道解决以下问题的最佳方法是什么。
我正在分析图像中每个像素的邻域。这是并行化的绝佳案例。但是,我似乎无法让它工作。
问题的主要问题是应该将一些“常量”参数传递给函数。因此,应该为每个像素调用该函数,但是,它还需要访问周围的像素。 (最好将图像作为某种常量参数和要分析的像素坐标传递)。
输出是每个像素一个值。
目前我有这个:
z2 = arrayfun(@(x) analyze(x, image, const1, ...), gpuArray(1:m*n));
其中 x 是虚拟变量,图像是包含图像亮度值的 2D 矩阵,const1(和其他)是函数常数(例如分析窗口的大小)。 m 和 n 是图像的尺寸大小。
但是,我得到了这个错误
使用 gpuArray/arrayfun 时出错 不支持使用功能性工作区。
有什么想法吗?
干杯, 鲁本
【问题讨论】:
你能把analyze
的代码贴出来吗?
消息“不支持使用功能工作区”让我怀疑您无法在对 arrayfun
的调用中创建 workspace
变量。我尝试在本地对此进行测试,但可惜我的视频卡太旧且不受支持。
@slayton 感谢您的努力!我不在家 atm,analyze 函数就是一个例子,因为真正的代码非常复杂(尽管它仅存在于算术中)。但是,有效的简化是“计算每个像素及其周围像素的平均值。剩下的我可以算出来。我会尽快发布一些参考代码。
@slayton 不同的方法(例如不使用匿名函数)也非常感谢
实际上我怀疑匿名函数可能是罪魁祸首,因为它带来了您工作空间的一部分。不过我不能确定,因为我无法在我的机器上执行任何对 gpuArray
的调用。
【参考方案1】:
很遗憾,R2012b 中的 Parallel Computing Toolbox 不支持此功能。 arrayfun 的 gpuArray 版本目前不支持将常量数据绑定到匿名函数句柄。 Arrayfun 参数必须直接传递,并且必须都是标量或相同大小。
如果您可以绑定常量参数,接下来您会发现当前无法对它们进行索引(或对它们执行任何非标量操作)。
也许您可以使用支持的例程(例如 CONV2 或 FILTER2)来构建您的算法。
【讨论】:
感谢您的回答。我想你可能是对的。但是,我不会选择此作为正确答案,希望有人可以为我提供解决方法或其他东西。 恐怕您目前所能期望的最好的可能是使用 MATLAB 的 CUDAKernel 功能(除非您可以将所需的所有数据作为标量传递)。【参考方案2】:这是一篇很老的帖子,但由于我一直在努力解决类似的问题,所以我想分享一下我对此的发现:
如果您将arrayfun
的调用放在一个函数中,您也许可以将analyze
函数实现为可以访问您的常量数组的嵌套函数。但是,这可能需要在重写代码时付出相当大的努力,因为在嵌套的 analyze
函数中,您不能将任何完整数组传递给任何其他函数,这意味着您必须以仅使用单个索引数组条目的方式重写所有内容你的常量数组,例如在数组上的 for 循环中。因此,所有像size
等函数的调用都不起作用,应该移到analyze
之外(至少我正在使用的Matlab2015b 是这种情况)。
这是如何完成的示例(不是我的):
https://devblogs.nvidia.com/high-performance-matlab-gpu-acceleration/
最好的,
汉斯-马丁
【讨论】:
以上是关于Chrome 的 GPU 加速问题。的主要内容,如果未能解决你的问题,请参考以下文章