分类目录归档:技术文献

曾经被取消,现在又卷土重来!AVX-512到底有何魅力?

7月25日,英特尔发布了新的 APX(高级性能扩展),同时还披露了新的 AVX10,它将首次为 P 核和 E 核提供统一的 AVX-512 功能支持。也标志着被英特尔在12、13代酷睿中枪毙的AVX 指令集运算功能回归。AVX-512为何能卷土重来?

不得不提的ALU
在了解 AVX-512 指令集之前,有必要先了解一下 ALU 的工作原理。

顾名思义,算术处理单元用于执行数学计算任务。这些任务包括加法、乘法和浮点计算等运算。为了完成这些任务,ALU 使用由 CPU 时钟信号驱动的特定应用数字电路。

因此,CPU 的主频就决定了 ALU 处理指令的速度。因此,如果 CPU 的时钟频率为 5GHz,那么 ALU 在一秒钟内可以处理 50 亿条指令。因此,CPU 的性能会随着时钟频率的提高而提高,但CPU 产生的热量也会增加。

那么,新一代处理器如何提供比旧版处理器更好的性能呢?人们开始利用并行概念来提高性能。这种并行性可以通过使用多核架构来实现,即使用多个不同的处理内核来提高 CPU 的计算能力。

另一种提高性能的方法是使用 SIMD 指令集。简单地说,“单指令、多数据”的指令方式,可以让 ALU 在不同的数据点上执行相同的指令。这种并行方式可以提高 CPU 的性能,AVX-512 就是一种 SIMD 指令,用于提高 CPU 在执行特定任务时的性能。

什么是 AVX-512,它如何工作?
AVX 512 指令集是 AVX 的第二次迭代,于 2013 年进入英特尔处理器。作为高级矢量扩展(Advanced Vector Extensions)的缩写,AVX指令集最早出现在英特尔至强Phi(Knights Landing)架构中,后来在英特尔服务器处理器Skylake-X CPU中使用。

此外,AVX-512 指令集通过 Cannon Lake 架构进入基于消费类的CPU,后来又得到 Ice Lake 和 Tiger Lake 架构的支持。

该指令集的主要目标是加速涉及数据压缩、图像处理和加密计算的任务。AVX-512 指令集的计算能力是旧版指令集的两倍,性能大幅提升。

那么,英特尔是如何将使用 AVX-512 架构的 CPU 性能提高一倍的呢?

如前所述,ALU 只能访问 CPU 寄存器中的数据。高级矢量扩展指令集增加了这些寄存器的大小。

由于寄存器容量的增加,ALU 可以在一条指令中处理多个数据点,从而提高了系统性能。

就寄存器大小而言,AVX-512 指令集提供 32 个 512 位寄存器,与旧版 AVX 指令集相比增加了一倍。

因此,只需执行一条指令,就可以同时进行多项操作,而不必以标量方式(即逐个数据)进行操作。例如,可以同时对 8 个 64 位数据或 16 个 32 位数据进行操作,等等。

英特尔为什么要终止 AVX-512?
如前所述,AVX-512 指令集具有多项计算优势。事实上,像 TensorFlow 这样的流行AI开发库都使用了该指令集,以便在支持该指令集的 CPU 上提供更快的计算速度。

而对于浮点运算极度依赖的加密解密计算、文件压缩和解压缩、音频视频编码解码以及复杂的3D渲染来说,AVX-512的性能提升是比较大的。也就是说,对生产力用户来说,只要软件支持,那么AVX-512对性能提升是很明显的。

即使是对于3A大作,由于复杂的3D和AI计算,这种并行指令集对帧率的提升也是有帮助的。而诸如游戏主机模拟器等虚拟化计算场合,其意义也非常大。

那么,英特尔为什么要在最近的12、13代酷睿处理器上禁用 AVX-512呢?

因为这两代处理器与英特尔生产的旧处理器不同。旧系统使用的是运行在同一架构上的内核,而这两代酷睿处理器使用的是两个不同的内核,也就是异构运算技术。Alder Lake 处理器中的这些内核被称为 P 核和 E 核,采用不同的架构。

P 核心使用 Golden Cove 微架构,而 E 核心使用 Gracemont 微架构。当特定指令能在一种架构上运行而不能在另一种架构上运行时,这种架构上的差异就会妨碍调度程序的正常运行。

在 Alder Lake 处理器中,AVX-512 指令集就是这样一个例子,因为 P 核心拥有处理该指令的硬件,而 E 核心却没有。

因此,Alder Lake 处理器不支持 AVX-512 指令集。

尽管如此,AVX-512 指令仍可在某些英特尔未将其物理融合的 Alder Lake CPU 上运行。要做到这一点,用户必须在 BIOS 中禁用 E 核。

相反,由于采用非异构运算结构,AMD在Ryzen7000 CPU上,反而支持起了AVX-512,似乎也是一种小小的讽刺。

AVX10如何恢复AVX-512支持?
新的 AVX10 ISA 并不支持英特尔当前一代的 CPU,但它使英特尔同时拥有 E 核和 P 核的芯片仍然支持 AVX-512,尽管 512 位指令只能在 P 核上运行。同时,融合的 256 位 AVX10 指令可以在 P 核或 E 核上运行,从而使整个芯片仍然支持 AVX-512 功能。

不过,e-cores 将仅限于融合 AVX10 的最大 256 位向量长度,而 P-cores 可以使用 512 位向量。这感觉类似于 Arm 的 SVE 对可变向量宽度的支持。

AVX10 推出后,英特尔将冻结 AVX-512 ISA,今后 AVX-512 指令的所有使用都将通过 AVX10 ISA 进行。

使用Python生成BaiduPCS工具的百度网盘秒传信息

有一次想使用百度网盘自带的Windows客户端上传一些大量音乐文件,这些音乐文件其他百度网盘用户肯定早都上传过,所以基本这些文件不会占用太多网络上传带宽,但是百度网盘自带的Windows客户端计算文件的md5过程非常慢,估计是为了避免计算md5过程影响电脑整体性能,所以故意没有开全速计算,后来利用BaiduPCS命令行工具进行上传,所以写了一个Python代码进行md5计算,计算过程可以达到磁盘的峰值速度。

Nitrokey Pro 使用方法

Windows管理Nitrokey Pro使用Gpg4win(https://gpg4win.org/),此工具会自动安装GnuPG,设置Nitrokey Pro信息的时候会用到GnuPG的命令行工具。

 

GnuPG命令行说明

gpg --card-status 查看智能卡状态

gpg --card-edit 编辑智能卡

fetch 可以从设置的url中获取公钥

admin 显示管理命令

passwd 可以修改PIN与Admin PIN码

gpg --export-ssh-key ************************* 导出ssh用的公钥(符合ssh的规范)

 

设置记录

默认PIN(用于日常操作,如解锁令牌,签名和加解密等):123456

默认Admin PIN:12345678

重置码:(*******************)用户重置PIN

name: myname

url: http://keyserver.ubuntu.com/pks/lookup?op=get&fingerprint=on&search=0xF83BB3599EF21740 (用ubuntu的速度比较快)

lang: cn

sex: M

login: username

 

换到其它电脑上使用Nitrokey Pro时候,要先导入对应的公钥,否则gpg无法使用Nitrokey Pro。

 

如果忘了Nitrokey Pro的密码官方提供了一个工具(CryptoStickReset.exe),可以初始化(很彻底和新买的一样)。

 

参考

https://raymii.org/s/articles/Nitrokey_Start_Getting_started_guide.html

https://www.nitrokey.com/de/putty

 

 

--------------------------------其它--------------------------------

修改信任

$ gpg --edit-key <Uid>

gpg (GnuPG) 1.4.11; Copyright (C) 2010 Free Software Foundation, Inc.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

 

pub  1024D/6EDA5E6F  created: 2013-08-29  expires: never       usage: SCA

trust: full          validity: unknown

sub  1024g/32E0CB1C  created: 2013-08-29  expires: never       usage: E

[ unknown] (1). <Uid>

 

gpg> trust

pub  1024D/6EDA5E6F  created: 2013-08-29  expires: never       usage: SCA

trust: full          validity: unknown

sub  1024g/32E0CB1C  created: 2013-08-29  expires: never       usage: E

[ unknown] (1). <Uid>

 

Please decide how far you trust this user to correctly verify other users' keys

(by looking at passports, checking fingerprints from different sources, etc.)

 

1 = I don't know or won't say

2 = I do NOT trust

3 = I trust marginally

4 = I trust fully

5 = I trust ultimately

m = back to the main menu

 

Your decision? 5

Do you really want to set this key to ultimate trust? (y/N) y

 

pub  1024D/6EDA5E6F  created: 2013-08-29  expires: never       usage: SCA

trust: ultimate      validity: unknown

sub  1024g/32E0CB1C  created: 2013-08-29  expires: never       usage: E

[ unknown] (1). <Uid>

Please note that the shown key validity is not necessarily correct

unless you restart the program.

 

gpg> quit

 

将以有密钥导入到Nitrokey Pro中

$ gpg --edit-key 559C215F

gpg (GnuPG) 1.4.9; Copyright (C) 2008 Free Software Foundation, Inc.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

 

Secret key is available.

 

pub  1024D/559C215F  created: 2009-05-04  expires: never       usage: SC

trust: ultimate      validity: ultimate

sub  2048g/5457F4E7  created: 2009-05-04  expires: never       usage: E

sub  1024R/E1D9B30D  created: 2009-05-13  expires: never       usage: S

sub  1024R/EDDA691E  created: 2009-05-13  expires: never       usage: E

[ultimate] (1). Martin Gollowitzer (Testing environment) <gollo@fsfe.org>

 

Command> toggle

 

sec  1024D/559C215F  created: 2009-05-04  expires: never

ssb  2048g/5457F4E7  created: 2009-05-04  expires: never

ssb  1024R/E1D9B30D  created: 2009-05-13  expires: never

ssb  1024R/EDDA691E  created: 2009-05-13  expires: never

(1)  Martin Gollowitzer (Testing environment) <gollo@fsfe.org>

 

Command> key 2

 

sec  1024D/559C215F  created: 2009-05-04  expires: never

ssb  2048g/5457F4E7  created: 2009-05-04  expires: never

ssb* 1024R/E1D9B30D  created: 2009-05-13  expires: never

ssb  1024R/EDDA691E  created: 2009-05-13  expires: never

(1)  Martin Gollowitzer (Testing environment) <gollo@fsfe.org>

 

Command> keytocard

Signature key ....: [none]

Encryption key....: [none]

Authentication key: [none]

 

Please select where to store the key:

(1) Signature key

(3) Authentication key

Your selection? 1

 

You need a passphrase to unlock the secret key for

user: "Martin Gollowitzer (Testing environment) <gollo@fsfe.org>"

1024-bit RSA key, ID E1D9B30D, created 2009-05-13

 

gpg: generating new key

gpg: 3 Admin PIN attempts remaining before card is permanently locked

 

Admin PIN

 

sec  1024D/559C215F  created: 2009-05-04  expires: never

ssb  2048g/5457F4E7  created: 2009-05-04  expires: never

ssb* 1024R/E1D9B30D  created: 2009-05-13  expires: never

card-no: 0001 00000229

ssb  1024R/EDDA691E  created: 2009-05-13  expires: never

(1)  Martin Gollowitzer (Testing environment) <gollo@fsfe.org>

 

Command> key 2

 

sec  1024D/559C215F  created: 2009-05-04  expires: never

ssb  2048g/5457F4E7  created: 2009-05-04  expires: never

ssb  1024R/E1D9B30D  created: 2009-05-13  expires: never

card-no: 0001 00000229

ssb  1024R/EDDA691E  created: 2009-05-13  expires: never

(1)  Martin Gollowitzer (Testing environment) <gollo@fsfe.org>

 

Command> key 3

 

sec  1024D/559C215F  created: 2009-05-04  expires: never

ssb  2048g/5457F4E7  created: 2009-05-04  expires: never

ssb  1024R/E1D9B30D  created: 2009-05-13  expires: never

card-no: 0001 00000229

ssb* 1024R/EDDA691E  created: 2009-05-13  expires: never

(1)  Martin Gollowitzer (Testing environment) <gollo@fsfe.org>

 

Command> keytocard

Signature key ....: [none]

Encryption key....: [none]

Authentication key: [none]

 

Please select where to store the key:

(2) Encryption key

Your selection? 2

 

You need a passphrase to unlock the secret key for

user: "Martin Gollowitzer (Testing environment) <gollo@fsfe.org>"

1024-bit RSA key, ID EDDA691E, created 2009-05-13

 

gpg: generating new key

 

sec  1024D/559C215F  created: 2009-05-04  expires: never

ssb  2048g/5457F4E7  created: 2009-05-04  expires: never

ssb  1024R/E1D9B30D  created: 2009-05-13  expires: never

card-no: 0001 00000229

ssb* 1024R/EDDA691E  created: 2009-05-13  expires: never

card-no: 0001 00000229

(1)  Martin Gollowitzer (Testing environment) <gollo@fsfe.org>

 

Command> save

 

分区4K对齐那些事,你想知道的都在这里

在对磁盘进行分区时,有一个很重要的注意事项,就是要将分区对齐,不对齐可能会造成磁盘性能的下降。尤其是固态硬盘SSD,基本上都要求4K对齐。磁盘读写速度慢还找不到原因?可能就是4K对齐的锅。那么分区对齐究竟是怎么回事?为什么要对齐?如何才能对齐?如何检测是否对齐呢?今天,我们就来说说分区4K对齐这些事。你想知道的都在这里了。

物理扇区的概念

分区对齐,是指将分区起始位置对齐到一定的扇区。我们要先了解对齐和扇区的关系。我们知道,硬盘的基本读写单位是“扇区”。对于硬盘的读写操作,每次读写都是以扇区为单位进行的,最少一个扇区,通常是512个字节。由于硬盘数据存储结构的限制,单独读写1个或几个字节是不可能的。通过系统提供的接口读写文件数据时,看起来可以单独读写少量字节,实际上是经过了操作系统的转换才实现的。硬盘实际执行时读写的仍然是整个扇区。

近年来,随着对硬盘容量的要求不断增加,为了提高数据记录密度,硬盘厂商往往采用增大扇区大小的方法,于是出现了扇区大小为4096字节的硬盘。我们将这样的扇区称之为“物理扇区”。但是这样的大扇区会有兼容性问题,有的系统或软件无法适应。为了解决这个问题,硬盘内部将物理扇区在逻辑上划分为多个扇区片段并将其作为普通的扇区(一般为512字节大小)报告给操作系统及应用软件。这样的扇区片段我们称之为“逻辑扇区”。实际读写时由硬盘内的程序(固件)负责在逻辑扇区与物理扇区之间进行转换,上层程序“感觉”不到物理扇区的存在。

逻辑扇区是硬盘可以接受读写指令的最小操作单元,是操作系统及应用程序可以访问的扇区,多数情况下其大小为512字节。我们通常所说的扇区一般就是指的逻辑扇区。物理扇区是硬盘底层硬件意义上的扇区,是实际执行读写操作的最小单元。是只能由硬盘直接访问的扇区,操作系统及应用程序一般无法直接访问物理扇区。一个物理扇区可以包含一个或多个逻辑扇区(比如多数硬盘的物理扇区包含了8个逻辑扇区)。当要读写某个逻辑扇区时,硬盘底层在实际操作时都会读写逻辑扇区所在的整个物理扇区。

这里说的“硬盘”及其“扇区”的概念,同样适用于存储卡、固态硬盘(SSD)。接下来我们统称其为“磁盘”。它们在使用上的基本原理是一致的。其中固态硬盘在实现上更加复杂,它有“页”和“块”的概念,为了便于理解,我们可以简单的将其视同为逻辑扇区和物理扇区。另外固态硬盘在写入数据之前必须先执行擦除操作,不能直接写入到已存有数据的块,必须先擦除再写入。所以固态硬盘(SSD)对分区4K对齐的要求更高。如果没有对齐,额外的动作会增加更多,造成读写性能下降。

分区及其格式化

磁盘在使用之前必须要先分区并格式化。简单的理解,分区就是指从磁盘上划分出来的一大片连续的扇区。格式化则是对分区范围内扇区的使用进行规划。比如文件数据的储存如何安排、文件属性储存在哪里、目录结构如何存储等等。分区经过格式化后,就可以存储文件了。格式化程序会将分区里面的所有扇区从头至尾进行分组,划分为固定大小的“簇”,并按顺序进行编号。每个“簇”可固定包含一个或多个扇区,其扇区个数总是2的n次方。格式化以后,分区就会以“簇”为最小单位进行读写。文件的数据、属性等等信息都要保存到“簇”里面。

为什么要分区对齐

为磁盘划分分区时,是以逻辑扇区为单位进行划分的,分区可以从任意编号的逻辑扇区开始。如果分区的起始位置没有对齐到某个物理扇区的边缘,格式化后,所有的“簇”也将无法对齐到物理扇区的边缘。如下图所示,每个物理扇区由4个逻辑扇区组成。分区是从3号扇区开始的。格式化后,每个簇占用了4个扇区,这些簇都没有对齐到物理扇区的边缘,也就是说,每个簇都跨越了2个物理扇区。

为什么要分区对齐

由于磁盘总是以物理扇区为单位进行读写,在这样的分区情况下,当要读取某个簇时,实际上总是需要多读取一个物理扇区的数据。比如要读取0号簇共4个逻辑扇区的数据,磁盘实际执行时,必须要读取0号和1号两个物理扇区共8个逻辑扇区的数据。同理,对“簇”的写入操作也是这样。显而易见,这样会造成读写性能的严重下降。

下面再看对齐的情况。如下图所示,分区从4号扇区开始,刚好对齐到了物理扇区1的边缘,格式化后,每个簇同样占用了4个扇区,而且这些簇都对齐到了物理扇区的边缘。

为什么要分区对齐

在这样对齐的情况下,当要读取某个簇,磁盘实际执行时并不需要额外读取任何扇区,可以充分发挥磁盘的读写性能。显然这正是我们需要的。

由此可见,对于物理扇区大小与逻辑扇区大小不一致的磁盘,分区4K对齐才能充分发挥磁盘的读写性能。而不对齐就会造成磁盘读写性能的下降。

如何才能对齐

通过前述图示的两个例子可以看到,只要将分区的起始位置对齐到物理扇区的边缘,格式化程序就会将每个簇也对齐到物理扇区的边缘,这样就实现了分区的对齐。其实对齐很简单。

如何检测物理扇区大小

划分分区时,要想实现4K对齐,必须首先知道磁盘物理扇区的大小。那么如何查询呢?

打开DiskGenius软件,点击要检测的磁盘,在软件界面右侧的磁盘参数表中,可以找到“扇区大小”和“物理扇区大小”。其中“扇区大小”指的是逻辑扇区的大小。如图所示,这个磁盘的物理扇区大小为4096字节,通过计算得知,它包含了8个逻辑扇区。

DiskGenius查看结果

对齐到多少个扇区才正确

知道了“扇区大小”和“物理扇区大小”,用“物理扇区大小”除以“扇区大小”就能得到每个物理扇区所包含的逻辑扇区个数。这个数值就是我们要对齐的扇区个数的最小值。只要将分区起始位置对齐到这个数值的整数倍就可以了。举个例子,比如物理扇区大小是4096字节,逻辑扇区大小是512字节,那么4096除以512,等于8。我们只要将分区起始位置对齐到8的整数倍扇区就能满足分区对齐的要求。比如对齐到8、16、24、32、... 1024、2048等等。只要这个起始扇区号能够被8整除就都可以。并不是这个除数数值越大越好。Windows系统默认对齐的扇区数是2048。这个数值基本上能满足几乎所有磁盘的4K对齐要求了。

为什么大家都说4K对齐

习惯而已。因为开始出现物理扇区的概念时,多数磁盘的物理扇区大小都是4096即4K字节,习惯了就俗称4K对齐了。实际划分分区时还是要检测一下物理扇区大小,因为有些磁盘的物理扇区可能包含4个、8个、16个或者更多个逻辑扇区(总是2的n次方)。知道物理扇区大小后,再按照刚才说的计算方法,以物理扇区包含的逻辑扇区个数为基准,对齐到实际的物理扇区大小才是正确的。如果物理扇区大小是8192字节,那就要按照8192字节来对齐,严格来讲,这就不能叫4K对齐了。

划分分区时如何具体操作分区对齐

以DiskGenius软件为例,建立新分区时,在“建立新分区”对话框中勾选“对齐到下列扇区数的整数倍”,然后选择需要对齐的扇区数目,点“确定”后建立的分区就是对齐的了。如下图所示:

DiskGenius复制文件

软件在“扇区数目”下拉框中列出了很多的选项,从中选择任意一个大于物理扇区大小的扇区数都是可以的,都能满足对齐要求。软件列出那么多的扇区数选项只是增加了选择的自由度,并不是数值越大越好。使用过大的数值可能会造成磁盘空间的浪费。软件默认的设置已经能够满足几乎所有磁盘的 4K对齐要求。

除了“建立新分区”对话框,DiskGenius软件还有一个“快速分区”功能,其中也有相同的对齐设置。如下图所示:

注册DiskGenius

如何检测是否对齐

作为一款强大的分区管理软件,DiskGenius同样提供了分区4K对齐检测的功能。你可以用它检测一下自己硬盘的分区是否对齐了。使用方法很简单,打开软件后,首先在软件左侧选中要检测的磁盘,然后选择“工具”菜单中的“分区4KB扇区对齐检测”,软件立即显示检测结果,如下图所示:

注册DiskGenius

最右侧“对齐”一栏是“Y”的分区就是对齐的分区,否则就是没有对齐。没有对齐的分区会用红色字体显示。

如何纠正未对齐的分区

对于分区已有数据但是又没有对齐的情况,DiskGenius软件目前还没有提供直接的解决方案(相信以后的版本会提供)。大家可以通过DiskGenius软件,采用分步的方法实现4K对齐。具体步骤如下:

1、用“备份分区”的功能将未对齐的分区备份到镜像文件中。

2、删除未对齐的分区,然后重新建立,建立时选择4K对齐。

3、用“从镜像文件还原分区”的功能通过第一步备份的镜像文件还原分区数据。

对于没有对齐又没有数据的分区就很简单了,删除再重建就好。

怎么样?通过上面的介绍,你是否对分区4K对齐有了一个比较全面的认识呢?

转自 https://diskgenius.cn/exp/about-4k-alignment.php

使用Windows 10 自带邮件程序收发Gmail邮箱

cmd中运行(管理员权限)

Windows 10 Metro 内置应用解除网络隔离的方法

CheckNetIsolation.exe loopbackexempt -s     显示当前列表
CheckNetIsolation.exe loopbackexempt -a -p=SID   添加指定程序到列表
CheckNetIsolation.exe loopbackexempt -d -p=SID   从列表中删除指定程序

找到你要挂代理内置应用的SID
打开注册列表或者Win键+R打开运行窗口,运行Regedit打开注册表管理器,找到以下注册表项:
计算机\HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppContainer\Mappings