Pregunta

necesito para optimizar algo de código C, lo que hace un montón de cálculos de física, el uso de extensiones SIMD en el SPE del procesador Cell. Cada operador vector puede procesar 4 flotadores al mismo tiempo. De manera ideal, me esperaba un aumento de velocidad 4x en el caso más optimista.

¿Cree que el uso de los operadores de vectores podría dar aceleraciones más grandes?

Gracias

¿Fue útil?

Solución

La mejor optimización se produce en replantear el algoritmo. Eliminar pasos innecesarios. Encuentra más una forma directa de lograr el mismo resultado. Calcular la solución en un dominio más relevante para el problema.

Por ejemplo, si la matriz de vector es una lista de n que están todos en la misma línea, entonces es suficiente para transformar los puntos finales sólo e interpolar los puntos intermedios.

Otros consejos

Se puede dar mejores velocidades de hasta de 4 veces el punto más recta flotantes como las instrucciones SIMD podrían ser menos exacta (no tanto como para dar demasiados problemas, aunque) y así tener un menor número de ciclos a ejecutar. Realmente depende.

El mejor plan es aprender tanto sobre el procesador se trata de optimizar de lo posible. Puede que le puede dar mucho mejor que 4x mejoras. Puede darse cuenta que no se puede. No podemos decir que, aunque sin saber más sobre el algoritmo se trata de optimizar y lo que la CPU está destinada a una audiencia.

Por su propia cuenta, no. Pero si el proceso de re-escribir sus algoritmos para apoyarlos también pasa a mejorar, por ejemplo, de la localidad de caché o el comportamiento de ramificación, a continuación, se puede encontrar sin relación aceleraciones. Sin embargo, esto es cierto de cualquier re-escritura ...

Esto es totalmente posible.

  • Usted puede hacer micro optimizaciones más inteligente a nivel de la instrucción de un compilador, si usted sabe lo que está haciendo.
  • La mayoría de los conjuntos de instrucciones SIMD ofrece varias operaciones de gran alcance que no tienen ningún equivalente en escalar la normalidad código FPU / ALU (por ejemplo Pavg / PMIN etc., en SSE2). Incluso si éstas no se ajustan exactamente su problema, a menudo se pueden combinar estas instrucciones de gran efecto.
  • No está seguro acerca de la célula, pero la mayoría de los conjuntos de instrucciones SIMD tienen características para optimizar el acceso a la memoria, por ejemplo a los datos de recuperación previa en caché. He tenido muy buenos resultados con estos.

Ahora bien, este no es la célula o PPC en absoluto, pero un simple filtro de imagen convolución de mina tiene un aumento de velocidad 20x (C vs. SSE2) en Atom, que es más alto que el nivel de paralelismo (16 píxeles a la vez) .

Depende de la arquitectura .. Por el momento Asumo la arquitectura x86 (también conocido como SSE).

Se puede obtener factor de cuatro en bucles apretados con facilidad. Basta con sustituir su matemática existente con instrucciones SSE y ya está.

Usted puede incluso conseguir un poco más que eso, porque si se utiliza SSE se hacen las cuentas en registros que normalmente no son utilizados por el compilador. Esto libera el propósito general se registran para otras tareas como el control de bucle y cálculo de la dirección. En resumen, el código que rodea la instrucción SSE será más compacta y ejecutar más rápido.

Y luego está la opción de insinuar el controlador de memoria cómo desea acceder a la memoria, por ejemplo, Si desea almacenar los datos de una manera que no pasa por el caché o no. Para ancho de banda algoritmos hambrientos que puede darle un poco de velocidad extra más sábana de eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top