argmax for tensors with custom type index and AVX2 optimization (mex)
This MEX function provides the argmax functionality in Matlab for the purpose of avoiding the syntax of the max function from Matlab
[~,Y] = max(X,[],dim)
In addition it allows to return the indices in a user specified type (e.g. int32) and not just the default double.
Speed: when using -march=native in machines with AVX2 it allows interesting speedups in comparison to Matlab (except for double). Using AXV2 256bit registers it is possible to compute the maximum in parallel over elements of 2,4,16 or even 32 for types respectively double,float/int32,int16 and int32. The interesting part is the propagation of the indices because a AVX2 max is trivial. For using this feature it is necessary to pass -march=native to mex (e.g. modifying the XML configuration).
Added comparison of the results using the indices: result from Matlab and this could could differ in indices if the matrix contains duplicate values.
Usage:
Y = argmax(X, dim, int16(0)); % returns indices as int16
TODOs:
- min
- min and max in one pass
- check on dimension and specified type
- remake in C using Python for code generation
Cita come
Emanuele Ruffaldi (2024). argmax for tensors with custom type index and AVX2 optimization (mex) (https://github.com/eruffaldi/mat_argmax_nd), GitHub. Recuperato .
Compatibilità della release di MATLAB
Compatibilità della piattaforma
Windows macOS LinuxCategorie
Tag
Riconoscimenti
Ispirato da: ARGMAX/ARGMIN
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!Scopri Live Editor
Crea script con codice, output e testo formattato in un unico documento eseguibile.
Le versioni che utilizzano il ramo predefinito di GitHub non possono essere scaricate
Versione | Pubblicato | Note della release | |
---|---|---|---|
1.2.0.0 | AVX2 optimization: float, double, int32, int16 and int8
|
|
|
1.0.0.0 | Better title |
|