Entendiendo a Moore. Entendiendo a XboxOne. Dirext 12

Gran comunidad de el otro lado. Entendidos en la materia.
¿Alguien que explique cuanto de credibilidad y de cierto tiene este articulo?

No busco crear una guerra, solo aprender sobre este futuro Dirext 12 que al parecer lo revolucionara todo.

Dejo el LINK
http://one.somosxbox.com/entendiendo-a-moore-entendiendo-a-xbox-one/

Un saludo.
A ver, las direct x son un conjunto de librerías que utilizan los desarrolladores para comunicarse con el hardware a bajo nivel. Antes se programaba en ensamblador y eso era un horror, porque si querías, yo que se, reproducir un sonido, tenias que escribir la funcion tu y así con todo y dependía del hardware para el que estuvieras programando, así que imaginate las palizas que se pegaban los desarrolladores para hacer cualquier cosa.

con Windows la cosa cambio y ahora habían muchos procesadores diferentes, placas bases, etc , así que los de MS se inventaron las directx, para quitar mas trabajo a los programadores (y de paso vender mas Windows)

Con cada versión de directx se introducian mejoras y se metían efectos nuevos, lo que le venia muy bien a MS y a los fabricantes de gráficas para vender tarjetas nuevas.
El problema de usar estas librerías es que se pierde rendimiento bruto

lo que nos lleva al punto actual. AMD saca mantle para trabajar mas directamente con el hardware (como se hacia antes) y ganar rendimiento, lo que hace que los juegos se vean mejor y vayan mas rápidos con hardware inferior y mas barato, pero claro se supone que estas librerías son tanto para Windows como para Linux y MS ha tenido que correr para presentar las directx 12, que hacen mas o menos lo que mantle, pero mas estandarizado (mantle es solo para AMD)

debido a esto todas las gráficas directx11 son compatibles con directx12, porque realmente son solo una optimización, no soportan efectos nuevos por hardware ni nada de eso

todo esto hablando del ordenador. Ahora vamos a las consolas.
Para que sirve que sean compatibles con directx12? Absolutamente para nada! En PC necesitas tener *algo* entre tu como desarrollador y el hardware porque hay infinidad de gráficas, de GPU, de CPU...
en consola no tienes ese problema porque si programas para Xbox solo hay un tipo de CPU, de tarjeta de red, de mando, etc...no necesitas unas librerías porque tu mismo puedes optimizar esas librerías para explotar mas el hardware... todo es un entorno cerrado

bueno me ha salido un poco largo y no se si me he explicado bien, pero mas o menos la idea es esa. Directx 12 para una consola es marketing y ya esta. Lo único que se me ocurre que puede valer es para poder hacer ports a PC mas rápidos
Por partes....

Si, la Ley de Moore no es "inacabable", simplemente hay límites materiales, y estamos mas o menos cerca, al menos con el silicio.

Por otro lado, Microsoft no ha inventado ningún SOC ni leches... la CPU de la XBOX es de Intel si no recuerdo mal, la de la XBOX360 es un Power PC de IBM, y el de la One es de AMD, así que eso de que "han desarrollado"... si seguro...

La cuestión, es que curiosamente MS son los creadores del DX (Direct-X) que son las API´s usadas para acceder a las funciones de las gráficas... que usan tanto AMD como NVdia como Intel llegado el caso.

La verdad es que el artículo es bastante pomposo y rimbombante, y no dice en realidad nada. La GPU de la XBOX es una versión de una GPU desarrollada para PC´s... así de simple. Pretender ahora que "magicamente con DX-12" van a comerse el mundo es vender humo

Mas que nada, porque la gráfica de la PS4 es del mismo fabricante, y se basa exactamente en el mismo chip, pero algo mas potente, y podría ejecutar ese mismo DX-12, que en realidad se supone sería una reescritura de las APIs para permitir llamadas mas "directas" al hardware.

Que se dejen de vender humo... su hardware es menos potente (no mucho, un poco que narices) y lo que haga un hardware puede hacerlo otro, las diferencias son pequeñas.

Otro tema es que con su obsesión por recortar y aumentar beneficios la hayan cagado de mas de una forma

Básicamente... y cito

XBox One es el único dispositivo a la venta con completo soporte hacia DX12 de forma nativa.


No se decir hasta que punto hay variaciones sobre el diseño original de la serie 7000 de AMD que se ha usado para el desarrollo de la One, pero básicamente es el equivalente a una AMD 7790... punto

Vamos, que diría que mienten a gusto en ese aspecto, porque ese chip es DX-11. Si DX-12 va a funcionar sobre cualquier hardware DX-11... lo hará igualmente sobre PC y sobre la PS4

Humo humo.... y nubes
Gracias a los 2 y a vuestra buena expresión escrita. xD

De veras, me ha quedado muy claro. Gracias.
Algunas aclaraciones.

Direct3D12 [D3D12] es la API especifica de la que estan hablando respecto al entorno de render 3D. Las consolas tambien usan APIs y bibliotecas, claro que optimizadas para el hardware especifico de la consola.

hilo_direct3d-12-en-win8-y-gpus-direct3d-11_1993730
La verdad es que a veces da gusto leer algunos comentarios.

Gracias chicos.
Orbatos_II escribió:
XBox One es el único dispositivo a la venta con completo soporte hacia DX12 de forma nativa.


No se decir hasta que punto hay variaciones sobre el diseño original de la serie 7000 de AMD que se ha usado para el desarrollo de la One, pero básicamente es el equivalente a una AMD 7790... punto

Vamos, que diría que mienten a gusto en ese aspecto, porque ese chip es DX-11. Si DX-12 va a funcionar sobre cualquier hardware DX-11... lo hará igualmente sobre PC y sobre la PS4

Humo humo.... y nubes


La gpu de 360 fue la primera en tener shaders unificados, asi porque no podria ser que la gpu de One fuese la primera en tener soporte completo por hardware DX12.

Por otra parte la gpu de One no es una ''7790''

http://www.3djuegos.com/comunidad-foros/tema/29860552/0/rompiendo-las-reglas-rompiendo-el-mito-el-poder-real-de-xbox-one/

Una foto de un CU de One y PS4, tan solo hay que contar y multiplicar por el numero de CU's (12 y 18 respectivamente)
Imagen

1536 Shaders tiene la gpu de One por los 896 de la 7790, si que coinciden en el numero de ROPS, 16 para ambas.
Aportando más info a los comentarios, con DX12 se reduce el uso del CPU ya que hay menos llamadas hacia este, para la consola viene genial dado que tiene 8 nucleos con pesimo IPC y corriendo a muy baja velocidad, en PC será algo así como Mantle; con un i7 Last Gen no verás ganancia, pero si en los CPU's de gama baja/media.

Salu2 - Darkness Knight
DaNi_0389 escribió:
Orbatos_II escribió:
XBox One es el único dispositivo a la venta con completo soporte hacia DX12 de forma nativa.


No se decir hasta que punto hay variaciones sobre el diseño original de la serie 7000 de AMD que se ha usado para el desarrollo de la One, pero básicamente es el equivalente a una AMD 7790... punto

Vamos, que diría que mienten a gusto en ese aspecto, porque ese chip es DX-11. Si DX-12 va a funcionar sobre cualquier hardware DX-11... lo hará igualmente sobre PC y sobre la PS4

Humo humo.... y nubes


La gpu de 360 fue la primera en tener shaders unificados, asi porque no podria ser que la gpu de One fuese la primera en tener soporte completo por hardware DX12.

Por otra parte la gpu de One no es una ''7790''

http://www.3djuegos.com/comunidad-foros/tema/29860552/0/rompiendo-las-reglas-rompiendo-el-mito-el-poder-real-de-xbox-one/

Una foto de un CU de One y PS4, tan solo hay que contar y multiplicar por el numero de CU's (12 y 18 respectivamente)
Imagen

1536 Shaders tiene la gpu de One por los 896 de la 7790, si que coinciden en el numero de ROPS, 16 para ambas.

Exacto, el chip no es en esencia la gpu de una 7790, pero viene a rendir lo que esta (en concreto como una 7790 OC GDDR5 lo haría en un entorno cerrado y bien optimizado). Vamos, que se encuentra más cómoda a 720 por mucho shader que tenga, de rops flaquea, la ram unificada no da la misma tasa que una gddr5 aunque puede que tenga mejores accesos, y la frecuencia no es tampoco la misma que la gráfica de escritorio (esto no recuerdo como quedara, 850/860 y algo).
DaNi_0389 escribió:
Orbatos_II escribió:
XBox One es el único dispositivo a la venta con completo soporte hacia DX12 de forma nativa.


No se decir hasta que punto hay variaciones sobre el diseño original de la serie 7000 de AMD que se ha usado para el desarrollo de la One, pero básicamente es el equivalente a una AMD 7790... punto

Vamos, que diría que mienten a gusto en ese aspecto, porque ese chip es DX-11. Si DX-12 va a funcionar sobre cualquier hardware DX-11... lo hará igualmente sobre PC y sobre la PS4

Humo humo.... y nubes


La gpu de 360 fue la primera en tener shaders unificados, asi porque no podria ser que la gpu de One fuese la primera en tener soporte completo por hardware DX12.

Por otra parte la gpu de One no es una ''7790''

http://www.3djuegos.com/comunidad-foros/tema/29860552/0/rompiendo-las-reglas-rompiendo-el-mito-el-poder-real-de-xbox-one/

Una foto de un CU de One y PS4, tan solo hay que contar y multiplicar por el numero de CU's (12 y 18 respectivamente)
Imagen

1536 Shaders tiene la gpu de One por los 896 de la 7790, si que coinciden en el numero de ROPS, 16 para ambas.



Esto no lo acabo de entender.
Decir que paralelamente a las dirext, está OPENGL. Se usa en Windows/Linux/Mac, Videoconsolas y en cualquier otro dispositivo movil. Es un estándar para los gráficos.

Pero ya se sabe como es windows para saltarse los estandares... De ahí salió las direcxt.

the_gooseman escribió:lo que nos lleva al punto actual. AMD saca mantle para trabajar mas directamente con el hardware (como se hacia antes) y ganar rendimiento, lo que hace que los juegos se vean mejor y vayan mas rápidos con hardware inferior y mas barato, pero claro se supone que estas librerías son tanto para Windows como para Linux y MS ha tenido que correr para presentar las directx 12, que hacen mas o menos lo que mantle, pero mas estandarizado (mantle es solo para AMD)

Tengo mis dudas. Ten en cuenta que las funciones de Directx son implementadas por los drivers del fabricante en una gran medida.

the_gooseman escribió:Para que sirve que sean compatibles con directx12? Absolutamente para nada! En PC necesitas tener *algo* entre tu como desarrollador y el hardware porque hay infinidad de gráficas, de GPU, de CPU...

La CPU es irrelevante aquí, todos los procesadores de windows usan/son compatibles con la arquitectura x86.

the_gooseman escribió:no necesitas unas librerías porque tu mismo puedes optimizar esas librerías para explotar mas el hardware... todo es un entorno cerrado

Dudo que un juego de consola actual se haga en ensamblador. Lo más probable esque use un motor gráfico o las SDK del fabricante (que no deja de ser otra librería).
he puesto cpu para que se entendiera el ejemplo. ahora son todas mas o menos iguales, pero antes tenias cpus diferentes. de todas maneras aunque sean compatibles con x86-x64 hay diferencias, como numero de nucleos, velocidades, buses...

ahora no se hacen en ensamblador ni mucho menos. creo que no me he explicado bien, pero estaba con la tablet y me resultaba dificil escribir

en los sdk de las consolas estan las librerias para que el programador no se tengan que complicar la vida en hacer cosas simples, pero de esta misma manera, un equipo de desarrollo que quiera exprimir el hardware puede reescribir parte de esas librerias atacando la maquina a bajo nivel. evidentemente no lo van a hacer todos, pero los equipos que mas exploten la maquina lo acabaran haciendo sobre todo cuando avance la generacion

luego entre equipos de desarrollo pueden pasarse parte de ese codigo para optimizar los juegos. recuerdo que naughty dog compartio informacion de desarrollo de uncharted con sucker punch para realizar infamous 2

con esto quiero decir que al principio el empujon viene de parte de los fabricantes de las consolas, que son los que ponen el sdk (que incluye tanto librerias como informacion a bajo nivel del hardware) pero luego son los propios estudios los que modifican las librerias para hacerlas mas eficientes

esto en PC no se puede hacer porque no puedes atacar la maquina a bajo nivel, porque tienes muchas graficas diferentes, muchas tarjetas de red, etc, y por eso necesitas un standard. opengl o direct3d-directx3d en el caso de graficos, pero las directx no son solo graficos

Tengo mis dudas. Ten en cuenta que las funciones de Directx son implementadas por los drivers del fabricante en una gran medida.


esto no lo he entendido. a que te refieres?
the_gooseman escribió:he puesto cpu para que se entendiera el ejemplo. ahora son todas mas o menos iguales, pero antes tenias cpus diferentes. de todas maneras aunque sean compatibles con x86-x64 hay diferencias, como numero de nucleos, velocidades, buses...

Bueno esque todo eso es transparente para el programador.

Bueno con un pero, y esque si sabes que el procesador tendrá muchos nucleos. Puede interesarte usar hilos (programación concurrente). Si es un procesador mononúcleo, no tiene sentido emplear hilos porque no vas a conseguir que vayan simultaneos (aunque ir irá, ya se encarga el SO de irlos turnando).

the_gooseman escribió:en los sdk de las consolas estan las librerias para que el programador no se tengan que complicar la vida en hacer cosas simples, pero de esta misma manera, un equipo de desarrollo que quiera exprimir el hardware puede reescribir parte de esas librerias atacando la maquina a bajo nivel. evidentemente no lo van a hacer todos, pero los equipos que mas exploten la maquina lo acabaran haciendo sobre todo cuando avance la generacion

No estoy de acuerdo, quien mejor conoce el hardware es el mismo fabricante. Y es el que mejor optimizará las api para trabajar de la mejor forma posible.

La unica forma de aprovecharlo mejor sería programar en esamblador algunas partes (pero dudo que se haga).

the_gooseman escribió:
Tengo mis dudas. Ten en cuenta que las funciones de Directx son implementadas por los drivers del fabricante en una gran medida.


esto no lo he entendido. a que te refieres?

Como tu has dicho, hay miles de gráficas diferentes. Directx se ayuda de los drivers que da el fabricante (nadie conoce mejor el hardware que su fabricante).

Quizás no debería haber dicho "en gran medida" pero los drivers se comen el trabajo de más bajo nivel.
El SDK, o herramientas de desarrollo, de Mantle, Direct3D12 y OpenGL4.x precisamente permite al programador optimizar el uso de multihilos, personalizar la prioridad de como se manejaran esos multiples hilos, etc.con lo que el programador no se preocupa tanto del hardware [CPU] sobre el que va a correr el motor del juego. El fabricante del GPU [amd o envidia o intel para la PC] se encarga de que sus controladores sigan las instrucciones que les entrega la API grafica [mantle, Direct3D u opengl] usada en la creacion del motor del juego y convierta esas instrucciones -llamesmosle- "genericas" a intrucciones y funciones muy especificas del GPU que tiene la PC.
Frankijdc escribió:
DaNi_0389 escribió:
La gpu de 360 fue la primera en tener shaders unificados, asi porque no podria ser que la gpu de One fuese la primera en tener soporte completo por hardware DX12.

Por otra parte la gpu de One no es una ''7790''

http://www.3djuegos.com/comunidad-foros/tema/29860552/0/rompiendo-las-reglas-rompiendo-el-mito-el-poder-real-de-xbox-one/

Una foto de un CU de One y PS4, tan solo hay que contar y multiplicar por el numero de CU's (12 y 18 respectivamente)
Imagen

1536 Shaders tiene la gpu de One por los 896 de la 7790, si que coinciden en el numero de ROPS, 16 para ambas.



Esto no lo acabo de entender.


Que es lo que no entiendes?
TRASTARO escribió:El SDK, o herramientas de desarrollo, de Mantle, Direct3D12 y OpenGL4.x precisamente permite al programador optimizar el uso de multihilos, personalizar la prioridad de como se manejaran esos multiples hilos, etc.con lo que el programador no se preocupa tanto del hardware [CPU] sobre el que va a correr el motor del juego

Creo que confundes API/SDK con motores gráficos como el Unity.

OpenGL solo te permite dibujar desde un hilo al mismo tiempo (context thread-specific), no tiene una opción de "optimizar el uso de multihilos". Otra cosa esque tú te crees hilos de ejecución para precargar/preparar recursos, procesar eventos, renderizar...
Me parece que debes informarte mas sobre lo que pretenden las APIs actuales [mantle muestra la idea] para el aprovechamiento de los recursos del CPU, y en como ayudan los SDKs a que los programadores puedan tomar ventaja de las capacidades multihilo y poder disminuir -preferentemente desaparecer- el cuello de botella CPU-GPU. En OpenGL tambien se esta dando un cambio a ese rumbo, solo que por la falta de formalidad esta algo dispersa la implementacion en los kits de desarrollo.
the_gooseman escribió:No estoy de acuerdo, quien mejor conoce el hardware es el mismo fabricante. Y es el que mejor optimizará las api para trabajar de la mejor forma posible.
La unica forma de aprovecharlo mejor sería programar en esamblador algunas partes (pero dudo que se haga).

pues esa es la cosa, yo creo que con estudios importantes first party (hablaba de naughty dog en sony pero en xbox pasa lo mismo), si que hay un "feedback" entre los desarrolladores y los fabricantes. en los SDK esta especificado todo el comportamiento de la maquina, y probablemente para segun que cosas si que se trabaje a bajo nivel para poder exprimir el potencial del hardware. esta es la gracia del hardware cerrado de las consolas, cosas que no puedes hacer en pc.
evidentemente EA, UBI o cualquier third no se va a poner a trabajar tan a bajo nivel, esto solo lo van a hacer las first (y con reservas). con los progresos que hacen las first se mejoran los SDK para que las aprovechen las demas compañias.
anda que no tuvieron que sufrir los desarrolladores a principios de ps3, que se tuvieron que programar ellos mismos las herramientas de desarrollo, porque el SDK daba pena [boing]
TRASTARO escribió:Me parece que debes informarte mas sobre lo que pretenden las APIs actuales [mantle muestra la idea] para el aprovechamiento de los recursos del CPU, y en como ayudan los SDKs a que los programadores puedan tomar ventaja de las capacidades multihilo y poder disminuir -preferentemente desaparecer- el cuello de botella CPU-GPU. En OpenGL tambien se esta dando un cambio a ese rumbo, solo que por la falta de formalidad esta algo dispersa la implementacion en los kits de desarrollo.

Yo no he dicho eso que esté trabajando en mejorar la concurrencia, a lo que me refiero esque la API no hace todo eso automatico. El trabajo de los hilos sigue siendo del programador, lo unico que está cambiando son los mecanismos de sincronización:
The basic idea behind multithreading in Direct3D 11 is that you create an immediate device context on the main thread. Then, for each thread on which you’d like to be able to render, you create a deferred context. As you can probably guess from the names, commands executed on the immediate context get executed immediately, but those on the deferred context just get saved off into a command list. You then execute the deferred command lists on the main thread using the immediate device context.

http://www.rorydriscoll.com/2009/04/21/ ... threading/

Que dicho en castellano, Direct 11 permite al programador renderizar desde varios hilos de ejecución a la vez. Pero corresponde al programador crear los hilos de ejecución y distribuir el trabajo segun lo que quiera hacer.

Crear los hilos de ejecución no es problema. El problema es ¿se debe usar 4 hilos de ejecución si el cliente luego tiene 2 núcleos? ¿Estamos acelerando para los que tienen mejor hardware y ralentizando a los que tienen peor? ¿Hacemos un diseño dinámico que cree tantos hilos como núcleo tenga el cliente y reparta la tarea en consencuencia? Mucho trabajo de diseño si queremos que quede bien-bien (eso explica que muchos juegos usen solo 2 núcleos, como por ejemplo Starcraft 2).

Lo más normal es usar motores gráficos y a correr. Que sean los creadores de los motores los que se peleen con las API xD
DaNi_0389 escribió:
Frankijdc escribió:
DaNi_0389 escribió:
La gpu de 360 fue la primera en tener shaders unificados, asi porque no podria ser que la gpu de One fuese la primera en tener soporte completo por hardware DX12.

Por otra parte la gpu de One no es una ''7790''

http://www.3djuegos.com/comunidad-foros/tema/29860552/0/rompiendo-las-reglas-rompiendo-el-mito-el-poder-real-de-xbox-one/

Una foto de un CU de One y PS4, tan solo hay que contar y multiplicar por el numero de CU's (12 y 18 respectivamente)
Imagen

1536 Shaders tiene la gpu de One por los 896 de la 7790, si que coinciden en el numero de ROPS, 16 para ambas.



Esto no lo acabo de entender.


Que es lo que no entiendes?

Sharders?
Shaders, Stream Processors o ALU's se les puede llamar de estas formas y hacen calculos arimeticos y logicos, al trabajar de forma paralela pues cuantos mas shaders tenga una grafica pues mas rendimiento tendra.


Alguien que sepa del tema te podra aclarar mejor las dudas, porque yo llego hasta aqui [+risas] [+risas]
amchacon escribió:Yo no he dicho eso que esté trabajando en mejorar la concurrencia, a lo que me refiero esque la API no hace todo eso automatico. El trabajo de los hilos sigue siendo del programador, lo unico que está cambiando son los mecanismos de sincronización:



¿Y donde dije que la API por si sola lo haga?, por algo puse:

TRASTARO escribió:
El SDK, o herramientas de desarrollo, de Mantle, Direct3D12 y OpenGL4.x precisamente permite al programador optimizar el uso de multihilos, personalizar la prioridad de como se manejaran esos multiples hilos, etc.


Precisamente porque estos nuevos kits de desarrollo le permiten al programador esta tarea, mediante subrutinas e instrucciones nuevas al API para mejorar el procesamiento multihilo, distribuir de la mejor manera que el programador establezca la prioridad de tareas del motor grafico y asi tener el mayor control sobre como trabaja sobre el hardware en que se este ejecutando. Eso es lo mas interesante de Mantle y de D3D12, no solo el API, sino las herramientas y hasta la forma de planear el desarrollo del software.

Tambien, la misma manera de programar aprovecha la escalaridad, es decir, se ajusta a la cantidad de nucleos del sistema donde se ejecute, con instrucciones como AVX o FMA, ya usadas en los encoders de video, con un ejemplo claro en el encoder x264 que se ajusta a la cantidad de nucleos presentes con un maximo de hasta 16. Asi de esta manera, el encoder saca el maximo provecho multihilo a lo que le permita el procesador usado.

Los nuevos motores graficos aprovecharan esta capacidad de escalibilidad en el CPU, que junto con la ayuda de las nuevas APIs y las herramientas de desarrollo haran posible esa primera promesa: Reducir al minimo el cuello de botella CPU-GPU. De hecho Unreal Engine 3 -no se diga el 4- y el Cry Engine reciente son algunos de los motores que comenzaron con esta idea de aprovechar lo mejor posible lo que los fabricantes de procesadores ofrecen y ahora que mantle/d3d12/opengl4.x tambien dan una evolucion para la manera de programar con el GPU pues mejor.
TRASTARO escribió:
amchacon escribió:Yo no he dicho eso que esté trabajando en mejorar la concurrencia, a lo que me refiero esque la API no hace todo eso automatico. El trabajo de los hilos sigue siendo del programador, lo unico que está cambiando son los mecanismos de sincronización:



¿Y donde dije que la API por si sola lo haga?, por algo puse:

TRASTARO escribió:El SDK, o herramientas de desarrollo, de Mantle, Direct3D12 y OpenGL4.x precisamente permite al programador optimizar el uso de multihilos, personalizar la prioridad de como se manejaran esos multiples hilos, etc.

Esque para mi: Mantle, Direct y OpenGL son APIS. No kits de desarrollo.

Unity 3D sería un motor gráfico o un kit de desarrollo.

TRASTARO escribió:Precisamente porque estos nuevos kits de desarrollo le permiten al programador esta tarea, mediante subrutinas e instrucciones nuevas al API para mejorar el procesamiento multihilo, distribuir de la mejor manera que el programador establezca la prioridad de tareas del motor grafico y asi tener el mayor control sobre como trabaja sobre el hardware en que se este ejecutando. Eso es lo mas interesante de Mantle y de D3D12, no solo el API, sino las herramientas y hasta la forma de planear el desarrollo del software.

Bueno habrá que esperar a que salga D3D12 y Mantle para ver como implementan todo lo que han prometido.

Pero lo de la "prioridad de tareas" lo veo raro, el concepto de "tareas de baja prioridad" me resulta extraño en un videojuego (todo tiene que estar preparado para lanzar el frame).

TRASTARO escribió:Tambien, la misma manera de programar aprovecha la escalaridad, es decir, se ajusta a la cantidad de nucleos del sistema donde se ejecute, con instrucciones como AVX o FMA, ya usadas en los encoders de video, con un ejemplo claro en el encoder x264 que se ajusta a la cantidad de nucleos presentes con un maximo de hasta 16. Asi de esta manera, el encoder saca el maximo provecho multihilo a lo que le permita el procesador usado.

¿Instrucciones AVX? :-? No estamos trabajando en ensamblador sino en un lenguaje compilado.

Si quieres saber cuantos núcleos tiene un procesador no hay que liarla tanto. Simplemente se lo preguntas a windows usando las Windows API:
int getNumNucleos(){
SYSTEM_INFO sysinfo;
GetSystemInfo( &sysinfo );
return sysinfo.dwNumberOfProcessors;
}


Y ala, esa función que nos hemos creado nos devolverá el número de núcleos que tiene el sistema. Independientemente del procesador que tenga el usuario (o pueda tener en un futuro).
¡Ay que humanidad!

Efectivamente Mantle, D3D12 y OpenGL son APIs, y estas APIs incorporan estructuras para mejorar el rendimiento multihilo del CPU para el manejo de datos e instrucciones que enviara al GPU, y los SDK permiten al desarrollador comenzar a usar y entender esta nueva forma de trabajo que proponen estas APIs para incorporarlas en sus motores graficos, aparte de que como ya dije, en el desarrollo del motor del juego pueden emplear instrucciones AVX o FMA para usar tantos nucleos de CPU tengamos en la PC de la mejor manera posible, con lo que se podran distribuir las tareas que realize el motor: mandar al GPU, realizar los calculos del sistema de fisica, los datos y procesos de la inteligencia artificial y todo lo que deba de realizar.

Por eso te repito, lee lo que estan haciendo con Mantle y su SDK y otras herramientas de desarrollo, ya que D3D12 debe hacer algo muy similar para optimizar el multihilo y poder priorizar que debe hacerse primero en el CPU antes de enviar ordenes al GPU.

Olvidate de D3D11 y como trabaja, ya que el tema es lo nuevo que proponen con mantle y d3d12. Lo mismo, esta por demas de hablar de Unity

Y en serio, no te confundas tu mismo, primero lee y documentate. AVX/FMA desde hace años se usa en los compiladores de intel, AMD y del software libre. el encoder x264 fue el primero en usar estos compiladores que aprovechan AVX/FMA y poder aprovechar mejor todos los nucleos que encuentre.
El problema está en paralelizar. Paralelizar en un códec de vídeo es lo más sencillo del mundo, mandas a cada uno de los 2-4-8-16-32 núcleos a renderizar un frame diferente y ale. Tienes 32 núcleos? pues 32 frames a la vez a codificar y listo.

El tema está en paralelizar a la hora de realizar drawcalls (llamadas a dibujo que la CPU hace a la GPU) que es a lo que se van a limitar DX12 y a lo que se dedica mantle. Paralelizar las llamadas a dibujo es algo más complejo que coger un frame por cada núcleo del que disponga tu procesador o las últimas instrucciones que le ayudan a ser más rápido en X tareas (que no todas) como son las AVX.
¨
Paralelizar unas cosas es completamente diferente que otras. Unas son mucho más simples de hacer y otras ... no tanto.
Como te he dicho, voy a esperarme a ver como lo han implementado :)

KailKatarn escribió:Paralelizar las llamadas a dibujo es algo más complejo que coger un frame por cada núcleo del que disponga tu procesador o las últimas instrucciones que le ayudan a ser más rápido en X tareas (que no todas) como son las AVX.

El mayor problema esque el juego es secuencial. Para dibujar el siguiente frame necesitas el anterior. Por lo cual ya no puedes dvidirlo por frames como en el renderizado de un video.

A esto hay que sumarle que en el renderizado de un video, no se dibuja en pantalla, en los videojuegos sí, por lo que necesitas hacer un acceso sincronizado a la gpu (al parecer, esto es lo que intenta mantle y dIrectx12).
Pero ahora que las consolas One y PS4 usan procesadores x86-64 de hasta 8 nucleos; y no sera tarea facil, pero le dedicaran mas esfuerzos a exprimir esos nucleos en todas las tareas posibles que realiza la consola, con lo que los juegos multisistema que salgan tambien para PC aprovecharan tambien mejor estas instrucciones vectoriales AVX/FMA, o lo que sea necesario para este trabajo en paralelo de hilos. Y ese es el gran cambio de las APIs actuales, empezando por Mantle, seguida por D3D12 y OpenGL 4.3/4.4, y ese es precismante el punto de interes, y que nos beneficiara a quienes jugamos en PC, con juegos mas GPU dependientes y que incluso con procesadores modestos le sacaran el maximo rendimiento a la capacidad grafica del GPU que usemos.

Hay que esperar y ver que nos muestra el primer juego que use D3D12 y poderlo comparar con lo que hasta ahora a mostrado Mantle, e igual ver como a evolucionado o no, Mantle para ese dia.

Ahora, otro punto de estas nuevas APIs, ¿que pasara con la API DirectCompute del paquete DX12?, tambien dara una evolucion pensando que ya hay GPUs con uso de la memoria universal y compartida en los sistemas HSA, en la que el GPU y CPU pueden acceder a la memoria RAM para trabajar en conjunto con los mismos datos de manera mas eficaz. ¿La aprovecharan mas los desarrolladores de motores de simulacion de fisica?, p.e. Havock, o ¿porque no, integrar el uso de DirectCompute en el mismo motor del juego?, ya sea para la simulacion de la fisica creada por el mismo desarrollador del juego, o incluso la puedan usar para la Inteligencia artificial u otras cosas dentro del juego.
26 respuestas