README.md 2.9 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96

# Tutoriel sur Xtensor

## Recette d'exécution du comparatif GSoC, via docker

Ici, le code soumis par les différents candidats a été modifié le moins possible.

Pour se placer dans le conteneur docker, et compiler le banc d'essai :

```shell
> docker/run.sh
>> cd gsoc
>> make bench.exe
```

Pour inverser 1000 fois un tableau aléatoire de
100 matrices :

```shell
>> ./bench.exe 1000 1000
```

## Recette d'exécution du banc d'essai, via docker

Ici, les codes soumis par les différents candidats ont été modifiés
pour travailler aussi bien en float qu'en double, aussi bien en
xt::xarray qu'en xt::xtensor. Et nous avons ajouté une implémentation
à base de xtensor-blas.

Pour se placer dans le conteneur docker, et compiler le banc d'essai :


```shell
> docker/run.sh
>> cd bench
>> make bench.exe
```

Pour inverser 1000 fois un xarray aléatoire de 100 matrices en float :

```shell
>> ./bench.exe 0 1000 1000
```

Pour inverser 1000 fois un xarray aléatoire de 100 matrices en double :

```shell
>> ./bench.exe 1 1000 1000
```

Pour inverser 1000 fois un xtensor aléatoire de 100 matrices en float :

```shell
>> ./bench.exe 2 1000 1000
```

Pour inverser 1000 fois un xtensor aléatoire de 100 matrices en double :

```shell
>> ./bench.exe 3 1000 1000
```

## A propos du répertoires /tests

Ce répertoire contient des tests de très bas niveau pour essayer
xtensor, et pour mettre en évidence certains des bugs rencontrés.


## A propos du portage des codes de xt::xarray à xt::xtensor

Cela s'est avéré particulièrement compliqué pour le code d'Ibrahim :
* on ne connait pas le nombre de dimensions des différents xarray,
  ce qui m'a obligé à des impressions de shape pour savoir le
  nombre de dimensions des xt::xtensor.
* Plus de possibilités de faire des reshape()
* Probleme de preparation des shapes pour faire les eyes
  (il semble impossible de donner n'importe quel type "shape"
   au constructeur de eye).
* J'ai souvent oublié la "lazy evaluation" et essayer d'imprimer une
  expression on encore évaluée. En cas d'erreur de compilation
  du type "could not convert 'index' from ...", un appel
  à xt::eval est souvent la solution.
* Les messages d'erreur de compil des templates sont toujours aussi
  indigestes.
* Trois bugs de xtensor ont été levés à cette occasion.


## A propos du portage des codes de xt::xtensor à xt::xtensorf

1. Maintenant que la taille des MatricesSet est fixe, il faut un nouveau paramètre pour dire quel sous-ensemble
   d'une MatricesSet on veut traiter, notamment pour invert_pair().
2. A chaque fois qu'une implémentation utilise des matrices de taille spéciale, il y a problème.
   Pour commencer, Ayoub construit une matrice double pour ajouter une matrice Identité.
   En fait, il faut traquer tous les usages de shape()...
3. Utile : la redéfinition en intene des types, et l'utilisation des noms redéfinis,
   facilite l'écriture des versions spécialisées.