vsco 媒体不可用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vsco 媒体不可用相关的知识,希望对你有一定的参考价值。

参考技术A vsco进不去需要先进入手机设置,然后点击放大镜按钮,打开搜索框输入服务框架进入。VSCO是时下一款非常流行的摄影App。VSCO支持的功能包括摄影App,语音通讯、相机拍照、照片编辑和照片分享等功能。随着版本的不断升级,VSCO逐渐成了一款功能强大的摄影App,包含了相机拍照、照片编辑和照片分享三大功能。虽如此,但VSCO依然保持了简单的使用方式可以利用VSCO内置包含了强大手动控制功能的相机进行拍摄,也可 以利用VSCO内数量众多的胶片滤镜、照片基础调整工具对照片进行处理,创造出令人着迷、胶片味道十足的手机摄影作品。

哪些版本的 Windows 支持/需要哪些 CPU 多媒体扩展? (如何检查 SSE 或 AVX 是不是完全可用?)

【中文标题】哪些版本的 Windows 支持/需要哪些 CPU 多媒体扩展? (如何检查 SSE 或 AVX 是不是完全可用?)【英文标题】:Which versions of Windows support/require which CPU multimedia extensions? (How to check if SSE or AVX are fully usable?)哪些版本的 Windows 支持/需要哪些 CPU 多媒体扩展? (如何检查 SSE 或 AVX 是否完全可用?) 【发布时间】:2016-03-08 05:56:23 【问题描述】:

到目前为止,我已经设法发现:

SSE 和 SSE2 对于 Windows 8 及更高版本是必需的(当然对于任何 64 位操作系统) AVX 仅受 Windows 7 SP1 或更高版本支持

在 Windows 上使用 SSE3、SSSE3、SSE4.1、SSE 4.2、AVX2 和 AVX-512 是否有任何注意事项?

一些说明:如果我使用来自 SSE/AVX 集合之一的指令,我需要它来确定我的程序将在哪些操作系统上运行。

【问题讨论】:

@downvoters:与大多数问题相比,这不是一个糟糕的问题,即使结果证明它没有一个非常有趣的答案。 OP不知道,否则他不会问。很清楚,听起来 OP 试图研究,但不知道要搜索什么(因为他还不知道问题的答案:P)我可以看到关闭它作为 SO / 迁移的题外话SU,但不是反对票。 我不认为这是一个 SU 问题,我怀疑即使是大多数超级用户也会在汇编中编码。我将改写问题以更清楚地表明我正在尝试在我的程序中使用操作码。 我不明白这个问题只是“关于通用计算软件”。它包含“Windows”的唯一事实并不意味着它在这里是题外话。这是一个程序员角度的平台问题,对于SSE/AVX/etc代码的人来说显然很重要。 【参考方案1】:

引入新架构状态的扩展需要特殊的操作系统支持,因为操作系统必须在上下文切换时保存/恢复更多数据。因此,从操作系统的角度来看,如果操作系统支持 SSE,那么让用户空间代码运行 SSSE3 指令不需要做任何额外的事情。

SSE、AVX 和 AVX512 是引入新架构状态的扩展。

SSE 引入了 xmm regs(以及用于舍入模式和 FP 异常状态的 MXCSR) AVX 引入了ymm(下半部分是旧的xmm regs)。 AVX512 引入了zmm(扩展了x/ymm regs),并且还将64bit 模式下的vector regs 数量增加了一倍:zmm0-zmm31。 x/y/zmm16..31 只能通过向量指令的 AVX-512 编码(EVEX 前缀)访问,因此有趣的是可以在没有 requiring vzeroupper 和 aren't affected by it.k0..k7 64 位掩码的情况下使用寄存器(或在 Xeon Phi 中没有 AVX-512BW 的 16 位)在 AVX-512 中也是新的。

您可以使用 CPUID 指令以通常的方式检查 CPU 对 SSE 或 AVX 的支持。

为了防止在多任务操作系统上使用新扩展时发生静默数据损坏,该扩展不会在上下文切换时保存/恢复新架构状态,如果操作系统没有 set an OS-support bit in a control register,SSE 指令将作为非法指令出错。因此,矢量扩展在不知道保存/恢复该扩展的必要状态的操作系统上“不起作用”。


对于 SSE,可能没有任何干净的独立于操作系统的方式来检测操作系统已承诺通过设置 CR4.OSFXSRCR4.OSXMMEXCPT 等在上下文切换时保存/恢复 SSE 状态. 位,因为even reading a control register is privileged,并且没有反映设置的 CPUID 位。 SSE 支持如此广泛,以至于您必须使用非常古老的版本(或自制)操作系统才能成为问题。


对于 AVX,我们不需要操作系统支持来检测 AVX 是否可用(由硬件支持并由操作系统启用):用户空间可以运行 xgetbv 并检查启用 -功能标志以查看操作系统是否已启用 AVX 指令运行而不会出现故障。

来自Intel's intro to AVX:

验证操作系统是否支持 XGETBV 使用 CPUID.1:ECX.OSXSAVE bit 27 = 1. 同时,验证 CPUID.1:ECX bit 28=1(支持英特尔 AVX)和/或位 25=1(AES 支持)... (以及 FMA、AES 和 PCLMULQDQ 的其他位) 发出XGETBV,并验证启用功能的掩码 第 1 位和第 2 位是 11b(XMM 状态和 YMM 状态由 操作系统)。

调用 OS 提供的函数来检测 OS 支持可能更容易,而不是使用内联 asm 或功能检测库来完成所有这些工作。例如,Win7SP1 引入了GetEnabledXStateFeatures 以及对 AVX CPU 的支持。 (在没有 SSE 的 CPU 上运行 Win7SP1 是不太可能或不可能的,因此对于 SSE,您只需检查 CPUID 和操作系统版本即可。)

这也被理解为操作系统的上下文切换将正确保存/恢复完整状态的承诺,尽管当然有错误、恶意或深奥的操作系统(可能是协作多任务?)可能会有所不同。对于包括 Windows 在内的主流操作系统,这确实意味着 YMM 寄存器将像您期望的那样保持它们的值。


AVX512 也是如此:您可以检查指令集的 CPUID 功能位,检查操作系统是否已承诺管理新的架构状态通过启用 XSETBV 中的正确位来切换上下文。 (所以你应该检查 XGETBV)。检查 XGETBV 结果并且 0xE6 等于 0xE6。

【讨论】:

所以这意味着我不能在运行于 2013 年之前发布的操作系统下的程序中使用 AVX512 扩展,因为那是它被宣布的时候。你知道哪些 Windows 版本会收到更新,使它们能够正确处理 zmm 寄存器吗? 其实你应该使用IsProcessorFeaturePresentGetEnabledXStateFeatures,因为它们不仅告诉你CPU特性是否存在,还告诉你操作系统是否支持。如果在 CPU 中检测(比如说)AVX 支持,然后使用 AVX 指令,就会发现您的 AVX 状态在每次上下文切换时都会损坏,因为操作系统不支持 AVX 上下文切换。 @RaymondChen 其实并没有你想象的那么糟糕。处理器强制执行它。如果程序在 XSAVE 位未设置时尝试执行 AVX 指令,则会发出非法指令异常。默认情况下 XSAVE 位未设置以实现向后兼容性。一旦操作系统设置它,它就“接受了合同”,它将在上下文切换中保持 ymm 状态。然后处理器会让你执行 AVX 指令。 替换全功能查询的函数是IsProcessorFeaturePresent。它来自旧操作系统(至少从 WinNT4/Win98 开始就存在)。但它可能不支持检测旧操作系统中的某些功能;例如在 Windows 2000 中它不支持检测 SSE2,而如果 SSE2 存在于 CPU 中,则可以使用。 IsProcessorFeaturePresent 的 AVX/AVX2 标志未记录在案,因此不确定它们需要什么操作系统。它使__cpuid+_xgetvb 更具吸引力的解决方案。 (也不想向其他可能可移植的代码部分添加 API 调用)

以上是关于vsco 媒体不可用的主要内容,如果未能解决你的问题,请参考以下文章

我应该在 Xamarin.Forms 中使用啥视频或媒体播放器? 3 似乎可用

高可用和灾备

IMAPI:如果图像大小超过可用空间,如何获取图像大小而不抛出异常?

在媒体服务器(例如 Adob​​e)上查找可用的 RTMP 频道

我下载了vsco,然后登陆不上,都是这样显示说连接服务器出现错误,请稍后重试,然后我换了好几个个时

使用 SonataMediaBundle,我如何找出可用的媒体提供商?