CAPÍTULO II


Acheter Kamagra 100mg Oral Jelly,Kamagra Oral Jelly India,Viagra Generique Inde

intérêt Sémantique de la visibilité de la mémoire des données jnicnatives lors de la synchronisation externe dans Java

Tout cela est conforme à ma compréhension.

Je n'avais pas pensé au Buy Kamagra Uk Online problème de chargement / MOVNTDQA.Sur la seule spécification Viagra Generique Inde Intel, je ne peux pas déterminer quelles clôtures sont requises, et si elles peuvent également être réorganisées avec un magasin de suivi, ou juste une charge précédente. Si quelqu'un peut citer un manuel qui clarifie cela, il serait apprécié. En ce qui me concerne, pour l'instant, si vous voulez vraiment utiliser l'instruction, vous devez comprendre ce qu'il fait et ajouter des clôtures appropriées.

Je crois que la convention dans laquelle le code contenant MOVNTx ajoute les clôtures, par opposition à avoir des primitives de synchronisation ajouter des clôtures, est la seule raisonnable. Autrement, les accès volatils / atomiques devraient ajouter des clôtures supplémentaires pour les charges et les magasins, et le verrouillage non-autorisé ralentirait sensiblement. L'utilisation de SSE semble très limitée, pas que j'en sache beaucoup.

Commençons par un cas trivial où le code dans une section critique met à zéro une variable globale partagée avec MOVNTI (magasin non temporel), puis libère un verrou. Disons en outre que nous implémentons unlock () par un magasin normal dans un mot de verrouillage, éventuellement suivi par une barrière de chargement de magasin et une charge pour vérifier l'existence de tous les threads qui pourraient avoir besoin d'être réveillés. (Ceci est en fait le modèle que j'ai utilisé pour le chemin de sortie du moniteur JNI de HotSpot pour x86 et SPARC.Le chemin de déverrouillage 'synchronisé' pour Acheter Kamagra 100mg Oral Jelly le boîtier gonflé commence également par un magasin qui libère le verrou. MOVNTI est faiblement ordonné vis-à-vis des autres charges et mémoires de TSO Normalement, si nous avons un magasin via MOVNTI suivi dans l'ordre du programme par un magasin normal, ce magasin normal peut apparaître dans l'ordre de visibilité de la mémoire avant le magasin MOVNTI. Ainsi, il est possible qu'un autre thread puisse voir que le verrou a été abandonné et qu'il l'ait acquis, tout cela avant que les mémoires dans la section critique au moyen de MOVNTI soient visibles. De toute évidence, cela est indésirable et constitue une violation d'une clause d'exclusion de sécurité.

Historiquement, unlock () implémenté de cette manière par un magasin qui efface d'abord le mot de verrouillage est antérieur aux instructions SSE / AVX affaiblies. Par convention, le nouveau code qui utilisait des instructions telles que MOVNTI devait respecter ces verrous préexistants en Kamagra Oral Jelly India s'assurant qu'un SFENCE apparaissait après le dernier MOVNTI et avant le magasin dans le déverrouillage. Vous pouvez le voir dans l'évolution des opérations mcSet / bzero / memcpy x86, où les implémentations sont passées à des instructions SSE / AVX, suivies de quelques corrections hâtives pour rééquiper et insérer des instructions SFENCE après que le problème de réorganisation est devenu plus connu. (Je n'ai pas regardé récemment, mais je ne pense pas que les documents ABI spécifiques au processeur 'PS' donnent beaucoup de conseils sur ce sujet.Peut-être que la nouvelle spécification C ++ 11 offre quelques conseils?).

L'exemple MOVNTI puis débloquer ci-dessus n'est qu'un exemple dans une famille de problèmes. En C ++, vous devez vous préoccuper de Best Viagra Pills Uk la réorganisation architecturale par rapport à C ++ 11 atomic et en Java, vous devez vous méfier de la réorganisation sur des opérateurs non sécurisés ou des accès volatiles. En Java, je pense que vous voulez également vous assurer qu'il y a une SFENCE entre tous les accès faiblement ordonnés émis par le JIT et la sortie suivante du code managé via JNI.

Pour le code Java pur, Buy Kamagra Cheap l'invariant de clé est que si le JIT émet des instructions d'accès à la mémoire faiblement ordonnées, alors il doit émettre de manière prudente des instructions SFENCE finales. (Il serait bon que les gens du JIT puissent confirmer qu'ils adhèrent à Buy Viagra London cette convention.) Pour le code natif, la plupart des fonctions de la bibliothèque glibc / libc ont maintenant le SFENCE en fin de ligne. code de langue ou inline asm, alors c'est à vous de suivre les conventions.

Il y a des arguments similaires concernant LFENCE, bien que les charges faiblement ordonnées dans une section critique soient un peu plus faciles. En ignorant le verrouillage biaisé, toute acquisition de verrou se fait via une instruction atomique RMW telle que LOCK: CMPXCHG ou XCHG. Ces atomes ont une sémantique de clôture bidirectionnelle, de sorte que les charges faiblement ordonnées dans une section critique ne peuvent pas être réordonnées Buy Kamagra Online au-dessus (avant) l'acquisition de la serrure, mais il y a des endroits où LFENCE serait probablement nécessaire. le verrouillage de la promiscuité via un verrouillage biaisé nécessite une révocation, et la révocation a des clôtures pleines sur le chemin de la victime, de sorte que la sécurité est également assurée).

En aparté, l'apparition de SFENCE ou de LFENCE dans un code qui n'utilise pas SSE / AVX est un diagnostic de malentendu du modèle de mémoire x86.

Je crois qu'avec les bons commutateurs, gcc va transformer le code C / C + normal et dans certains cas, en tant qu'optimisation, émettre des instructions SSE / AVI de sa propre initiative sans provocation, et si oui, est-ce que nous savons si ça va aussi émet SFENCE / LFENCE pour mettre entre crochets le code en question?