Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

208
Views
¿Cuáles son las diferencias entre las funciones Vector256.Create y Avx2.BroadcastScalarToVector?

Por ejemplo, quiero crear una variable Vector256 con todos los elementos inicializados en un entero con signo específico, supuestamente mi sistema es compatible con Avx2. El documento de .NET dice que la transmisión de un scarlar con Avx2 usa las instrucciones _mm256_broadcastd_epi32 y _mm_broadcastd_epi32 .

¿Qué instrucción genera Vector256.Create ? ¿Es lo mismo que el anterior?

 int value = -1; Vector256<int> v1 = Avx2.BroadcastScalarToVector256(&value); Vector256<int> v2 = Vector256.Create(-1); Debug.Assert(v1.Equals(v2)); // True
over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

TL/DR: utilice BroadcastScalarToVector256 cuando los datos de origen estén en la memoria y Vector256<int>.Create en todos los demás casos.

La documentación de BroadcastScalarToVector256 dice que se compila en este ensamblado: VPBROADCASTD ymm, m32 Esto es lo que desea cuando el escalar de origen está en la memoria, pero realiza un viaje de ida y vuelta a la memoria y viceversa si los datos de origen son un registro. Ese viaje de ida y vuelta es un poco más lento en términos de latencia, incluso si la memoria está en la pila, es decir, en la caché L1D.

La documentación de Vector256.Create( int ) no dice en qué se compila, solo dice que corresponde a _mm256_set1_epi32 intrínseco en C++. Esto significa que el compilador JIT es libre de hacer lo que sea más eficiente.

Si llama a Vector256<int>.Create( 0 ) , debería compilarse en vpxor ymm0, ymm0, ymm0 , porque esa instrucción es una forma rápida de poner a cero un vector.

Cuando llama a Vector256<int>.Create( -1 ) , debe compilarse en vpcmpeqd ymm0, ymm0, ymm0 o similar, nuevamente porque el compilador conoce el valor, vpcmpeqd no tiene dependencias de datos y hace el trabajo rápidamente.

Cuando pasa una variable allí, Create debe compilarse en un código como vmovd xmm0, eax; vpbroadcastd ymm0, xmm0 , son dos instrucciones, pero aún más rápido que el viaje de ida y vuelta a la memoria y viceversa.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!