README.md 2,16 ko
Newer Older
# Bibliothèque Rust pour architecture avancée

bibliothèque de fonctions utilitaires pour la programmation RUST en Licence 3 Informatique : architecture avancée
amantonl's avatar
amantonl a validé
- Compatibilité: Rust 1.90.0+, OS [macOS/Linux/Windows], arch [x86_64/aarch64]


## Installation

Ajoutez ceci dans votre `Cargo.toml` :

Laurent Amanton's avatar
Laurent Amanton a validé
```toml
amantonl's avatar
amantonl a validé
<<<<<<< HEAD
Laurent Amanton's avatar
Laurent Amanton a validé
archi_avancee = { git = "https://www-apps.univ-lehavre.fr/forge/amantonl/archi_avancee.git" }
Laurent Amanton's avatar
Laurent Amanton a validé
```
amantonl's avatar
amantonl a validé
=======
ma_biblio_rust = { git = "hhttps://www-apps.univ-lehavre.fr/forge/amantonl/archi_avancee.git" }
\`\`\`
>>>>>>> c7505c6 (maj mod duree et mod simd)
Laurent Amanton's avatar
Laurent Amanton a validé
```rust
amantonl's avatar
amantonl a validé
use archi_avancee::duree::*;
use archi_avancee::simd::*;
Laurent Amanton's avatar
Laurent Amanton a validé
```
amantonl's avatar
amantonl a validé

### Fonctionnalités principales

- Mesure de durée d’exécution d’une procédure
- Mesure de durée et récupération du résultat d’une fonction
- Lecture du compteur de cycles CPU (RDTSC/équivalent) selon l’architecture
- Comptage de cycles consommés par un bloc
- Détection des extensions SIMD x86 (SSE/AVX)

### Utilisation rapide

- Mesurer la durée d’un bloc:
```rust
use votre_crate::duree::duree_procedure;

let d = duree_procedure(|| {
    // code à mesurer
});
println!("Durée: {:?}", d);
```


- Mesurer durée + résultat:
```rust
use votre_crate::duree::duree_fonction;

let (res, d) = duree_fonction(|| 2 + 2);
println!("Résultat: {res}, Durée: {d:?}");
```


- Nombre de cycles CPU consommés:
```rust
use votre_crate::duree::nombre_cycles;

let cycles = nombre_cycles(|| {
    // code à profiler finement
});
println!("Cycles: {cycles}");
```


- Détection SIMD (x86/x86_64 uniquement):
```rust
use votre_crate::simd::test_sse_avx;

test_sse_avx(); // Affiche les features disponibles
```


### Plateformes et garde-fous

- x86/x86_64: support RDTSC et détection SSE/AVX.
- aarch64: lecture du compteur système (cntvct_el0).
- Autres architectures: panique sur la fonction RDTSC; documentez-le pour éviter l’appel sur plateformes non supportées. En cas de besoin, encapsulez derrière #[cfg] ou un feature flag.

Exemple de protection:
```rust
#[cfg(any(target_arch = "x86", target_arch = "x86_64", target_arch = "aarch64"))]
{ /* appel sûr */ }
```