JuliaMath / JuliaMath/IntelVectorMath.jl

Scalar Calculation?

Aperta
#44 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Enhancement
Lingua principale
Julia
Stelle
75
Fork
17
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

Now the library only supports doing a calculation on an `Array` and also returns an `Array`.

It may be worth while to define scalar methods too.
```julia
julia> IVM.sin(1.1)
ERROR: MethodError: no method matching sin(::Float64)
You may have intended to import Base.sin
Closest candidates are:
sin(::Array{Float32,N} where N) at C:\Users\yahyaaba\.julia\packages\IntelVectorMath\Gb348\src\setup.jl:72
sin(::Array{Float64,N} where N) at C:\Users\yahyaaba\.julia\packages\IntelVectorMath\Gb348\src\setup.jl:72
Stacktrace:
[1] top-level scope at none:0
```

This way we only use Intel for calculating one scalar number, which (if possible) helps to fuse for-loops with broadcasted functions and use `@avx` or `@simd` features of Julia instead for parallelization.

We should see if Intel provides scalar API. Because if it only provides Vector API, and the function call uses the Vector Processor Unit of the CPU, we cannot parallelize the function. This is like vectorizing an already vectorized function (although having a size of 1), which doesn't have an effect.

Related to https://github.com/JuliaMath/IntelVectorMath.jl/issues/43, which can help to implement the 3rd macro.

This can also solve https://github.com/JuliaMath/IntelVectorMath.jl/issues/22, by using Intel-only for a scalar call and provide an SVML like behavior using `@avx` or `@simd`.

Places to look into:
- https://software.intel.com/en-us/cpp-compiler-developer-guide-and-reference-intrinsics-for-short-vector-math-library-operations
- https://software.intel.com/sites/landingpage/IntrinsicsGuide/#
- http://openpowerfoundation.org/wp-content/uploads/resources/Vector-Intrinsics-4/content/sec_packed_vs_scalar_intrinsics.html
- https://stackoverflow.com/questions/37290544/is-there-an-intrinsic-instruction-for-resulti-ak-sinbk-ci-dk

Guida per i contributori

Nessuna guida per i contributori indicizzata per questo repository

Direzione di ricerca

Start by inspecting the scalar method definitions in src/setup.jl and the Intel scalar and vector intrinsic references linked in the issue. Determine whether scalar APIs are available, then assess how scalar methods should interact with @avx and @simd; done means scalar calls such as IVM.sin(1.1) work without disrupting array calculations.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
julia
Ambito
performance
Tipo di issue
Funzionalità
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.