- Indico style
- Indico style - inline minutes
- Indico style - numbered
- Indico style - numbered + minutes
- Indico Weeks View
Réunion TAcq/SOPHYA du jeudi 22 juillet 2021
OdJ: le point sur le passage de SOPHYA à un standard récent de c++ ( >= c++11) pour permettre le développement du corrélateur logiciel optimisé dans TAcq.
• Discussion sur le passage de SOPHYA en standard c++11
Test de compilation en cours sur MacOS - parmi les petits problèmes rencontré, la confusion entre la fonction bind() de la librairie standard (en lien avec les sockets et primitives réseau) et la fonction std::bind() qui permet l'application partielle de fonction avec certains arguments fixés. Autre problème, différence sur la définition de ptr_diff. En effet, parmi les modifications introduites, il y a la définition des types d'entier et de float utilisés par sophya (int_4, int_8 ...) à travers les types c++ définies dans stdint.h : int_16_t , int_32_t , int_64_t ... (définitions de sophya en octets, et celles du c++ en bits) - Le type utilisé pour les index de tableaux dans sophya (sa_size_t ) a été défini comme ptrdiff_t, mais cela pose problème, étant donné ptrdiff_t est défini comme long int ou long long int selon les plateformes/compilos. On décide de revenir à la définition de sa_size_t comme int_8 ou int_4.
Pour les essais de compilation de la branche stdint de sophya, avec les flags de compilations pour >= c++11, destinée à devenir la branche standard :
• Système de build et de test automatique de SOPHYA sur la plateforme gitlab
Hadrien a mis en place le système de build et de test automatique de SOPHYA , sur une branche privée pour le moment. Ce test automatique prend en charge tout le build, y compris ProjectPI en 2 versions, X11 et wxWidget. Il lance aussi les programmes de test (au moins ceux qui renvoient un code de retour) et exécute les exemples (runcxx). Hadrien fait une demo du système et décrit les principales étapes - On part en effet de l'instanciation d'une machine virtuelle Linux, sur laquelle Hadrien installe le compilo, puis les librairies externs, puis sophya... Excellent travail, très impressionnant !
Hadrien précise qu'il n'est pas actuellement possible de déployer le système de build automatique sur gitlab dans un environnement Mac OS (sans doute pour des raisons de licence Darwin
Changer le statut de Hadrien en maintainer , SOPHYA et TAcq -> FAIT
• Corrélateur et TAcq
Hadrien ne prévoit pas de problème particulier pour le développement de son code optimisé de calcul de calcul des corrélations et son intégration dans la structure de TAcq avec les threads (tâches) de traitement et le système de partage de mémoire entre ces tâches. Par contre il envisage d'utiliser le standard c++17 pour le code de TAcq qui comprend plusieurs fonctionalités utiles, parmi lesquelles aligned_alloc (allocateur avec spécification d'alignement mémoire, et qui est disponible depuis c version 2011. aligned_alloc permet par exemple d'allouer des std::vector correctement alignés.
TAcq ne compilera donc qu'avec c++17 . Il faudra être attentif à l'alignement des données des paquets BRPaquet, et surtout, les les paquets après FFT qui seront manipulés par le code du corrélateur.
Question de Christophe (cmv) sur la disponibilité de compilo c++17 sur les machines de Nançay. Hadrien précise que CentOS 8 a un compilo suffisamment récent, mais la durée de vie courte de CentOS8 limite son usage dans le temps. CentOS 7 bénéficie d'un support de plus longue durée, mais mais il faut installer un compilo plus récent
• PI/piapp
Réza donne brièvement quelques nouvelles du développement de PI/piapp, la version avec wxWidget. Guy approuve la décision de maintenir une version de PI avec X11/Motif. Plus de détails lors d'une prochaine réunion.
Notes concernant des tests et essais faits après la réunion
• Compilation et test de la branche git stdint sophya
Hadrien a modifié la définition de sa_size_t sur la branche stdint et Réza a vérifié la compilation et l'exécution de tous les programmes de tests listés dans la documentation sophya. Il s'agit au total de plus de 20 programmes de tests, et plus de 70 cas de tests avec le jeu des options et arguments. Hadrien propose de compléter si possible les quelques programmes qui ne renvoie pas de code retour (exemples; spar, tluc ...) afin d'étendre l'étendue de couverture des tests automatiques.
• Erreurs lors de l'exécution des tests
Il y a effectivement deux programmes de test, plus exactement 2 cas qui renvoient un code d'erreur, comme Hadrien l'avait signalé. J'ai (Reza) détecté un troisième cas avec le programme tfitsdt - voir ci-dessous. Note: ces problèmes n'ont rien à voir avec la compilation c++11.
Action : correction de le fichier fitshtable.cc - tests d'inégalité stricte transformé en <=16 , <=64 pour la création de champs de type S16 S64 lors de la lecture de BINTABLE fits . commit fait dans gitlab
• Les typedefs stdint.h et ptrdiff_t
Hadrien avait proposé de vérifier la définition des types c++ int32_t int64_t , std::ptrdiff_t, comme indiqué ici https://stackoverflow.com/questions/4160945/long-long-int-vs-long-int-vs-int64-t-in-c
Reza a complété le petit programme qui est recopié ci-dessous.
Les résultats d'exécution sur MacOS 10.14 , compilo Apple clang version 11.0.0 (clang-1100.0.33.17) :
---- Checking if is_int64<T> ...
int: 0 -sizeof=4
int64_t: 1 -sizeof=8
long int: 0 -sizeof=8
long long int: 1 -sizeof=8
std::ptrdiff_t 0 -sizeof=8
---- Checking if is_longint<T> ...
int32_t: 0 -sizeof=4
int64_t: 0 -sizeof=8
long int: 1 -sizeof=8
long long int: 0 -sizeof=8
std::ptrdiff_t 1 -sizeof=8
et sur Linux (machine deco) , g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
---- Checking if is_int64<T> ...
int: 0 -sizeof=4
int64_t: 1 -sizeof=8
long int: 1 -sizeof=8
long long int: 0 -sizeof=8
std::ptrdiff_t 1 -sizeof=8
---- Checking if is_longint<T> ...
int32_t: 0 -sizeof=4
int64_t: 1 -sizeof=8
long int: 1 -sizeof=8
long long int: 0 -sizeof=8
std::ptrdiff_t 1 -sizeof=8
Source du programme de vérification des typedefs de stdint.h de c++
sh> g++ -std=c++11 -o tst_type tst_type.cc
#include <iostream>
#include <cstdint>
template <typename T>
bool is_int64() { return false; }
template <>
bool is_int64<int64_t>() { return true; }
template <typename T>
bool is_longint() { return false; }
template <>
bool is_longint<long int>() { return true; }
int main()
{
std::cout << "---- Checking if is_int64<T> ... " << std::endl;
std::cout << "int: \t" << is_int64<int>() << " -sizeof="<<sizeof(int) << std::endl;
std::cout << "int64_t:\t" << is_int64<int64_t>() << " -sizeof="<<sizeof(int64_t) << std::endl;
std::cout << "long int:\t" << is_int64<long int>() << " -sizeof="<<sizeof(long int) << std::endl;
std::cout << "long long int:\t" << is_int64<long long int>() << " -sizeof="<<sizeof(long long int) << std::endl;
std::cout << "std::ptrdiff_t \t" << is_int64<std::ptrdiff_t >() << " -sizeof="<<sizeof(std::ptrdiff_t ) << std::endl;
std::cout << "---- Checking if is_longint<T> ... " << std::endl;
std::cout << "int32_t:\t" << is_longint<int32_t>() << " -sizeof="<<sizeof(int32_t) << std::endl;
std::cout << "int64_t:\t" << is_longint<int64_t>() << " -sizeof="<<sizeof(int64_t) << std::endl;
std::cout << "long int:\t" << is_longint<long int>() << " -sizeof="<<sizeof(long int) << std::endl;
std::cout << "long long int:\t" << is_longint<long long int>() << " -sizeof="<<sizeof(long long int) << std::endl;
std::cout << "std::ptrdiff_t \t" << is_longint<std::ptrdiff_t >() << " -sizeof="<<sizeof(std::ptrdiff_t ) << std::endl;
return 0;
}