Code

15

Agrandissement bilinéaire: Le retour

juil

Il y a quelques temps j’avais proposé un algorithme d’interpolation bilinéaire permettant l’agrandissement d’une image dont les performances quoique correctes m’avaient un peu déçues.

J’ai finalement trouvé une solution pour booster significativement la performance de l’algorithme.
Mais le plus intéressant est sans doute la technique en elle-même, qui permet de coupler les deux unités de calculs que sont l’ARM et NEON

more...
 | Tags: ,
20

A simple NEON optimization method

juin

This post is a translation of “Méthode simple d’optimisation de code NEON

Since I discovered NEON, I had the opportunity to encode several small programs to test the beast.
NEON really is one of the highlights of Cortex. Its use is really simple, the big amount of registers and its instructions with 3 registers make its usage easier than on other processors.
Highly pipelined, the order of instructions is quite significant.
Whichever program you will achieve with NEON, you rarely falls on the optimal version of its implementation the first time. Finally, once you have pipelined at best, there is a last small optimization that allows almost every time to gain a few more cycles …

more...
 | Tags: ,
19

Méthode simple d’optimisation de code NEON

juin
1 Comment »   Posted by Etienne SOBOLE |  Category:ARM, Assembleur, Code

Depuis que j’ai découvert NEON, j’ai eu l’occasion de coder plusieurs petits programmes pour tester un peu la bête.
NEON est vraiment l’un des points fort des Cortex. Son utilisation est vraiment simple, son nombre important de registres et ses instructions à 3 registres rendent sa programmation en assembleur plus facile que sur d’autre processeurs.
Fortement pipeliné, l’ordre des instructions est assez important.
Quelque soit le programme que vous allez réaliser avec NEON, vous tomberez rarement sur la version optimale de son implémentation du premier coup. Au final, une fois que vous avez tout pipeliné au mieux, il reste une petite optimisation qui permet quasiment à chaque fois de gagner encore quelques cycles…

more...
 | Tags: ,
25

Bilinear enlarge with NEON

mai

This post is a translation of “Agrandissement bilinéaire avec NEON

Between two versions of the cycle counter, I felt like a little fun with an exercise a little more playful.
So today, a small stop in the field of image processing … activity where normally, NEON is expected to excel.

more...
 | Tags: ,
25

Agrandissement bilinéaire avec NEON

mai

Entre deux version du compteur de cycles, j’ai eu envie de m’amuser un petit peu avec un exercice un peu plus ludique.
Donc aujourd’hui, petit halte dans le domaine du traitement d’images… domaine où normalement, NEON est supposé exceller.

more...
 | Tags: ,
10

Interactions between ARM and NEON

mai

This post is a translation of “Intéractions entre NEON et l’ARM

As I said sooner, NEON has a specific instruction queue for up to 16 instructions before blocking the functioning of the ARM. This queue raises many questions!
How an NEON instruction using a ARM register (such as memory access, for example) can it be done long after its decoding while ensuring that its address register was unchanged in the meantime.
How the transfer (VMOV) between ARM registers and NEON registers works ?
What are interactions between NEON and VPF?
So many questions for which I have not found answers in the documentation. It does not matter! A great shot of tests, I finally found a beginning of explanation.

more...
 | Tags:
09

Intéractions entre NEON et l’ARM

mai
1 Comment »   Posted by Etienne SOBOLE |  Category:ARM, Assembleur, Code

Le fait que NEON dispose d’une file d’instructions spécifique pouvant accueillir jusqu’à 16 instructions avant de bloquer le fonctionnement de l’ARM soulève de nombreuses interrogations !
Comment une instruction NEON utilisant un registre ARM (comme un accès mémoire par exemple) peut-elle être exécutée longtemps après son décodage tout en garantissant que son registre d’adresse (registre ARM donc) n’a pas été modifié entre temps.
De la même manière comment fonctionnent les échanges (VMOV) entre des registres ARM et des Registres NEON ?
Quelles interactions existent ils entre NEON et VPf ?
Autant de questions pour lesquels je n’ai pas trouvé de réponses dans la documentation. Ce n’est pas grâve! A grand coup de tests j’ai fini par trouvé un début d’explication.

more...
 | Tags:
17

Focus on branch instructions.

avr

This post is a translation of “Focus sur les instructions de branchement.

The branch instruction of the Cortex A8 is a rather complex instruction.
I realized a lot of tests to be able to better manage this instruction into the cycle counter.
Here is a summary of the results obtained. Of course, as usual, there is a lot of speculation in what I say. But in the absence of more explicit documentation about the Cortex, I am forced to rely on observation in order to understand a little better branch operation.

more...
16

Focus sur les instructions de branchement.

avr
3 Comments »   Posted by Etienne SOBOLE |  Category:ARM, Assembleur, Code

L’instruction de branchement du Cortex A8 est une instruction assez complexe.
J’ai réalisé pas mal de tests afin de pouvoir la gérer au mieux dans le compteur de cycle.
Voilà donc les résultats des essais que j’ai fait. Evidemment, comme d’habitude, il y a pas mal de spéculations dans ce que je raconte. Mais, à défaut de documentation plus explicite sur le Cortex, je suis bien obligé de m’appuyer sur des constatations pour en déduire un postulat quant à son fonctionnement.

more...
09

Ebola: the first test and return to square one

avr

This post is a translation of “Ebola : premiers essais et retour à la case départ

It’s been a little while now that I’ve tested my idea of ​​a language.
I just had not time to speak about it…

Finally, after mature reflection, my language is passed in the trash in favor of a assembler editor.

more...