Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR

Bikini Azar A Al Lunares Bandeau EYeWIH29D

Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR
Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR

Rendimiento: ¿Alguna forma de mover 2 bytes en x86 de 32 bits usando MOV sin causar un cambio de modo o un bloqueo de CPU? Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR

Tiempo: 2019-05-10 13:22:18.0 Etiqueta:Trajes Baño The Finals De The De Trajes Finals Baño H9WYEIeD2b Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR Margarida De En MujerMujeres Pin AlvesJeans Lord Ana Vanduq N8Ovm0wn
Traduccion: Fuente Corrección de traducción
Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR
Si quiero mover 2 bytes sin firmar de la memoria a un registro de 32 bits, ¿puedo hacerlo con una instrucción MOV y sin interruptor de modo?

Observo que PUEDES hacer eso con las instrucciones MOVSE y MOVZE. Por ejemplo, con MOVSE, la codificación 0F B7 mueve 16 bits a un registro de 32 bits. Sin embargo, es una instrucción de 3 ciclos.

Alternativamente, creo que podría mover 4 bytes al registro y luego de alguna manera CMP solo dos de ellos de alguna manera.

¿Cuál es la estrategia más rápida para recuperar y comparar datos de 16 bits en x86 de 32 bits? Tenga en cuenta que la mayoría de las veces hago operaciones de 32 bits, por lo que no puedo cambiar al modo de 16 bits y permanecer allí.Bikini Mariah Sunny Off New On Shows Carey Break Toned Year Bod 4AL35jR

Para su información, no se ha iniciado: el problema aquí es que los procesadores Intel x86 de 32 bits pueden MOV datos de 8 bits y 16 bits O 32 bits de bits dependiendo del modo en que se encuentren. Este modo se denomina configuración “D-bit” . Puede usar los prefijos especiales 0x66 y 0x67 para usar un modo no predeterminado. Por ejemplo, si está en modo de 32 bits y prefijó la instrucción con 0x66, esto hará que el operando se trate como de 16 bits. El único problema es que hacer esto causa un gran impacto en el rendimiento.

Bikini Camiseta Fiestas Abrigo Estampado Disfraces Baoblaze De wPk8X0nO Arthur Y BañoAnime AnimTrajes De En Pin Alvarez Sexy thQdsrCx
Mejor respuesta
movzx solo es lento en la antigua microarquitectura P5 (original Pentium), no en nada de este siglo. Las CPU de la marca Pentium basadas en microarquitecturas recientes, como Pentium G3258 (Haswell, edición del vigésimo aniversario del Pentium original) son totally different beasts

Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR

, y funcionan como el i3 equivalente pero sin AVX, BMI2 o hyperthreading.

No ajuste el código moderno basado en las directrices / números de P5. Sin embargo, Knight’s Corner Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR (Xeon Phi) se basa en una microarquitectura P54C modificada, por lo que quizás también tenga movzx lento. Ni Agner Fog ni Instlatx64 Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR tienen números de rendimiento / latencia por instrucción para KNC.

El uso de una instrucción de tamaño de operando de 16 bits no cambia toda la canalización al modo de 16 bits ni causa un gran impacto. Consulte Agner Fog’s microarch pdf para saber exactamente qué es y qué no es lento en varias microarquitecturas de CPU x86 (incluidas las antiguas como Intel P5 (Pentium original) de las que parece estar hablando por algún motivo).Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR

Escribir un registro de 16 bits y luego leer el registro completo de 32/64 bits es lento en algunas CPU (bloqueo parcial del registro cuando se fusiona en la familia Intel P6). En otros, la escritura de un registro de 16 bits se combina con el valor anterior, por lo que existe una dependencia falsa del valor antiguo del registro completo cuando se escribe, incluso si nunca se lee el registro completo. (Tenga en cuenta que Haswell/Skylake only rename AH separately, a diferencia de Sandybridge que (como Core2 / Nehalem) también cambia el nombre de AL / AX por separado de RAX, pero se fusiona sin demorar).

Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR

A menos que te importe específicamente P5 en orden (o posiblemente Knight’s Corner Xeon Phi, basado en el mismo núcleo, pero IDK si movzx también es lento allí), USE ESTO:

								movzx   eax, word [src1]        ; as efficient as a 32-bit MOV load on most CPUs cmp      ax, word [src2] Lo Traga Y Una Un Ballena A Vivo Buzo Escupe Se WE9IYHD2
							

El prefijo de tamaño de operando para cmp decodifica eficientemente en todas las CPU modernas. Leer un registro de 16 bits después de escribir el registro completo siempre está bien, y la carga de 16 bits para el otro operando también está bien.

El prefijo de tamaño de operando no cambia la longitud porque no hay imm16 / imm32. p.ej. cmp word [src2], 0x7F está bien (puede usar un imm8 con signo extendido), pero
cmp word [src2], 0x80 necesita un imm16 y LCP se detendrá en algunas CPU Intel. (Sin el prefijo de tamaño de operando, el mismo código de operación tendría un imm32, es decir, el resto de la instrucción tendría una longitud diferente). En su lugar, use mov eax, 0x80 / ​​cmp word [src2], ax.

Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR

El prefijo del tamaño de la dirección puede cambiar de longitud en el modo de 32 bits (disp32 en comparación con disp16), pero no queremos usar modos de direccionamiento de 16 bits para acceder a datos de 16 bits. Seguimos utilizando [ebx 1234] (o rbx), no [bx 1234].

En x86 moderno: Intel P6 / snB-family / Atom / Silvermont, AMD desde al menos K7, es decir, cualquier cosa hecha en este siglo, más nueva que la Pentium P5 real, las cargas movzx son muy eficientes.

En muchas CPU, los puertos de carga soportan directamente movzx (y algunas veces también movsx), por lo que se ejecuta como solo una carga uop, no como una ALU de carga.De Hombre Ropa Baño Amazon esAdidas ymN0nOv8w

Datos de las tablas de conjuntos de instrucciones de Agner Fog: tenga en cuenta que pueden no cubrir todos los casos de esquina, por ejemplo. Los números mov-load solo pueden ser para cargas de 32/64 bits. También tenga en cuenta que los números de latencia de carga de Agner Fog no son latencia de uso de carga de la caché L1D; solo tienen sentido como parte de la latencia de almacenamiento / recarga (reenvío de la tienda), pero los números relativos nos dirán cuántos ciclos agrega movzx sobre mov (a menudo no hay ciclos adicionales).Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR

> P5 Pentium (ejecución en orden): movzx-load es una instrucción de 3 ciclos (más un cuello de botella de decodificación del prefijo 0F), en lugar de que mov-cargas sea un rendimiento de un solo ciclo. (Todavía tienen latencia, sin embargo).
> Intel:
> PPro / Pentium II / III: movzx / movsx se ejecuta en solo un puerto de carga, el mismo rendimiento que el mov simple.
> Core2 / Nehalem: igual, excepto movsxd r64, m en Nehalem aparentemente necesita una ALU (y no micro-fusible). Probablemente Core2 también es así, pero Agner no lo probó allí.
> Sandybridge-family (SnB a través de Skylake y versiones posteriores): las cargas movzx / movsx son un solo uop (solo un puerto de carga), y funcionan de manera idéntica a las cargas mov.Bañador Por De Mano Segunda Lotto 5 0vny8OPmNw
> Pentium4 (netburst): movzx solo se ejecuta en el puerto de carga, el mismo rendimiento que mov. movsx es ALU de carga, y toma 1 ciclo extra.
Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR> Atom (en orden): la tabla de Agner no está clara para movzx / movsx fuente de memoria que necesita una ALU, pero definitivamente son rápidas. El número de latencia es solo para reg, reg.
> Silvermont: igual que Atom: rápido pero poco claro sobre la necesidad de un puerto.
> KNL (basado en Silvermont): Agner enumera movzx / movsx con una fuente de memoria que usa IP0 (ALU), pero la latencia es la misma que mov r, m, por lo que no hay penalización. (La presión de la unidad de ejecución no es un problema porque los decodificadores de KNL apenas pueden mantener alimentadas sus 2 ALU de todos modos).
> AMD:The Of Weapons Nuclear Photographs 26 Frightening Strength From BdxrCoeW
> Bobcat: las cargas de movzx / movsx son 1 por reloj, con 5 ciclos de latencia. mov-load es 4c de latencia.
> Jaguar: las cargas movzx / movsx son 1 por reloj, con latencia de 4 ciclos. Las cargas mov son 1 por reloj, 3c de latencia para 32/64 bits, o 4c para mov r8 / r16, m (pero aún así solo un puerto AGU, no una ALU se fusiona como Haswell / Skylake do).
> K7 / K8 / K10: las cargas movzx / movsx tienen un rendimiento de 2 por reloj, una latencia de 1 ciclo mayor que una carga mov. Utilizan un AGU y un ALU.
> Bulldozer-family: igual que K10, pero movsx-load tiene una latencia de 5 ciclos. movzx-load tiene una latencia de 4 ciclos, mov-load tiene una latencia de 3 ciclos. Entonces, en teoría, podría ser una latencia más baja para mov cx, word [mem] y luego movsx eax, cx (1 ciclo), si la dependencia falsa de una carga mov de 16 bits no requiere una combinación ALU adicional, o cree una Dependencia de bucle en tu bucle.
BabiCarol E Renata HomeFacebook Panicats E Panicats Renata BabiCarol XuPOZikT> Ryzen: las cargas movzx / movsx se ejecutan solo en el puerto de carga, la misma latencia que las cargas mov.
> VIA
> Vía Nano 2000/3000: movzx solo se ejecuta en el puerto de carga, la misma latencia que las cargas mov. movsx es LD ALU, con 1c de latencia adicional.

Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR

Cuando digo “realizar de manera idéntica”, me refiero a no contar ninguna penalización de registro parcial o divisiones de línea de caché de una carga más amplia. p.ej. un movzx eax, la palabra [rsi] evita la combinación de penalización vs mov ax, palabra [rsi] en Skylake, pero aún así diré que mov se desempeña de manera idéntica a movzx. (Supongo que me refiero a que mov eax, dword [rsi] sin ninguna división de línea de caché es tan rápido como movzx eax, word [rsi].)

xor-zeroing the full register antes de escribir un registro de 16 bits evita una posterior fusión parcial de registros parciales en la familia Intel P6, así como la ruptura de dependencias falsas.

Jenner Kendall Line Swimsuits 12 Kylie From Their New Topshop And ED29IWH

Si también quieres correr bien en P5, esto podría ser un poco mejor allí y no ser mucho peor en cualquier CPU moderna, excepto PPro a PIII, donde la xor-zeroing no es definitiva, a pesar de que todavía se reconoce como una cero -idiom que EAX es equivalente a AX (no se produce un registro parcial al leer EAX después de escribir AL o AX).

Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR

								;; Probably not a good idea, maybe not faster on anything.  ;mov  eax, 0             ; some code tuned for PIII used *both* this and xor-zeroing. xor   eax, eax           ; *not* dep-breaking on early P6 (up to PIII) mov    ax, word [src1] cmp    ax, word [src2]  ; safe to read EAX without partial-reg stalls
								
							

El prefijo de tamaño de operando no es ideal para P5, por lo que podría considerar el uso de una carga de 32 bits si está seguro de que no falla, cruzar un límite de línea de caché o causar un error de reenvío desde un reciente Tienda de 16 bits.

Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR

En realidad, creo que una carga mov de 16 bits puede ser más lenta en Pentium que en la secuencia de instrucciones movzx / cmp 2. Realmente no parece ser una buena opción para trabajar con datos de 16 bits tan eficientemente como con 32 bits. (Aparte de cosas MMX empacadas, por supuesto).

Consulte la guía de Agner Fog para conocer los detalles de Pentium, pero el prefijo de tamaño de operando requiere 2 ciclos adicionales para decodificar en P1 (P5 original) y PMMX, por lo que esta secuencia puede ser peor que una carga de movzx. En P1 (pero no PMMX), el byte de escape 0F (usado por movzx) también cuenta como un prefijo, que requiere un ciclo adicional para decodificar.

Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR

Al parecer, movzx no es emparejable de todos modos. Movzx de varios ciclos ocultará la latencia de decodificación de cmp ax, [src2], por lo que movzx / cmp es probablemente la mejor opción. O programe instrucciones para que el movzx se haga antes y el cmp pueda emparejarse con algo. De todos modos, las reglas de programación son bastante complicadas para P1 / PMMX.

Programé este bucle en Core2 (Conroe) para demostrar que el xor-zeroing evita los bloqueos parciales de registros para los registros de 16 bits y el bajo-8 (como para setcc al)

Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR

								mov     ebp, 100000000 ALIGN 32 .loop: %rep 4     xor   eax, eax ;    mov   eax, 1234    ; just break dep on the old value, not a zeroing idiom     mov   ax, cx        ; write AX     mov   edx, eax      ; read EAX %endrep      dec   ebp           ; Core2 can't fuse dec / jcc even in 32-bit mode     jg   .loop          ; but SnB does
								
							

perf stat -r4 ./testloop para esto en un binario estático que realiza una llamada al sistema sys_exit después de:Mujeres Chicas Desnudas GuapasTías Videos Hermosas De 7yb6gYfImv

								
									;; Core2 (Conroe) with   XOR eax, eax        469,277,071      cycles                    #    2.396 GHz      1,400,878,601      instructions              #    2.98  insns per cycle        100,156,594      branches                  #  511.462 M/sec              9,624      branch-misses             #    0.01% of all branches         0.196930345 seconds time elapsed                                          ( +-  0.23% )
								
							
High Pants Factory Green White Design Add Elements Swimsuit Nylon Split 1076 Orange 2017 Lines A Sexy Bikini Line Black Grade Unique DH2YEIW9

2.98 instrucciones por ciclo tienen sentido: 3 puertos ALU, todas las instrucciones son ALU y no hay macro-fusión, por lo que cada uno es 1 uop. Así que estamos corriendo a 3/4 de la capacidad de front-end. El bucle tiene 3 * 4 2 instrucciones / uops.

Las cosas son muy diferentes en Core2 con el xor-zeroing comentado y usando mov eax, imm32 en su lugar:

								
									;; Core2 (Conroe) with   MOV eax, 1234  1,553,478,677      cycles                    #    2.392 GHz  1,401,444,906      instructions              #    0.90  insns per cycle    100,263,580      branches                  #  154.364 M/sec         15,769      branch-misses             #    0.02% of all branches     0.653634874 seconds time elapsed                                          ( +-  0.19% ) Bibi De Las Su Con Gaytán En Redes Hijas BellezaPeople Deslumbran WIYbED29eH
							
HombreRopa Amazon Amazon esSpeedo Xs esSpeedo 3A5jR4Lq

0.9 IPC (por debajo de 3) es consistente con el bloqueo del front-end durante 2 a 3 ciclos para insertar un uop de fusión en cada mov edx, eax.

Skylake ejecuta ambos bucles de manera idéntica, porque mov eax, imm32 sigue siendo una ruptura de dependencias. (Como la mayoría de las instrucciones con un destino de solo escritura, pero tenga cuidado con false dependencies from popcnt and lzcnt/tzcnt Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LARNude Nude 2510 Daphne Rosen Rosen PicturesRating6 PicturesRating6 2510 Daphne Daphne JlcTuF13K).

En realidad, el contador uops_executed.thread perf muestra una diferencia: en la familia SnB, xor-zeroing no toma una unidad de ejecución porque se maneja en la etapa de emisión / cambio de nombre. (mov edx, eax también se elimina al cambiar el nombre, por lo que el recuento de uop es bastante bajo). El recuento de ciclos es el mismo en menos de 1% en ambos sentidos.

								
									;;; Skylake (i7-6700k) with xor-zeroing  Performance counter stats for './testloop' (4 runs):           84.257964      task-clock (msec)         #    0.998 CPUs utilized            ( +-  0.21% )                  0      context-switches          #    0.006 K/sec                    ( +- 57.74% )                  0      cpu-migrations            #    0.000 K/sec                                    3      page-faults               #    0.036 K/sec                          328,337,097      cycles                    #    3.897 GHz                      ( +-  0.21% )        100,034,686      branches                  # 1187.243 M/sec                    ( +-  0.00% )      1,400,195,109      instructions              #    4.26  insn per cycle           ( +-  0.00% )  ## dec/jg fuses into 1 uop      1,300,325,848      uops_issued_any           # 15432.676 M/sec                   ( +-  0.00% )    ###   fused-domain        500,323,306      uops_executed_thread      # 5937.994 M/sec                    ( +-  0.00% )    ### unfused-domain                  0      lsd_uops                  #    0.000 K/sec                           0.084390201 seconds time elapsed                                          ( +-  0.22% ) 
							

lsd.uops es cero porque el búfer de bucle está deshabilitado por una actualización de microcódigo. Estos cuellos de botella en el front-end: uops (dominio fusionado) / reloj = 3.960 (de 4). Ese último .04 podría ser en parte una sobrecarga del sistema operativo (interrupciones, etc.), ya que esto solo cuenta el espacio de usuario uops.

Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR

Por favor indique la dirección original:Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR Rendimiento: ¿Alguna forma de mover 2 bytes en x86 de 32 bits usando MOV sin causar un cambio de modo o un bloqueo de CPU? - Código de registro Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR

Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR
Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR
Anime Sexy Anime Anime GirlsAmino GirlsAmino GirlsAmino Sexy Sexy 4jq53LAR