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

Factorize SIMD code #222

Closed
slaperche-scality opened this issue Jul 27, 2018 · 1 comment
Closed

Factorize SIMD code #222

slaperche-scality opened this issue Jul 27, 2018 · 1 comment
Assignees

Comments

@slaperche-scality
Copy link
Contributor

There is way too much code duplication/copy paste between all the SIMD implementation (simd_{128,256}_u{16,32}.h).

We must refactor this before adding more SIMD-feature, it's already barely maintainable…

slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 12, 2018
By using `_mm_set_epi16` we can set the value using a single instruction
instead of three.
With this change, we can get rid of the MMX instructions
`_mm_setzero_si64` and `_mm_set_pi16`.

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 12, 2018
First, add some useful instruction set-specific definitions.

Two types:
- RegisterType: underlying representation of the future Register class.
- MaskType: same as RegisterType, but for the Mask class.

Three useful constants:
- INSTRUCTION_SET: useful for discrimination.
- ALIGNMENT: useful for memory allocation.
- REG_BITSZ: useful for iteration.

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 12, 2018
This first test is pretty dumb, but it will be useful to bootstrap and
setup the CircleCI pipeline.

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 12, 2018
That way, we are sure that every codepath is covered and we won't
silently break one of them.

Refs: scality#222, scality#251
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 12, 2018
That way, we are sure that every codepath is covered and we won't
silently break one of them.

Refs: scality#222, scality#251
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 12, 2018
That way, we are sure that every codepath is covered and we won't
silently break one of them.

Refs: scality#222, scality#251
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 12, 2018
First, add some useful instruction set-specific definitions.

Two types:
- RegisterType: underlying representation of the future Register class.
- MaskType: same as RegisterType, but for the Mask class.

Three useful constants:
- INSTRUCTION_SET: useful for discrimination.
- ALIGNMENT: useful for memory allocation.
- REG_BITSZ: useful for iteration.

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 12, 2018
This first test is pretty dumb, but it will be useful to bootstrap and
setup the CircleCI pipeline.

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 12, 2018
That way, we are sure that every codepath is covered and we won't
silently break one of them.

Refs: scality#222, scality#251
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 12, 2018
That way, we are sure that every codepath is covered and we won't
silently break one of them.

Refs: scality#222, scality#251
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 15, 2018
First, add some useful instruction set-specific definitions.

Two types:
- RegisterType: underlying representation of the future Register class.
- MaskType: same as RegisterType, but for the Mask class.

Three useful constants:
- INSTRUCTION_SET: useful for discrimination.
- ALIGNMENT: useful for memory allocation.
- REG_BITSZ: useful for iteration.

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 15, 2018
This first test is pretty dumb, but it will be useful to bootstrap and
setup the CircleCI pipeline.

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 15, 2018
That way, we are sure that every codepath is covered and we won't
silently break one of them.

Refs: scality#222, scality#251
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 15, 2018
With this allocator  we can use the STL container, such as std::vector,
and be sure that we can use aligned load instruction when necessary.

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 15, 2018
First, add some useful instruction set-specific definitions.

Two types:
- RegisterType: underlying representation of the future Register class.
- MaskType: same as RegisterType, but for the Mask class.

Three useful constants:
- INSTRUCTION_SET: useful for discrimination.
- ALIGNMENT: useful for memory allocation.
- REG_BITSZ: useful for iteration.

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 15, 2018
This first test is pretty dumb, but it will be useful to bootstrap and
setup the CircleCI pipeline.

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 15, 2018
Now, we are sure that every codepath is covered and we won't silently
break one of them.

Refs: scality#222, scality#251
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 15, 2018
With this allocator we can use the STL container, such as std::vector,
and be sure that we can use aligned load instruction when necessary.

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 15, 2018
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 15, 2018
The new implementation is more C++-like (can be used with STL container)
and more robust (overflow handling, strict aliasing rule, …).

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 16, 2018
Now, we are sure that every codepath is covered and we won't silently
break one of them.

Refs: scality#222, scality#251
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 16, 2018
With this allocator we can use the STL container, such as std::vector,
and be sure that we can use aligned load instruction when necessary.

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 16, 2018
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 16, 2018
The new implementation is more C++-like (can be used with STL container)
and more robust (overflow handling, strict aliasing rule, …).

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 16, 2018
Now, we are sure that every codepath is covered and we won't silently
break one of them.

Refs: scality#222, scality#251
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 16, 2018
With this allocator we can use the STL container, such as std::vector,
and be sure that we can use aligned load instruction when necessary.

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 16, 2018
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 16, 2018
The new implementation is more C++-like (can be used with STL container)
and more robust (overflow handling, strict aliasing rule, …).

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 17, 2018
With this allocator we can use the STL container, such as std::vector,
and be sure that we can use aligned load instruction when necessary.

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 17, 2018
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 17, 2018
The new implementation is more C++-like (can be used with STL container)
and more robust (overflow handling, strict aliasing rule, …).

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 17, 2018
With this allocator we can use the STL container, such as std::vector,
and be sure that we can use aligned load instruction when necessary.

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 17, 2018
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 17, 2018
The new implementation is more C++-like (can be used with STL container)
and more robust (overflow handling, strict aliasing rule, …).

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 17, 2018
With this allocator we can use the STL container, such as std::vector,
and be sure that we can use aligned load instruction when necessary.

Refs: scality#222
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 17, 2018
slaperche-scality added a commit to slaperche-scality/quadiron that referenced this issue Oct 17, 2018
The new implementation is more C++-like (can be used with STL container)
and more robust (overflow handling, strict aliasing rule, …).

Refs: scality#222
@lamphamsy
Copy link
Contributor

It's fixed by #253 #254

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants