Comments (5)
For most cases, compiler hints should be enough to generate close-to-optimal code utilizing SIMD. Say, nmod_vec_add
or something. The important part is here that one compiles FLINT with the correct compiler flags to generate this.
For these "trivial" cases, it is my belief that we do not want to generate code that resembles some other architecture. For instance, say you want to utilize some AVX512 instruction for systems that has AVX512 instructions, but the system you only have register width of 128 bits (such as ARM NEON), you effectively unroll every instruction four times, which I think is something that we would like to avoid.
For cases where an algorithm's speed is highly dependent on the use of specific instruction sets/throughput/latency/number of ports in a CPU/whatever, I don't think this is very useful.
Moreover, I believe it would just reduce the readability of the code, and it may also introduce unwanted unrollings of loops on some architectures.
from flint.
Thanks for the explanation!
I will close the issue, given that you are the one writing most of the lower-level code.
from flint.
I wouldn't rule out any abstraction layers, but I would consider writing our own in that case so that we know exactly what is going on under the hood. However, thanks for bringing this to my attention, didn't know this existed.
from flint.
machine_vectors.h
is a decent start, no?
from flint.
Indeed.
from flint.
Related Issues (20)
- Implement `mpn_gcdinv` with precomputed powers of two modular inverses HOT 2
- `n_revbin` is used though some architectures has reverse binary instructions
- Bug in `fq_nmod_mpoly_factor` triggered by large test multiplier HOT 2
- arb_hypgeom_beta_lower gives weird results HOT 1
- `(_)arb_mat_entrywise_(not_)is_zero` doesn't make sense
- Apply `__attribute__((const))` where applicable HOT 5
- Global field accessor macros for matrices and polynomials
- More `is_canonical` functions for tests HOT 2
- Override gr_mat_eigenvalues HOT 1
- Could we release 3.1.3-p1? HOT 1
- fmpz_mpoly_pfrac_init: internal error HOT 7
- Worklist for nfloat HOT 3
- Problems with Riemann theta functions HOT 41
- 3.1.3 isn't in the Downlioads section of the website: https://flintlib.org/downloads.html HOT 2
- Document need for libtool
- Improve parallel Schönhage-Strassen multiplication
- file padic_types.h not getting installed HOT 2
- Test failures when compiled with GCC graphite flags HOT 5
- #error machine_vector.h not implemented on AMD Ryzen 7 without forcing --enable-avx HOT 14
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from flint.