Estoy trabajando en un dispositivo GPU que tiene latencia de enteros de división muy alta, varios cientos de ciclos. Estoy buscando optimizar divisiones.¿División de enteros más rápida cuando se conoce el denominador?
Todas las divisiones por denominador que están en un conjunto {1,3,6,10}, sin embargo el numerador es un valor positivo en tiempo de ejecución, aproximadamente 32000 o menos. debido a restricciones de memoria, la tabla de búsqueda puede no ser una buena opción.
¿Puedes pensar en alternativas? He pensado en calcular las inversas del punto flotante y usarlas para multiplicar el numerador.
Gracias
PS. gracias a la gente hackear cambio de bit es realmente genial. para recuperarse de redondeo, lo uso siguiente segmento C:
sistemas// q = m/n
q += (n*(j +1)-1) < m;
sí, eso es lo suficientemente pequeño. Gracias – Anycorn
obtengo un error de redondeo, pero tengo una forma de recuperar el resultado correcto. Gracias – Anycorn
Para el error de redondeo, puede probar el clásico agregar la mitad antes de dividir, que en este caso sería a/b = (a * ((1 << 16)/b) + (1 <<15))>> 16 – drawnonward