Articles of performance

Optimisation de l’access linéaire aux tableaux avec prélecture et cache en C

divulgation: J’ai essayé une question similaire sur programmers.stack, mais cet endroit est loin d’être stack d’activité est. Intro J’ai tendance à travailler avec beaucoup d’images volumineuses. Ils se présentent également en plusieurs séquences et doivent être traités et lus à plusieurs resockets. Parfois, j’utilise un processeur graphique, parfois le processeur, parfois les deux. La plupart […]

Pourquoi la latence d’écriture TCP est-elle pire lorsque le travail est entrelacé?

Je profilais la latence TCP (en particulier l’ write de l’espace utilisateur vers l’espace kernel d’un petit message) afin d’obtenir une certaine intuition pour la latence d’une write (en reconnaissant que cela peut être spécifique au contexte). J’ai remarqué des incohérences substantielles entre les tests qui me semblent similaires, et je suis très curieux de […]

Deux fonctions très similaires impliquant sin () présentent des performances très différentes – pourquoi?

Considérez les deux programmes suivants qui effectuent les mêmes calculs de deux manières différentes: // v1.c #include #include int main(void) { int i, j; int nbr_values = 8192; int n_iter = 100000; float x; for (j = 0; j < nbr_values; j++) { x = 1; for (i = 0; i < n_iter; i++) x […]

Quelle boucle a de meilleures performances? Incrémenter ou décrémenter?

Dupliquer possible: Le décompte est-il plus rapide que le décompte? quelle boucle a de meilleures performances? J’ai appris de certains où cette seconde est meilleure. Mais je veux savoir pourquoi. for(int i=0;i=0;i–) { /*This is better ?*/ }

R: Avantages de l’utilisation d’un sous-programme Fortran avec les wrappers .Call et C / C ++ au lieu de .Fortran?

J’ai un paquet R qui utilise beaucoup de sous-routines Fortran pour les boucles nestedes de calculs algébriques linéaires récursifs (dépendant fortement des routines BLAS et LAPACK). En tant .Fortran avec Fortran, .Fortran fonction .Fortran . Je viens de lire le billet de blog de Jonathan Callahan sur l’utilisation de .Call au lieu de .C dans […]

Battre ou rencontrer memset sous OS X (et memset_pattern4)

Ma question est basée sur une autre question SO: Pourquoi _mm_stream_ps génère-t-il des erreurs de cache L1 / LL? Après l’avoir lue et insortingguée par celle-ci, j’ai essayé de reproduire les résultats et de voir par moi-même ce qui était le plus rapide: boucle naïve, boucle naïve déroulée, _mm_stream_ps (déroulée), _mm_store_ps (déroulée) et enfin et […]

Le moyen le plus rapide de vérifier les données de masse si nul en C?

J’ai une masse de données, peut-être 4Mo. Maintenant, voulez vérifier si tous les bits qu’il contient sont 0. Ex: Voici les données: void* data = malloc(4*1024*1024); memset(data, 0, 4*1024*1024); Vérifiez si tous les bits qu’il contient sont 0. Voici ma solution qui n’est pas assez rapide: int dataisnull(char* data, int length) { int i = […]

Pourquoi _mm_stream_ps génère-t-il des erreurs de cache L1 / LL?

J’essaie d’optimiser un algorithme exigeant beaucoup de calculs et suis bloqué par un problème de cache. J’ai un énorme tampon qui est écrit de temps en temps et au hasard et ne lit qu’une fois à la fin de l’application. De toute évidence, l’écriture dans la mémoire tampon produit de nombreuses erreurs de cache et […]

Contournement du kernel pour UDP et TCP sous Linux – en quoi consiste-t-il?

Selon http://www.solacesystems.com/blog/kernel-bypass-revving-up-linux-networking : […] un pilote réseau appelé OpenOnload qui utilise des techniques de «contournement du kernel» pour exécuter simultanément l’application et le pilote réseau dans l’espace utilisateur et, ainsi, contourner le kernel. Cela permet au côté application de la connexion de traiter beaucoup plus de messages par seconde avec une latence plus faible et […]

Pourquoi Python est-il plus rapide que C lors de la concaténation de deux chaînes?

Actuellement, je veux comparer la vitesse de Python et de C lorsqu’ils sont habitués à faire des trucs de chaîne. Je pense que C devrait donner de meilleures performances que Python; Cependant, j’ai eu un résultat totalement opposé. Voici le programme C: #include #include #define L (100*1024) char s[L+1024]; char c[2*L+1024]; double time_diff( struct timeval […]