vzeroallゼロはymm16からymm31を登録しますか?


8

ドキュメントvzeroall一貫性がないようです。散文は言う:

命令は、すべてのXMMまたはYMMレジスタの内容をゼロにします。

ただし、その下の疑似コードは、64ビットモードではレジスターymm0からのみymm15影響を受けることを示しています。

IF (64-bit mode)
    limit ←15
ELSE
    limit ← 7
FOR i in 0 .. limit:
    simd_reg_file[i][MAXVL-1:0] ← 0

AVX-512をサポートするマシンymm15では、ymm16までymm31存在するため、「すべて」をクリアするのと同じではありません。

散文または疑似コードは正しいですか?


5
グーグルによると、疑似コードは正しいです。影響を受けるのは0〜15だけです。Bochsの実装にも書かれています:// clear only 16 registers even if AVX-512 is present
道化師

1
@ジェスター、AMDのマニュアルは同じことを言っています。おそらくAVX512をサポートするプロセッサーに関連しているため、パフォーマンス上の理由からレジスタの上半分をゼロにする必要はありません。その後、broadwell vzeroupperは不要になりました(すべてのAVX512プロセッサを含みます)。これらのプロセッサでこれらの命令を使用する必要がなくなったため、vzeroallとvzeroupperの動作を変更しないことを決定したと私は想定しています。
マイケルペッチ

1
@MichaelPetch:Skylakeではまだvzeroupperが必要な場合があります。それを使用しないと、SSE命令が遅くなる可能性があります(誤った依存関係):SkylakeにVZEROUPPERがないと、このSSEコードは6倍遅くなるのはなぜですか?。しかし、ymm / zmm16..31をダーティ化しても、レガシーSSEでアクセスできないため、その問題は発生しません。(そして、どうやらIce Lakeが再導入された、保存された上位の状態遷移には参加しないと思います)。また、SKXにはダーティzmmに対するターボ効果があります。不正なAVX-512命令が実行されている場所を動的に決定する
Peter Cordes

2
いくつかの点で、vzeroupper新しいCPUで使用しないことの影響は、uopsのマージと暗黙的な拡張(Peterがリンクしたコメントで暗示されていること)の影響により、はるかに悪化する可能性があります。
BeeOnRope

1
「高」16〜31レジスタと「低」0〜15レジスタの違いは次のように見えます。ダーティは低レジスタでのみ発生します。CPUをダーティにしないのは、上位レジスタを書き込むだけの場合は発生しません。 。ただし、ダーティ状態になると、上位レジスタを含むすべてのレジスタが影響を受けます。これは私の元の理論とは少し矛盾しています。私の元の理論では、暗黙の拡張はマージ効果ではない(ただ?)と考えられていました。これは、マージを行わないVEXエンコードAVX命令で発生したためです。
BeeOnRope

回答:


6

説明の問題だったようです。最新のSDMを見ると、説明が最近変更されており、VZEROALLがYMM16 ... YMM31を変更していないことがわかります。

Intel最新SDM(2019年10月)


ありがとう!私はSDMコピーを確認しましたが、通常はかなり最新の状態に保っていますが、この場合は十分に最新ではありません。
BeeOnRope

1
私は少しググって、あなたのQに感謝していると思います。LLVMのバグで、YMM16 ..、YMM31を含むすべてのYMMレジスタをゼロ化するためにVZEROALLを実装しています。lists.llvm.org/ pipermail /
マット。ストロー

1
@ Matt.Stroh:その間違った変更は、一度も行われなかったか、元に戻されました。現在のclang9.0はymm16__m256around _mm256_zeroall()godbolt.org/z/HK7_Xyを保存するために使用します。これは、zeroallがymm16に触れないことがわかっている場合にのみ意味があります。clang3.9.1はメモリに流出するため、そのバージョンに含まれていたか、効率的に最適化されていない可能性があります。うーん、clang(3.9および現在)は、a __m128がxmm0に残っていることを認識していません_mm256_zeroupper()godbolt.org/z/DwMyMV
Peter Cordes
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.