PDA

Ver la versión completa : La famosa CPU-DEPENDENCIA



maceoneh
15/04/2014, 18:05
Hola señores,
llevo un tiempo dándole vueltas a este concepto y no consigo llegar a comprenderlo al 100%. Veamos, lo primero sería ver la siguiente gráfica de rendimiento:

http://static.betazeta.com/www.chw.net/up/2014/03/Thief-dx-vs-mantle-FPS.jpg

viendo esta gráfica apreciamos la mejora de FPS gracias a Mantle respecto a DX y al procesador que ejecuta el juego. Ahora bien, si lo miramos detenidamente vemos como un FX8350 ofrece 32FPS en mínimos y un promedio de 48 mientras que un i7-3970 se marca 55 y 83 respectivamente, todo bajo DX que supuestamente genera cuello de botella entre la GPU y la CPU generando la famosa CPU-DEPENDENCIA. Ahora observamos los resultados con Mantle, donde se supone que tal problema no ocurre... y por tanto la GPU puede hacer su trabajo y la CPU el suyo sin estorbarse por lo cual no debería de existir la diferencia de FPS entre un procesador y otro ¿me equivoco? pero sigue pasando porque un i7 obtiene más FPS que un FX... ¿que se me escapa? ¿la GPU no debería de rendir al máximo en todos los casos cuando se ejecuta con el api Mantle?

leftyman
15/04/2014, 18:15
Tu analisis está bien hecho en mi opinión, sólo que mantle consigue optimizar mucho el uso de la CPU y a pesar de ello el juego sigue siendo CPU dependiente en los FX:

Un 8150 da menos FPS que un 8350, a su vez un 8350 da menos fps que un 9370, y un 9370 da menos FPS que un 9590 ...Ademas todo con diferencias bastante acusadas entre unos y otros.


Así que vemos que mantle está aligerando mucho la carga de CPU (en un 8150 casi llegas al doble de FPS en mínimos, y en un 6100 justo el doble)...pero si la programación del juego en sí es CPU dependiente, pues... "es lo que hay"

En un i3 4330 pasas de 34 a 62 en FPS mínimos, yo cruzo los dedos para que directX 12 nos traiga aunque sea la mitad de esto...porque sinceramente no veo a mantle convirtiéndose en un estandar, cuando no creo que sean ni la quita parte de las gráficas las que lo soportan.

maceoneh
15/04/2014, 18:22
Tiene que haber algo más por medio que nadie ve, o el uso de motores generalizados (aunque muy potentes) como UE, si o si evita que se pueda optimizar al 100% un juego, o realmente el concepto de CPU-DEPENDENCIA es un invento de AMD para decirnos que confiemos en sus micros cuando se use el API Mantle. Porque es obvio que todo proceso empieza en la CPU, todo programa vamos, y las llamadas al API se hacen desde la CPU, es decir, un programa no se ejecuta (o un juego en este caso) y divide todos sus procesos relacionados con los gráficos y se ejecutan en la GPU con su propio orden de instrucciones, y por contra el resto en la CPU independientemente. Todo parte de la CPU y la CPU organiza lo que se hace, de ahí a que sin importar el API en uso (uno puede hacerlo mejor que otro, eso esta claro) siempre habrá diferencia entre microprocesadores.

leftyman
15/04/2014, 18:31
Tiene que haber algo más por medio que nadie ve, o el uso de motores generalizados (aunque muy potentes) como UE, si o si evita que se pueda optimizar al 100% un juego, o realmente el concepto de CPU-DEPENDENCIA es un invento de AMD para decirnos que confiemos en sus micros cuando se use el API Mantle. Porque es obvio que todo proceso empieza en la CPU, todo programa vamos, y las llamadas al API se hacen desde la CPU, es decir, un programa no se ejecuta (o un juego en este caso) y divide todos sus procesos relacionados con los gráficos y se ejecutan en la GPU con su propio orden de instrucciones, y por contra el resto en la CPU independientemente. Todo parte de la CPU y la CPU organiza lo que se hace, de ahí a que sin importar el API en uso (uno puede hacerlo mejor que otro, eso esta claro) siempre habrá diferencia entre microprocesadores.

Ahí creo que mezclas conceptos (aunque no vas desencaminado creo yo):

-Mantle paraleliza el trabajo de "draw calls" en los cores ociosos, esto es muy beneficioso en un caso de un juego con muchas draw calls y contribuye a usar todos los cores disponibles con poco/ningún esfuerzo de los programadores.

-Si un juego está programado para usar un Hilo "pesadísimo" y otros 3 hilos de forma más ligera, mantle tiene muy poco que decir...ese juego irá espectacular en un 2500K e infinitamente peor en un 8350 (como dices, siempra habrá diferencia entre CPUs). Mantle no interviene en cómo distribuyen los hilos de los procesos del juego en sí. En estos casos la mejoría (mucho menor) en los FX, vienen en que mantle aprovechará los otros 4 cores del 8350 para las draw calls...pero el "hilo principal pesadísimo" del juego seguirá ejecutándose en un núcleo potente en el caso de un 2500K y en un nucleo poco potente en el 8350 (y encima compartiendo recursos con su núcleo gemelo).

maceoneh
15/04/2014, 18:43
A eso justamente voy, una GPU nunca tomará la decisión de mover una caja de una parte de la pantalla a la otra, es la CPU lo que se lo comunicará a la GPU y la GPU la que lo hará pero si la CPU va saturada no se lo dirá cuando debe ocasionando un lag y por ello una caída de FPS en proporción al impacto de ese lag. Ahora bien, si un desarrollador hace un juego con un motor pensado por y para el el rendimiento será infinitamente superior a cualquier motor generalizado. Porque se podrá decidir mediante un algoritmo por ejemplo, de que manera se programa la CPU para disparar hilos o a cuales le da más prioridad, y el API elegida no será tan importante. Todo esto viene porque, vale DX11 es una castaña, pero Mantle es lo que debió ser DX11 y no fué, pero realmente no se nos está regalando rendimiento... nos lo están devolviendo. Es decir, Mantle (y supongo que DX12) ha solucionado la metida de pata de DX11 pero aun así, que un juego vaya bien no depende del API directamente, depende de que los desarrolladores quieran aprovechar TODAS las ventajas de la GPU y la CPU de turno.

leftyman
15/04/2014, 18:53
Pues sí...la esperanza es que aunque el motor del juego no esté tan optimizado para todos los cores (programar paralelizando es muuuuuy difícil, los hilos deben comunicarse entre ellos)...un api capaz de usar los núcleos ociosos para las draw calls permitiría meter más geometría en ese mismo juego casi sin penalización (siempre que te sobre potencia de gpu claro)...a ver como viene directx12.

Enviado desde mi GT-I9100 mediante Tapatalk

darivo
15/04/2014, 19:07
Hola señores,
llevo un tiempo dándole vueltas a este concepto y no consigo llegar a comprenderlo al 100%. Veamos, lo primero sería ver la siguiente gráfica de rendimiento:


Hay un post en la sección CPU que considero ilustrativo:

Es muy sencillo, lo puedes comprobar usando el OSD del Riva Tuner (incluído en el EVGA Precision, MSI Afterburner...) configurado para que te muestre el uso de GPU y los fps. Ya de paso puedes poner el HwInfo configurado para que te indique el uso de cada core y si quieres también el uso total de CPU. La cosa es que mientras juegas tengas en pantalla la información relativa al uso de GPU, uso de cada core de la CPU y los fps.

Si notas que los fps bajan pues miras el uso de GPU y el uso de CPU. Si ves que la GPU está al 99% no hay duda, el cuello de botella es la GPU. Si resulta que te bajan los fps y el uso de GPU está por debajo de aproximadamente un 85-90% de GPU (si está al 90-95% puede haber picos que el programa no muestra pero que provocan bajones de fps) pues posiblemente el cuello sea la CPU. A partir de ahí ya hay diferentes grados cuando te bajan los fps y no tienes la GPU al 100%:

-Si uno de los cores está entre el 99-100% se trata de una limitación de ipc. La solución pasa o por hacer OC, cambiar a una CPU con mayor nivel de OC, mayor rendimiento/MHz o ambas cosas a la vez.
-Si varios cores están al 90-100% es el mismo caso que arriba pero seguramente el bajón de fps sea más pronunciado.
-Si todos los cores rondan el 90-100% hay una limitación simultánea de ipc y de número de núcleos. Probablemente se solucione poniendo una CPU que tenga un mayor número de núcleos, sean físicos o sean virtuales como el HT.

Ojo por que si tienes el V-Sync puesto y tu meta son los 60 fps estables se puede dar el caso de que uno de los cores esté supuestamente al 99-100%, la GPU por debajo del 90% y, aun así, sigas teniendo 60 fps estables. Digamos que hay un núcleo que está al límite pero no tanto como para comprometer los 60 fps (esto pasa por ejemplo en el AC4).

Lo que le pasa a POWER123 es simplemente que a 1080p le limita la CPU y a 1600p le limitan las GPUs, por eso el uso de CPU baja. Las drawacalls son eso, drawcalls, ordenes para pintar cosas en la pantalla (orden por parte de la CPU para que la GPU pinte triangulos basado en vértices situados en determinadas coordenadas en cierto estado), si resulta que tienes más pixeles que pintar y actualizar (más resolución) pues eso supone más tiempo de procesado por parte de la GPU y en lugar de ser la GPU la que espera a que la CPU termine de hacer lo suyo (para que esta última envié la siguiente drawcall o el siguiente grupo de drawcalls al command buffer) pues a alta resolución es al contrario, es la CPU la que tiene que esperar a la GPU.


Saludos

maceoneh
15/04/2014, 19:16
Ese es el tema, es un conjunto del TODO, por mucho Mantle que haya si la CPU no da para más, ya sea porque le falta potencia ya sea porque el proceso está mal optimizado los FPS caerán.