Friday, February 17, 2017

Moyenne Mobile Exponentielle C

J'ai profiled cela en utilisant le profileur Visual C, et il représente environ 35 du temps de fonctionnement. Cette moyenne mobile exponentielle est appelée plus d'un billion de fois, car elle est utilisée à plusieurs reprises sur le traitement de plus de 400 gigaoctets de données. Les données proviennent d'une matrice RAID niveau 0 disque solide, donc la lecture des comptes de données pour moins de 5 du temps. La taille du prix est d'environ 100. J'ai initialement accéléré par un facteur de 4 en précalculant autant de données que possible. Puis j'ai été en mesure de l'augmenter encore par un facteur de ndash PaeneInsula Oct 30 11 at 20:41 J'ai été capable d'augmenter la vitesse de nouveau par un facteur de 12 en multithreading it (la nature des données est telle qu'il peut être multithreaded De sorte que la charge est parfaitement équilibrée.) Et je l'ai en cours d'exécution sur un i7 990x (qui a 6 cœurs, hyperthreaded d'un total de 12), overclocké. Ndash PaeneInsula Oct 30 11 at 20:51 Bien sûr, multithreading peut aider. Mais vous pouvez presque assurément améliorer les performances sur une seule machine filetée. Tout d'abord, vous le calculez dans la mauvaise direction. Seules les machines les plus modernes peuvent effectuer des prélèvements de pas négatifs. Presque tous les machihnes sont plus rapides pour les foulées de l'unité. C'est à dire. Changer la direction de la matrice de sorte que vous balayez de bas à haut plutôt que de haut en bas est presque toujours mieux. Ensuite, réécrire un peu - s'il vous plaît permettez-moi de raccourcir les noms des variables pour le rendre plus facile à taper: Par ailleurs, je vais commencer à utiliser des raccourcis p pour le prix et s pour le lissage, pour enregistrer la frappe. Je suis fainéant. Mais il est probablement plus rapide à faire La latence entre avgi et avgi-2 est alors 1 multiplier et un add, plutôt que d'une soustraction et une multiplication entre avgi et avgi-1. C'est à dire. Plus de deux fois plus vite. En général, vous souhaitez réécrire la récurrence de sorte que avgi est calculé en termes de avgj pour j aussi loin que vous pouvez éventuellement aller, sans remplir la machine, soit des unités d'exécution ou des registres. Vous faites essentiellement plus de multiplications dans l'ensemble, afin d'obtenir moins de chaînes de multiples (et soustrait) sur le chemin critique. Passer de avgi-2 à avgi est facile, vous pouvez probablement faire trois et quatre. Exactement jusqu'à quel point dépend de ce que votre machine est, et combien de registres que vous avez. Et la latence de l'additionneur à virgule flottante et du multiplicateur. Ou, mieux encore, la saveur de combiner l'instruction de multiplication-ajouter que vous avez - toutes les machines modernes les ont. Par exemple. Si le MADD ou MSUB est de 7 cycles de long, vous pouvez faire jusqu'à 6 autres calculs dans son ombre, même si vous avez seulement une unité à virgule flottante. Entièrement pipeline. Etc. Moins si pipelined tous les autres cycle, comme est commun pour la double précision sur les puces plus anciennes et les GPU. Le code d'assemblage doit être un logiciel pipeline afin que les itérations de boucles différentes se chevauchent. Un bon compilateur devrait faire cela pour vous, mais vous pourriez avoir à réécrire le code C pour obtenir les meilleures performances. Soit dit en passant: je ne veux pas suggérer que vous devriez créer un tableau d'avg. Au lieu de cela, vous auriez besoin de deux moyennes si avgi est calculé en termes de avgi-2, et ainsi de suite. Vous pouvez utiliser un tableau de avgi si vous voulez, mais je pense que vous avez seulement besoin d'avoir 2 ou 4 avgs, appelé créativement, avg0 et avg1 (2, 3.), et les faire pivoter. Ce type d'astuce, divisant un accumulateur ou moyenne en deux ou plus, combinant plusieurs étapes de la récurrence, est commun dans le code de haute performance. Oh, oui: precalculate ss, etc. Si je l'ai fait bien, en précision infinie cela serait identique. (Double vérifiez-moi, s'il vous plaît.) Toutefois, en précision finie FP vos résultats peuvent différer, j'espère que légèrement, en raison de différents arrondi. Si le déroulement est correct et les réponses sont significativement différentes, vous avez probablement un algorithme numériquement instable. Tu es celle que tu devrais savoir. Remarque: les erreurs d'arrondissement en virgule flottante modifient les bits bas de votre réponse. Les deux à cause de réarranger le code, et en utilisant MADD. Je pense que c'est probablement correct, mais vous devez décider. Note: les calculs pour avgi et avgi-1 sont maintenant indépendants. Ainsi, vous pouvez utiliser un jeu d'instructions SIMD, comme Intel SSE2, qui permet l'opération sur deux valeurs 64 bits dans un registre de 128 bits à la fois. Thatll être bon pour presque 2X, sur une machine qui a suffisamment de ALUs. Si vous avez assez de registres pour réécrire avgi en termes de avgi-4 (et je suis sûr que vous faites sur iA64), alors vous pouvez aller 4X de large, si vous avez accès à une machine comme 256 bit AVX. Sur un GPU. Vous pouvez aller pour les récidives plus profondes, réécriture avgi en termes de avgi-8, et ainsi de suite. Certains GPU ont des instructions qui calculent AXB ou même AXBY comme une seule instruction. Bien que thats plus commun pour 32 bits que pour 64 bits de précision. À un certain point, je commencerais probablement à demander: voulez-vous faire cela sur plusieurs prix à la fois Non seulement cela vous aider avec multithreading, il sera également le faire fonctionner sur un GPU. Et en utilisant SIMD large. Minor Late Addition Je suis un peu embarrassé de ne pas avoir appliqué Horners Rule à des expressions comme un peu plus efficace. Résultats légèrement différents avec arrondissement. Dans ma défense, tout compilateur décent devrait le faire pour vous. Mais la règle Hrners rend la chaîne de dépendance plus profonde en termes de multiplication. Vous pourriez avoir besoin de dérouler et pipeline la boucle quelques fois de plus. Ou vous pouvez faire où vous precalculateAjouter une tendance ou une ligne de moyenne mobile à un tableau S'applique à: Excel 2016 Word 2016 PowerPoint 2016 Excel 2013 Word 2013 Outlook 2013 PowerPoint 2013 Plus. Moins Pour afficher les tendances des données ou les moyennes mobiles dans un graphique que vous avez créé. Vous pouvez ajouter une ligne de tendance. Vous pouvez également étendre une ligne de tendance au-delà de vos données réelles pour vous aider à prédire les valeurs futures. Par exemple, la ligne de tendance linéaire suivante prévoit deux trimestres à venir et montre clairement une tendance à la hausse qui semble prometteuse pour les ventes futures. Vous pouvez ajouter une ligne de tendance à un graphique 2-D qui n'est pas empilé, y compris la zone, la barre, la colonne, la ligne, le stock, la dispersion et la bulle. Vous ne pouvez pas ajouter une ligne de tendance à un diagramme 3D, empilé, de radar, de tarte, de surface ou de beignet. Ajouter une ligne de tendance Sur votre graphique, cliquez sur la série de données à laquelle vous souhaitez ajouter une ligne de tendance ou une moyenne mobile. La ligne de tendance commencera sur le premier point de données de la série de données que vous choisissez. Cochez la case Trendline. Pour choisir un autre type de ligne de tendance, cliquez sur la flèche à côté de Trendline. Puis cliquez sur Exponentiel. Prévision linéaire. Ou moyenne mobile à deux périodes. Pour des lignes de tendance supplémentaires, cliquez sur Plus d'options. Si vous choisissez Plus d'options. Cliquez sur l'option souhaitée dans le volet Format Trendline sous Trendline Options. Si vous sélectionnez Polynomial. Entrez la puissance la plus élevée pour la variable indépendante dans la case Ordre. Si vous sélectionnez Moyenne mobile. Entrez le nombre de périodes à utiliser pour calculer la moyenne mobile dans la zone Période. Astuce: Une ligne de tendance est la plus précise lorsque sa valeur R-carré (un nombre de 0 à 1 qui révèle à quel point les valeurs estimées pour la ligne de tendance correspondent à vos données réelles) est à ou près de 1. Lorsque vous ajoutez une ligne de tendance à vos données , Excel calcule automatiquement sa valeur R-squared. Vous pouvez afficher cette valeur sur votre organigramme en cochant la case Afficher le R-carré sur la zone de graphique (fenêtre Format Trendline, Trendline Options). Vous pouvez en apprendre plus sur toutes les options de ligne de tendance dans les sections ci-dessous. Ligne de tendance linéaire Utilisez ce type de ligne de tendance pour créer une ligne droite optimale pour des ensembles de données linéaires simples. Vos données sont linéaires si le motif de ses points de données ressemble à une ligne. Une ligne de tendance linéaire indique généralement que quelque chose augmente ou diminue à un rythme régulier. Une ligne de tendance linéaire utilise cette équation pour calculer l'ajustement des moindres carrés pour une droite: où m est la pente et b l'intercepte. La ligne de tendance linéaire suivante montre que les ventes de réfrigérateurs ont constamment augmenté au cours d'une période de 8 ans. Notez que la valeur R-squared (un nombre de 0 à 1 qui révèle comment étroitement les valeurs estimées pour la ligne de tendance correspondent à vos données réelles) est 0.9792, qui est un bon ajustement de la ligne aux données. En affichant une ligne courbe optimale, cette ligne de tendance est utile lorsque le taux de changement dans les données augmente ou diminue rapidement, puis se stabilise. Une ligne de tendance logarithmique peut utiliser des valeurs négatives et positives. Une ligne de tendance logarithmique utilise cette équation pour calculer l'ajustement des moindres carrés par points: où c et b sont des constantes et ln est la fonction logarithmique naturelle. La courbe de tendance logarithmique suivante montre la croissance démographique prédite des animaux dans une zone d'espace fixe, où la population s'est stabilisée en tant qu'espace pour les animaux a diminué. Notez que la valeur R-carré est 0.933, ce qui est un ajustement relativement bon de la ligne aux données. Cette tendance est utile lorsque vos données fluctuent. Par exemple, lorsque vous analysez les gains et les pertes sur un grand ensemble de données. L'ordre du polynôme peut être déterminé par le nombre de fluctuations des données ou par le nombre de virages (collines et vallées) apparaissant dans la courbe. Typiquement, une ligne de tendance polynomiale Ordre 2 n'a qu'une seule colline ou une seule vallée, un Ordre 3 a une ou deux collines ou vallées, et un Ordre 4 a jusqu'à trois collines ou vallées. Une ligne de tendance polynomiale ou curviligne utilise cette équation pour calculer l'ajustement des moindres carrés par points: où b et sont des constantes. La ligne de tendance polynomiale Ordre 2 (une colline) montre la relation entre la vitesse de conduite et la consommation de carburant. Notez que la valeur R-squared est 0.979, ce qui est proche de 1 donc les lignes un bon ajustement aux données. En montrant une ligne courbe, cette ligne de tendance est utile pour les ensembles de données qui comparent des mesures qui augmentent à un taux spécifique. Par exemple, l'accélération d'une voiture de course à intervalles de 1 seconde. Vous ne pouvez pas créer une ligne de tendance de puissance si vos données contiennent des valeurs nulles ou négatives. Une ligne de tendance de puissance utilise cette équation pour calculer l'ajustement des moindres carrés par points: où c et b sont des constantes. Remarque: Cette option n'est pas disponible lorsque vos données incluent des valeurs négatives ou nulles. Le diagramme de mesure de distance suivant indique la distance en mètres par seconde. La ligne de tendance de puissance démontre clairement l'accélération croissante. Notez que la valeur R-squared est 0.986, ce qui est un ajustement presque parfait de la ligne aux données. Montrant une ligne courbe, cette ligne de tendance est utile lorsque les valeurs de données augmentent ou diminuent à des taux constamment croissants. Vous ne pouvez pas créer une ligne de tendance exponentielle si vos données contiennent des valeurs nulles ou négatives. Une courbe de tendance exponentielle utilise cette équation pour calculer l'ajustement des moindres carrés par points: où c et b sont des constantes et e est la base du logarithme naturel. La ligne de tendance exponentielle suivante montre la quantité décroissante de carbone 14 dans un objet à mesure qu'elle vieillit. Notez que la valeur R-squared est 0,990, ce qui signifie que la ligne s'adapte parfaitement aux données. Moyenne mobile Cette ligne de tendance corrige les fluctuations des données pour montrer un modèle ou une tendance plus clairement. Une moyenne mobile utilise un nombre spécifique de points de données (définis par l'option Période), les met en moyenne et utilise la valeur moyenne comme un point dans la ligne. Par exemple, si Période est défini sur 2, la moyenne des deux premiers points de données est utilisée comme premier point dans la ligne de tendance moyenne mobile. La moyenne des deuxième et troisième points de données est utilisée comme deuxième point dans la ligne de tendance, etc. Une ligne de tendance moyenne mobile utilise cette équation: Le nombre de points dans une ligne de tendance moyenne mobile est égal au nombre total de points de la série, Numéro que vous spécifiez pour la période. Dans un diagramme de dispersion, la ligne de tendance est basée sur l'ordre des valeurs x dans le graphique. Pour obtenir un meilleur résultat, triez les valeurs x avant d'ajouter une moyenne mobile. La tendance suivante ligne de tendance moyenne montre un modèle dans le nombre de maisons vendues sur une période de 26 semaines. Ajouter une tendance ou la moyenne mobile à un graphique S'applique à: Excel 2016 Word 2016 PowerPoint 2016 Excel 2013 Word 2013 Outlook 2013 PowerPoint 2013 Plus. Moins Pour afficher les tendances des données ou les moyennes mobiles dans un graphique que vous avez créé. Vous pouvez ajouter une ligne de tendance. Vous pouvez également étendre une ligne de tendance au-delà de vos données réelles pour vous aider à prédire les valeurs futures. Par exemple, la ligne de tendance linéaire suivante prévoit deux trimestres à venir et montre clairement une tendance à la hausse qui semble prometteuse pour les ventes futures. Vous pouvez ajouter une ligne de tendance à un graphique 2-D qui n'est pas empilé, y compris la zone, la barre, la colonne, la ligne, le stock, la dispersion et la bulle. Vous ne pouvez pas ajouter une ligne de tendance à un diagramme 3D, empilé, de radar, de tarte, de surface ou de beignet. Ajouter une ligne de tendance Sur votre graphique, cliquez sur la série de données à laquelle vous souhaitez ajouter une ligne de tendance ou une moyenne mobile. La ligne de tendance commencera sur le premier point de données de la série de données que vous choisissez. Cochez la case Trendline. Pour choisir un autre type de ligne de tendance, cliquez sur la flèche à côté de Trendline. Puis cliquez sur Exponentiel. Prévision linéaire. Ou moyenne mobile à deux périodes. Pour des lignes de tendance supplémentaires, cliquez sur Plus d'options. Si vous choisissez Plus d'options. Cliquez sur l'option souhaitée dans le volet Format Trendline sous Trendline Options. Si vous sélectionnez Polynomial. Entrez la puissance la plus élevée pour la variable indépendante dans la case Ordre. Si vous sélectionnez Moyenne mobile. Entrez le nombre de périodes à utiliser pour calculer la moyenne mobile dans la zone Période. Astuce: Une ligne de tendance est la plus précise lorsque sa valeur R-carré (un nombre de 0 à 1 qui révèle à quel point les valeurs estimées pour la ligne de tendance correspondent à vos données réelles) est à ou près de 1. Lorsque vous ajoutez une ligne de tendance à vos données , Excel calcule automatiquement sa valeur R-squared. Vous pouvez afficher cette valeur sur votre organigramme en cochant la case Afficher le R-carré sur la zone de graphique (fenêtre Format Trendline, Trendline Options). Vous pouvez en apprendre plus sur toutes les options de ligne de tendance dans les sections ci-dessous. Ligne de tendance linéaire Utilisez ce type de ligne de tendance pour créer une ligne droite optimale pour des ensembles de données linéaires simples. Vos données sont linéaires si le motif de ses points de données ressemble à une ligne. Une ligne de tendance linéaire indique généralement que quelque chose augmente ou diminue à un rythme régulier. Une ligne de tendance linéaire utilise cette équation pour calculer l'ajustement des moindres carrés pour une droite: où m est la pente et b l'intercepte. La ligne de tendance linéaire suivante montre que les ventes de réfrigérateurs ont constamment augmenté au cours d'une période de 8 ans. Notez que la valeur R-squared (un nombre de 0 à 1 qui révèle comment étroitement les valeurs estimées pour la ligne de tendance correspondent à vos données réelles) est 0.9792, qui est un bon ajustement de la ligne aux données. En affichant une ligne courbe optimale, cette ligne de tendance est utile lorsque le taux de changement dans les données augmente ou diminue rapidement, puis se stabilise. Une ligne de tendance logarithmique peut utiliser des valeurs négatives et positives. Une ligne de tendance logarithmique utilise cette équation pour calculer l'ajustement des moindres carrés par points: où c et b sont des constantes et ln est la fonction logarithmique naturelle. La courbe de tendance logarithmique suivante montre la croissance démographique prédite des animaux dans une zone d'espace fixe, où la population s'est stabilisée en tant qu'espace pour les animaux a diminué. Notez que la valeur R-carré est 0.933, ce qui est un ajustement relativement bon de la ligne aux données. Cette tendance est utile lorsque vos données fluctuent. Par exemple, lorsque vous analysez les gains et les pertes sur un grand ensemble de données. L'ordre du polynôme peut être déterminé par le nombre de fluctuations des données ou par le nombre de virages (collines et vallées) apparaissant dans la courbe. Typiquement, une ligne de tendance polynomiale Ordre 2 n'a qu'une seule colline ou une seule vallée, un Ordre 3 a une ou deux collines ou vallées, et un Ordre 4 a jusqu'à trois collines ou vallées. Une ligne de tendance polynomiale ou curviligne utilise cette équation pour calculer l'ajustement des moindres carrés par points: où b et sont des constantes. La ligne de tendance polynomiale Ordre 2 (une colline) montre la relation entre la vitesse de conduite et la consommation de carburant. Notez que la valeur R-squared est 0.979, ce qui est proche de 1 donc les lignes un bon ajustement aux données. En montrant une ligne courbe, cette ligne de tendance est utile pour les ensembles de données qui comparent des mesures qui augmentent à un taux spécifique. Par exemple, l'accélération d'une voiture de course à intervalles de 1 seconde. Vous ne pouvez pas créer une ligne de tendance de puissance si vos données contiennent des valeurs nulles ou négatives. Une ligne de tendance de puissance utilise cette équation pour calculer l'ajustement des moindres carrés par points: où c et b sont des constantes. Remarque: Cette option n'est pas disponible lorsque vos données incluent des valeurs négatives ou nulles. Le diagramme de mesure de distance suivant indique la distance en mètres par seconde. La ligne de tendance de puissance démontre clairement l'accélération croissante. Notez que la valeur R-squared est 0.986, ce qui est un ajustement presque parfait de la ligne aux données. Montrant une ligne courbe, cette ligne de tendance est utile lorsque les valeurs de données augmentent ou diminuent à des taux constamment croissants. Vous ne pouvez pas créer une ligne de tendance exponentielle si vos données contiennent des valeurs nulles ou négatives. Une courbe de tendance exponentielle utilise cette équation pour calculer l'ajustement des moindres carrés par points: où c et b sont des constantes et e est la base du logarithme naturel. La ligne de tendance exponentielle suivante montre la quantité décroissante de carbone 14 dans un objet à mesure qu'elle vieillit. Notez que la valeur R-squared est 0,990, ce qui signifie que la ligne s'adapte parfaitement aux données. Moyenne mobile Cette ligne de tendance corrige les fluctuations des données pour montrer un modèle ou une tendance plus clairement. Une moyenne mobile utilise un nombre spécifique de points de données (définis par l'option Période), les met en moyenne et utilise la valeur moyenne comme un point dans la ligne. Par exemple, si Période est défini sur 2, la moyenne des deux premiers points de données est utilisée comme premier point dans la ligne de tendance moyenne mobile. La moyenne des deuxième et troisième points de données est utilisée comme deuxième point dans la ligne de tendance, etc. Une ligne de tendance moyenne mobile utilise cette équation: Le nombre de points dans une ligne de tendance moyenne mobile est égal au nombre total de points de la série, Numéro que vous spécifiez pour la période. Dans un diagramme de dispersion, la ligne de tendance est basée sur l'ordre des valeurs x dans le graphique. Pour obtenir un meilleur résultat, triez les valeurs x avant d'ajouter une moyenne mobile. La tendance suivante montre la tendance du nombre de maisons vendues sur une période de 26 semaines.


No comments:

Post a Comment