标签: amd-processor

使用xmm寄存器而不是ymm时,vxorps在AMD Jaguar/Bulldozer/Zen上的归零速度是否更快?

AMD CPU通过解码为两个128b操作来处理256b AVX指令.例如,vaddps ymm0, ymm1,ymm1在AMD上,Steamroller解码为2个宏操作,吞吐量的一半vaddps xmm0, xmm1,xmm1.

XOR归零是一种特殊情况(没有输入依赖性,并且在Jaguar上至少避免消耗物理寄存器文件条目,并且使得来自该寄存器的movdqa在发出/重命名时被消除,就像Bulldozer一直在做非零的REG)中. 但它是否足够vxorps ymm0,ymm0,ymm0早被检测到仍然只能解码为1个具有相同性能的宏操作 vxorps xmm0,xmm0,xmm0?(不像vxorps ymm3, ymm2,ymm1)

或者,在已经解码为两个uop之后,独立检测是否会发生?此外,AMD CPU上的向量xor-zeroing是否仍然使用执行端口?在Intel-CPU上,Nehalem需要一个端口,但Sandybridge系列在发布/重命名阶段处理它.

Agner Fog的指令表没有列出这个特例,他的微指南没有提到uop的数量.


这可能意味着vxorps xmm0,xmm0,xmm0更好的实施方式_mm256_setzero_ps().

对于AVX512 _mm512_setzero_ps(),如果可能的话,也只使用VEX编码的归零惯用语而不是EVEX来保存字节.(即对于zmm0-15. vxorps xmm31,xmm31,xmm31仍然需要EVEX).gcc/clang目前使用他们想要的任何寄存器宽度的xor-zeroing习语,而不是总是使用AVX-128.

报告为clang bug 32862和gcc bug 80636.MSVC已经使用了xmm.尚未向ICC报告,ICC也使用zmm regs进行AVX512归零.(虽然英特尔可能不会改变,因为目前任何英特尔CPU都没有任何好处,只有AMD.如果他们发布的低功耗CPU将矢量分成两半,他们可能.他们目前的低功耗设计(Silvermont)没有t支持AVX,只支持SSE4.)


我知道使用AVX-128指令清零256b寄存器唯一可能的缺点是它不会触发Intel CPU上256b执行单元的预热.可能会破坏试图加热它们的C或C++黑客攻击.

(在第一个256b指令之后的第一个~56k周期内,256b向量指令较慢.请参阅Agner Fog微格式pdf中的Skylake部分).如果调用noinline返回的函数_mm256_setzero_ps不是预热执行单元的可靠方法,那可能没问题.(一个仍然可以在没有AVX2的情况下工作,并且避免任何负载(可以缓存未命中)是__m128 onebits = _mm_castsi128_ps(_mm_set1_epi8(0xff));
return _mm256_insertf128_ps(_mm256_castps128_ps256(onebits), onebits)应该编译为pcmpeqd xmm0,xmm0,xmm0/ vinsertf128 ymm0,xmm0,1.对于你曾经呼叫一次预热(或保持)执行单元的事情,这仍然是非常微不足道的.关键循环.如果你想要内联的东西,你可能需要inline-asm.)


我没有AMD硬件所以我无法测试这个.

如果有人拥有AMD硬件但不知道如何测试,请使用perf计数器来计算周期(最好是m-ops或uops或AMD称之为的任何内容).

这是我用来测试短序列的NASM/YASM源:

section .text
global _start …
Run Code Online (Sandbox Code Playgroud)

x86 assembly avx micro-optimization amd-processor

11
推荐指数
1
解决办法
691
查看次数

Android Studio模拟器和AMD CPU

我无法在标准的Nexus 5仿真器上运行我的应用程序.它似乎需要Intel HAXM,但我有一个AMD处理器.那么如何在不购买英特尔处理器(或安装Linux)的情况下使用模拟器呢?

android-studio haxm amd-processor

10
推荐指数
1
解决办法
5万
查看次数

x86 上存储到加载转发失败的成本是多少?

在最新的 x86 架构上,存储到加载转发失败的成本是多少?

特别是,存储到加载转发会失败,因为加载部分与较早的存储重叠,或者因为较早的加载或存储跨越某些导致转发失败的对齐边界。

当然存在延迟成本:它有多大?是否还存在吞吐量成本,例如,失败的存储到加载转发是否使用了其他加载和存储甚至其他非内存操作无法使用的额外资源?

当存储的所有部分都来自存储缓冲区时,与混合存储缓冲区和 L1 的情况相比,是否有区别?

x86 intel cpu-architecture micro-optimization amd-processor

10
推荐指数
1
解决办法
908
查看次数

为什么ryzen上的p-state状态MSR没有变化?

我试图检测我的CPU的当前p状态.我注意到p-state状态MSR(C001_0063)总是在我的ryzen 1700x系统上返回2,即使核心显然不在该状态.我认为它曾经用于我的主板附带的初始BIOS(v0403),但是不能再下载了1.

我的CPU超频2到3.8GHz.我曾经cpufreq-set修复速度并cpufreq-info验证:

analyzing CPU 0:
  driver: acpi-cpufreq
  CPUs which run at the same hardware frequency: 0
  CPUs which need to have their frequency coordinated by software: 0
  maximum transition latency: 4294.55 ms.
  hardware limits: 2.20 GHz - 3.80 GHz
  available frequency steps: 3.80 GHz, 2.20 GHz
  available cpufreq governors: ondemand, conservative, performance, schedutil
  current policy: frequency should be within 3.80 GHz and 3.80 GHz.
                  The governor "performance" may decide …
Run Code Online (Sandbox Code Playgroud)

linux hardware cpu power-saving amd-processor

10
推荐指数
1
解决办法
594
查看次数

开发PC:AMD vs Intel和32-bit与64-bit

我想购买一台新的开发PC.我的预算不超过1,000美元(包括显示器).我对笔记本电脑(台式机替代型)或传统台式电脑可以做得很好.

我的主要开发环境将是Microsoft,Visual Studio 2008(以及对旧版Visual Studio 6代码的支持).SQL Server 2005,2008以及SQL Server 2000的遗留支持.Microsoft Office 2003,可能安装2007但支持Office 2000.我将编写和支持的软件主要是Windows XP,但有些Vista.我将不得不假设有64位实现安装到.

我的第一个困惑始于选择AMD或英特尔.我担心的是在AMD环境中使用Visual Studio构建软件存在兼容性问题.我没有任何证据,只是担心有人会为我清理.

最后,我对32位和64位安装感到困惑.即使64位稳定上升,我应该坚持使用最小公分母(32位)吗?我知道64位操作系统将解决超过4G的RAM和我喜欢的问题,因为我想为测试环境设置尽可能多的虚拟机,并且可能会同时激活多个虚拟机.

我不是在寻找梦想的机器,只是一台带有显示器和最好的处理器的机器,价格大约1000美元,这将允许我为大多数机器编写软件.

64-bit 32-bit intel amd-processor

9
推荐指数
1
解决办法
5388
查看次数

valgrind的意思是"跳转到无效地址"这里?

valgrind --leak-check=full ./CH02_HelloTriangle 
==11404== Memcheck, a memory error detector
==11404== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==11404== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==11404== Command: ./CH02_HelloTriangle
==11404== 
==11404== Jump to the invalid address stated on the next line
==11404==    at 0x0: ???
==11404==    by 0x6F9271A: ??? (in /usr/lib/fglrx/dri/fglrx_dri.so)
==11404==  Address 0x0 is not stack'd, malloc'd or (recently) free'd
==11404== 
==11404== 
==11404== Process terminating with default action of signal 11 (SIGSEGV)
==11404== …
Run Code Online (Sandbox Code Playgroud)

valgrind gpu ati opengl-es-2.0 amd-processor

9
推荐指数
1
解决办法
4874
查看次数

来自多个进程的并发GPU内核执行

我有一个应用程序,我希望在多个进程之间共享一个GPU.也就是说,这些进程中的每一个都会创建自己的CUDA或OpenCL上下文,目标是相同的GPU.根据Fermi白皮书[1],应用程序级上下文切换小于25微秒,但是在GPU上启动时启动有效地序列化 - 因此Fermi不能很好地完成这项工作.根据Kepler白皮书[2],有一种叫做Hyper-Q的东西允许来自多个CUDA流,MPI进程或进程内线程的多达32个同时连接.

我的问题:是否有人在Kepler GPU上尝试过此操作并验证其内核是否在从不同进程调度时同时运行?这只是一个CUDA功能,还是可以在Nvidia GPU上与OpenCL一起使用?AMD的GPU是否支持类似的东西?

[1] http://www.nvidia.com/content/PDF/fermi_white_papers/NVIDIA_Fermi_Compute_Architecture_Whitepaper.pdf

[2] http://www.nvidia.com/content/PDF/kepler/NVIDIA-Kepler-GK110-Architecture-Whitepaper.pdf

cuda gpu nvidia opencl amd-processor

9
推荐指数
1
解决办法
2829
查看次数

如何在Nvidia GPU上调试OpenCL?

有没有办法在Nvidia GPU上调试OpenCL内核,即设置断点和检查变量?我的理解是,Nvidia的工具不允许OpenCL调试,AMDIntel只允许在自己的设备上使用它.

gpu gpgpu nvidia opencl amd-processor

9
推荐指数
1
解决办法
4055
查看次数

无法保存快照 AVD

每次启动模拟器时,一切都像第一次一样发生,我无法保存快照并收到错误“无法保存快照”和“正在跳过快照保存:当前状态不...”。然而,“快速启动”和硬件图形选项已启用,看起来我的电脑由于某些原因甚至无法保存它。一切都已更新,有助于解决问题。如果有必要的话,我有 AMD Ryzen 5 2600。我的屏幕截图: AVD 屏幕 错误消息

android android-virtual-device android-emulator android-studio amd-processor

9
推荐指数
0
解决办法
1115
查看次数

使用 Ryzen 处理器同时运行 WSL2 和 Android Studio

我想运行带有我的 api 的 WSL2,并使用 Android 模拟器来运行我的应用程序,以便我可以测试所述 api。当我激活 Hyper-V 时,WSL2 工作正常。然后我尝试使用 Android Studio 的模拟器,但它只是挂起,从未启动模拟器。

现在,如果我完全停用 Hyper-V(在 Windows 功能屏幕中并通过bcdedit /set hypervisorlaunchtype off),模拟器会完美启动,但当然 WSL2 现在无法工作...

我查看了这里的很多主题但没有成功。例如,如何在 Windows 上运行 Android 模拟器,同时使用 WSL2 和 zsh?使用直接在 Windows 中运行的模拟器本教程在 WSL 中运行 React Native 。到目前为止还没有成功。

正如我所说,我使用的是 Ryzen 处理器。

android virtual-machine android-emulator amd-processor windows-subsystem-for-linux

9
推荐指数
1
解决办法
8060
查看次数