Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tests/thirdparty: segmentio/asm broken under avx-512 #229

Closed
mmcloughlin opened this issue Nov 11, 2021 · 2 comments · Fixed by #232
Closed

tests/thirdparty: segmentio/asm broken under avx-512 #229

mmcloughlin opened this issue Nov 11, 2021 · 2 comments · Fixed by #232
Labels
testing Tests and supporting infrastructure

Comments

@mmcloughlin
Copy link
Owner

The segmentio/asm third-party test is broken under the current AVX-512 work #217 #20. For the reasoning see #20 (comment).

I will disable the test on the branch for now, and this serves as a reminder to make the fix and re-enable once the work is landed.

cc @kalamay

@mmcloughlin mmcloughlin added the testing Tests and supporting infrastructure label Nov 11, 2021
mmcloughlin added a commit that referenced this issue Nov 11, 2021
@kalamay
Copy link
Contributor

kalamay commented Nov 11, 2021

Hi @mmcloughlin I've just created a branch pulling in this version of Avo here: segmentio/asm#59

There's a little bit of a chicken-or-egg situation as far as released versions go, but we should be fine pulling in this x-avx512 branch for now and updating once it's merged.

@mmcloughlin
Copy link
Owner Author

Thanks! Yeah I added a skip option in the third-party tests #228 so I was able to disable your test on the branch. Once it lands we can land your branch on your end.

mmcloughlin added a commit that referenced this issue Nov 13, 2021
all: AVX-512

Extends avo to support most AVX-512 instruction sets.

The instruction type is extended to support suffixes. The K family of opmask
registers is added to the register package, and the operand package is updated
to support the new operand types. Move instruction deduction in `Load` and
`Store` is extended to support KMOV* and VMOV* forms.

Internal code generation packages were overhauled. Instruction database loading
required various messy changes to account for the additional complexities of the
AVX-512 instruction sets. The internal/api package was added to introduce a
separation between instruction forms in the database, and the functions avo
provides to create them. This was required since with instruction suffixes there
is no longer a one-to-one mapping between instruction constructors and opcodes.

AVX-512 bloated generated source code size substantially, initially increasing
compilation and CI test times to an unacceptable level. Two changes were made to
address this:

1.	Instruction constructors in the `x86` package moved to an optab-based
	approach. This compiles substantially faster than the verbose code
	generation we had before.

2.	The most verbose code-generated tests are moved under build tags and limited
	to a stress test mode. Stress test builds are run on schedule but not in
	regular CI.

An example of AVX-512 accelerated 16-lane MD5 is provided to demonstrate and
test the new functionality.

Updates #20 #163 #229

Co-authored-by: Vaughn Iverson <[email protected]>
mmcloughlin added a commit that referenced this issue Nov 13, 2021
Extends avo to support most AVX-512 instruction sets.

The instruction type is extended to support suffixes. The K family of opmask
registers is added to the register package, and the operand package is updated
to support the new operand types. Move instruction deduction in `Load` and
`Store` is extended to support KMOV* and VMOV* forms.

Internal code generation packages were overhauled. Instruction database loading
required various messy changes to account for the additional complexities of the
AVX-512 instruction sets. The internal/api package was added to introduce a
separation between instruction forms in the database, and the functions avo
provides to create them. This was required since with instruction suffixes there
is no longer a one-to-one mapping between instruction constructors and opcodes.

AVX-512 bloated generated source code size substantially, initially increasing
compilation and CI test times to an unacceptable level. Two changes were made to
address this:

1.	Instruction constructors in the `x86` package moved to an optab-based
	approach. This compiles substantially faster than the verbose code
	generation we had before.

2.	The most verbose code-generated tests are moved under build tags and limited
	to a stress test mode. Stress test builds are run on schedule but not in
	regular CI.

An example of AVX-512 accelerated 16-lane MD5 is provided to demonstrate and
test the new functionality.

Updates #20 #163 #229

Co-authored-by: Vaughn Iverson <[email protected]>
mmcloughlin added a commit that referenced this issue Nov 13, 2021
Extends avo to support most AVX-512 instruction sets.

The instruction type is extended to support suffixes. The K family of opmask
registers is added to the register package, and the operand package is updated
to support the new operand types. Move instruction deduction in `Load` and
`Store` is extended to support KMOV* and VMOV* forms.

Internal code generation packages were overhauled. Instruction database loading
required various messy changes to account for the additional complexities of the
AVX-512 instruction sets. The internal/api package was added to introduce a
separation between instruction forms in the database, and the functions avo
provides to create them. This was required since with instruction suffixes there
is no longer a one-to-one mapping between instruction constructors and opcodes.

AVX-512 bloated generated source code size substantially, initially increasing
compilation and CI test times to an unacceptable level. Two changes were made to
address this:

1.  Instruction constructors in the `x86` package moved to an optab-based
    approach. This compiles substantially faster than the verbose code
    generation we had before.

2.  The most verbose code-generated tests are moved under build tags and
    limited to a stress test mode. Stress test builds are run on
    schedule but not in regular CI.

An example of AVX-512 accelerated 16-lane MD5 is provided to demonstrate and
test the new functionality.

Updates #20 #163 #229

Co-authored-by: Vaughn Iverson <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
testing Tests and supporting infrastructure
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants