GVKun编程网logo

如何在 Linux X86_64 中测试 Intel HyperThreading 的性能

2

在这篇文章中,我们将为您详细介绍如何在LinuxX86_64中测试IntelHyperThreading的性能的内容。此外,我们还会涉及一些关于c#–GoogleAPIvsGooglePlayvsIn

在这篇文章中,我们将为您详细介绍如何在 Linux X86_64 中测试 Intel HyperThreading 的性能的内容。此外,我们还会涉及一些关于c# – Google API vs Google Play vs Intel x86 vs Android TV vs Wear OS Intel x86系统图像差异、CentOS-5.6-x86_64-bin-DVD 和 CentOS-5.6-x86_64-LiveCD这两种有什么区别、Checking if HyperThreading is enabled or not、gcc编译:/usr/lib/gcc/x86_64-linux-gnu/5/x86_64-linux-gnu/crt1.o:在函数‘_start’中:(.text+0x20):对‘main’未定义引用的知识,以帮助您更全面地了解这个主题。

本文目录一览:

如何在 Linux X86_64 中测试 Intel HyperThreading 的性能

如何在 Linux X86_64 中测试 Intel HyperThreading 的性能

如何解决如何在 Linux X86_64 中测试 Intel HyperThreading 的性能

我正在尝试弄清楚英特尔 HT 在 Linux X86_64 中的性能影响。
是否有众所周知的工具或现成的代码来进行此测试?
如果没有,我的测试计划如下,
场景一:
线程1:高优先级,运行在CoreN Thread0,休眠1秒。
线程2:中优先级,在CoreN Thread0中运行,增加一个整数计数器。

线程 3 和 4 与线程 1 和 2 相同,但会在 CoreN 线程 1 中运行。
1 秒后,线程 1 和 3 将分别打印线程 2 和 4 增加的计数器。

场景 2:
然后将线程3和4移动到不同的核心,运行1秒再次检查计数器。

期望场景 2 中整数加法的性能优于场景 1。

我的测试计划对检查英特尔 HT 性能影响是否合理?

解决方法

如果您的工作负载本质上是固定数量的线程,而不是物理内核的数量,那么您的测试方式可能是有意义的。因此,您需要将竞争同一内核(上下文切换)的 2 个线程与共享同一物理内核的逻辑内核的两个线程进行比较。

这不正常,大多数多线程工作负载可以将自己划分为可变数量的线程,因此您可以选择与您的内核匹配的线程数量。


通常您会使用 N 个线程执行类似 x265 的操作,其中 N 是您拥有的物理内核数。 (就像 ffmpeg -preset slow -c:v libx265 -x265-params pools=4 表示一个 NUMA 池的 4 核)。理想情况下,在启动时禁用 HT,或者让每个 HT 对的一个内核脱机,因此 Linux 永远不会将两个线程调度到同一个物理内核上。

然后使用 2N 个线程,让所有逻辑核心保持忙碌,因此看看扩展到更多线程是否有助于或损害您的工作负载的吞吐量。 (隐藏停顿与通过竞争缓存占用空间/内存带宽来创建更多停顿。)

在我的测试中,没有打扰离线内核,在带有双通道 DDR4-2666、1080p x265 编码的 i7-6700k Skylake 上,只需 pools=4 vs. pools=8 -preset 慢pools=8 与 pools=4 相比,速度提高了约 20%。

但是 8 个线程使用显着更多的内存带宽(根据 intel_gpu_top -l 显示集成的内存控制器读/写带宽),并且使交互使用明显更加缓慢。 (或者是因为对 L3 缓存的额外竞争,或者是因为没有空闲的逻辑内核来调度任务,或者两者兼而有之。)


或者,如果您想要基准测试以长时间相互运行两个简单的循环(而不是像 x265 或 BLAS SGEMM 这样的真实程序的指令组合,或者 {{ 1}} 编译或其他),那么是的,您可以编写简单的循环并在 make -j8 下运行它们,以查看现实是否与您从具有前端与后端的代码中预测的内容相匹配(尤其是不同的特定端口)与延迟瓶颈。

请参阅 https://stackoverflow.com/tags/x86/info,尤其是 https://agner.org/optimize/ - Agner 的微架构指南有相当详细的信息,说明 CPU 内核的不同部分如何在超线程之间共享。 (例如,ROB 和存储缓冲区是静态分区的,缓存和执行单元竞争性地共享,前端交替,除非一个线程停止。)

c# – Google API vs Google Play vs Intel x86 vs Android TV vs Wear OS Intel x86系统图像差异

c# – Google API vs Google Play vs Intel x86 vs Android TV vs Wear OS Intel x86系统图像差异

我最近开始使用Visual Studio 2017探索Xamarin.Android.在Android SKD Manager窗口中,我可以看到不同的Android版本,每个版本下都有多个android系统镜像.屏幕截图显示Android 9.0包含所有可用的系统映像:

我想知道我应该下载哪个系统映像,因为我不知道差异.任何人都可以帮助我或参考一些包含每个图像细节的链接?谢谢!

解决方法:

Android手机和平板电脑包含“系统图片”,“Google Api图片”和“Google Play图片”,而非Wear或TV操作系统图片.

您选择的Android手机/平板电脑图片是您的应用需要测试的内容.

系统映像:

此映像仅包含特定API级别的基本/ ASOP版本.这是最基本的版本.即包含的浏览器只是WebView小部件周围的瘦UI外壳.

Google Api图片:

Google Apis includes access to Google Play services.

您可以访问Play服务.例如,您可以针对非Google Play商店设备测试您的应用,但如果您的应用与Facebook,Twitter等分享消息……由于设备上没有Google Play商店,这些应用将无法使用你无法安装它们(我将跳过侧载选项……)

但您可以访问Google服务,因此可以测试“AdMob Lite”之类的内容(AdMod完整版可以包含在您的应用中,因此可以在基本的系统映像上进行测试,但这会增加您的最终APK大小).

Google Play图片:

Google Play in the Play Store column includes the Google Play Store app and access to Google Play services

现在,您的模拟器可以访问Play商店,因此可以安装其他第三方应用,您的应用可以与它们进行互动.因此,如果您要编辑应用程序提供的Microsoft Word文件,您的应用程序可以测试是否安装了Word,如果需要,提示用户安装它,并将.doc文件共享给Word.也许您的应用程序是图像编辑器,您希望其他应用程序与您的应用程序共享其图像,现在可以在模拟器上进行测试,而不是仅在物理设备上进行测试.

Google Play图片是您在OEM /供应商发布的设备上获得的最接近的体验,但在模拟器中.

注意:至于您是选择x86还是x86_64版本的图像,由您自己决定.我个人使用x86_64版本,它们在我的系统上更快.但是,如果您正在安装第三方应用程序,那么如果他们在其应用程序中使用本机共享库,则不是每个人都支持x86_64(也不是x86).

Android电视图片:

这些图像仅用于电视设备的仿真.

> https://developer.android.com/tv/

穿OS图像:

这些图像仅适用于智能手表仿真.

> https://developer.android.com/wear/

CentOS-5.6-x86_64-bin-DVD 和 CentOS-5.6-x86_64-LiveCD这两种有什么区别

CentOS-5.6-x86_64-bin-DVD 和 CentOS-5.6-x86_64-LiveCD这两种有什么区别

CentOS-5.6-x86_64-bin-DVD 和 CentOS-5.6-x86_64-LiveCD这两种有什么区别? 从体积上看livecd的要小很多,而bin-DVD很大,而且是两个iso文件;

我想使用U盘来给服务器装centos;  在网上看有人说把iso安装文件通过Universal-USB-Installer-1.8.7.0.exe刻到U盘即可,但这个工具只能选择一个iso文件,如果是bin-DVD,我该选第一个ISO么?

谢谢了。。。

Checking if HyperThreading is enabled or not

Checking if HyperThreading is enabled or not

egrep -i "processor|physical id" /proc/cpuinfo


dmidecode -t processor | grep -E ''(Core Count|Thread Count)''

Normally, Thread Count = 2 * ( Core Count)

gcc编译:/usr/lib/gcc/x86_64-linux-gnu/5/x86_64-linux-gnu/crt1.o:在函数‘_start’中:(.text+0x20):对‘main’未定义引用

gcc编译:/usr/lib/gcc/x86_64-linux-gnu/5/x86_64-linux-gnu/crt1.o:在函数‘_start’中:(.text+0x20):对‘main’未定义引用

gcc编译器编译时报错:

/usr/lib/gcc/x86_64-linux-gnu/5/…/…/…/x86_64-linux-gnu/crt1.o:在函数‘_start’中:(.text+0x20):对‘main’未定义的引用

 

出现这种问题可能是 你对没有main函数的静态库或动态库尝试编译成可执行文件。我在写makefile的时候对依赖库文件漏写了-c参数,导致其尝试编译链接为可执行文件,又因为没有main函数实现,所以报出了这样的错误。

gcc -c参数表示将源文件编译成目标文件,即.o结尾的文件, gcc -c test.c ------> test.o

而gcc不加参数的话,会将编译并尝试链接为可执行文件,而如果你仅仅只是静态库,没有main函数的话,那么就会链接失败,出现这样的错误。

我们今天的关于如何在 Linux X86_64 中测试 Intel HyperThreading 的性能的分享已经告一段落,感谢您的关注,如果您想了解更多关于c# – Google API vs Google Play vs Intel x86 vs Android TV vs Wear OS Intel x86系统图像差异、CentOS-5.6-x86_64-bin-DVD 和 CentOS-5.6-x86_64-LiveCD这两种有什么区别、Checking if HyperThreading is enabled or not、gcc编译:/usr/lib/gcc/x86_64-linux-gnu/5/x86_64-linux-gnu/crt1.o:在函数‘_start’中:(.text+0x20):对‘main’未定义引用的相关信息,请在本站查询。

本文标签: