Polyteres escribió:Horizonte de sucesos escribió:Hasta que un día un buen hombre de la zona te dice que ratón y mariposa son el nombre de dos peces locales muy utilizados en la isla y que solo se cría en esos arrecifes. Y "Mi bicicleta por el aire" el nombre de la barca.
Entonces es cuando te das cuenta de que algo a lo que no le encontrabas sentido alguno adquiere un significado coherente y real.
Depende de la info que uno tiene, verá de una manera u otra las cosas.
Buenas gente. o me lo tomo con humor, o me piro de EOL, no me queda otra . Era un símil, elige el mas absurdo q puedas imaginar y aplícalo aquí.
Hay dos cosas q me sorprenden y no me gustan mucho. La primera es q cuando me paso por el hilo y escribo un par de mensajes siempre se forma un follón importante, salen 2 bandos, la gente se pelea...y q quereis que os diga, no me gusta nada. Es un hobby y hay q tomarlo como es.
Y la segunda es q parece q la mayoría de la gente q hay por aquí piensa q pq un hardware, el q sea me da igual, sea peor que otro todo lo q saque tenga q ser discreto gráficamente, o q no vaya a tener juegos realmente espectaculares.
Hace tiempo q os deberíais haber olvidado del hardware, y deberíais haber empezado a "preocuparos" por el software, los juegos. El problema está en el tejado de los desarrolladores, a ellos les corresponde lidiar con el hardware q hay y sacarle el mayor provecho.
Paz y amor y la consola pal salon.
Un saludo.
Grinch escribió:Pero vamos a ver. O sea que algunos son verdades absoluta y los demas iluminados por que algunos lo decis no ?.
Forzimbras escribió:Recopilación y conclusiones de lo que se venía debatiendo hasta que se dinamitó el topic con gilipolleces e idas de pelota varias:
-¿DirectX 12 tiene compatibilidad con One? Sí
-¿Es esa compatibilidad plena (100%)? También.
-¿Facilitará eso el porteo? Muchísimo (varios dev lo han corroborado en el mismo sentido).
-¿Están los componentes preparados para usar una versión completa de DX12? Sí, porque corrieron en desarrollos paralelos. El principal responsable de One, Boyd Multerer, ha hecho hincapié en que One se planificó pensando en la interacción de desarrollos PC-One, por lo que no se hace para nada tedioso, una vez disponibles las herramientas que DX 12 proporciona.
-¿Están las gráficas actuales preparadas para usar DX12 de manera nativa, por hard? No.
-¿Está preparada la gráfica de One para usar DX12 de manera nativa por hard? Sí.
-¿Qué modelo usa entonces la gráfica de One? Es confidencial. Pero sí puede decirse que uno muy personalizado y vanguardista..A lo que yo añadiría al debate:
-¿Puede estar influyendo en el rendimiento de los juegos actuales el hecho de que One esté tirando de desarrollos con una versión provisional de DX11? Y respondería que casi con toda probabilidad.
A ello le sumaría también el que a causa de DX11, solo 1 de las 8 CU's esté haciendo de "main" tirando de las demás, en lugar de lo que va a ocurrir en cuanto acoja DX12, momento en que las 8 podrán manejar procesamiento de manera simultánea, sin depender una de la otra ni tirar de las demás
framed escribió:El hombre sólo hace suposiciones. Creo que has sido tú mismo, Forzimbras, el que ha comentado antes que Microsoft no va a anunciar a los 4 vientos todo la tecnología que esté dentro de los chips que diseña (sólo lo que la ley obliga). Dejando de lado que esto era obvio, también impide que la gente tenga ni pajolera idea de lo que hay, así que sólo puede ir presentando teorías hasta que da con la buena. ¿Qué se monta pajas mentales? Por supuesto. Sólo faltaría. No hay más que mirar atrás y ver la cantidad de pajas mentales que se ha montado el ser humano hasta encontrar la respuesta adecuada (la tierra es el centro de todo, es plana, llueve porque dios lo quiere, el pelo crece más fuerte si te lo cortas, no dejas embarazada a una mujer según el alimento que comas, etc).
argam escribió:framed escribió:El hombre sólo hace suposiciones. Creo que has sido tú mismo, Forzimbras, el que ha comentado antes que Microsoft no va a anunciar a los 4 vientos todo la tecnología que esté dentro de los chips que diseña (sólo lo que la ley obliga). Dejando de lado que esto era obvio, también impide que la gente tenga ni pajolera idea de lo que hay, así que sólo puede ir presentando teorías hasta que da con la buena. ¿Qué se monta pajas mentales? Por supuesto. Sólo faltaría. No hay más que mirar atrás y ver la cantidad de pajas mentales que se ha montado el ser humano hasta encontrar la respuesta adecuada (la tierra es el centro de todo, es plana, llueve porque dios lo quiere, el pelo crece más fuerte si te lo cortas, no dejas embarazada a una mujer según el alimento que comas, etc).
Pero aqui ya entra en juego la paja mental que uno se puede hacer fundamentada en algo, o simplemente lanzar nombres tecnicos entremezclados con palabras biensonantes para que parezca algo mas. Pero claro, cuando eso lo lee alguien que sabe un poco del tema se da cuenta enseguida de lo que pasa.
Un saludo!
chris76 escribió:Papatuelo que intentaba desmontar polyteres nombrando la cantidad de rops?,es que ya me e perdido con tanto tema hoy
f5inet escribió:y ahora es cuando llega f5inet y suelta que bajo el nuevo paradigma DX12 usar ROPs no es necesario ya que se saturan en nada, y que han descubierto que es mas rapido meter el rasterizador en el SHADER que se ejecuta en los CU...
pagina 5: http://www.humus.name/Articles/Persson_ ... rGames.pdf
Antiguamente se dejaba a los ROPs escribir los resultados del shader en la VRAM para que el codigo a ejecutar por el shader fuese mas corto. Hoy dia, con la posibilidad que dan las arquitecturas GCN de shaders larguisimos, pueden meter la escritura a la VRAM dentro del mismo shader.
antiguamente, con el ROP, el shader (o el CU, si asi lo preferiis) quedaba 'congelado' hasta que los resultados se hubiesen escrito en la VRAM. Esto se hacia asi porque la VRAM que se solia montar solia tener MUCHA LATENCIA. si se pueden meter las escrituras dentro del shader, porque hay espacio dentro del shader, y el acceso a la VRAM no esta penalizado por latencia (fijese usted que casualidad, que tenemos unos fastuosos 32MB de rapidisima memoria eSRAM), los ROPs son INNECESARIOS.
pero vamos, algunos seguiran diciendo que 32ROPs es mejor que 16ROPs, que 64 son mejores que 32, y que la memoria RAM-BUS es mejor que la actual DDR3...
Polyteres escribió:papatuelo escribió:El foro está para eso, si no dice nada coherente explica por qué, eres libre de hacerlo. De hecho te lo agradeceríamos.
Buenas gente. @Horizonte de sucesos y @Forzimbras claro q tenía pensado comentar las cosillas que se dicen en ese mensaje pero a mi tb me gusta el fútbol ...
MEGATOCHO inside:Con respecto al tema en sí. Pq no dice nada coherente?. Para empezar pq muchas de las cosas no tienen sentido ni siquiera a nivel léxico. En algunas ocasiones he tenido que leer varias veces alguna frase pq no tenía ni idea a lo que se estaba refiriendo, por la mezcla de conceptos... es como si leyeras una traducción de Google. Me da la sensación que se limita a traducir lo que dice mixstermedia. Y ya entrando en materia hay cosas mezcladas, cosas sacadas de la manga, otras que son un disparate...
Por ejemplo:No sirve de nada extrapolar arquitectura actual con la de nuevo paradigma, evidentemente por un lado se requiere una optimización de ops/c pero eso es parte del actual GCN 1.0, son técnicas que se usan en C++ desde hace años y la optimización de microcódigo en GCN y a través de DX11.2 viene de ahí.
es q no se quiere decir . Habla de compiladores?. De operaciones por ciclo?. Pq mete C++?. Las GPUs de la generación de Xbox360/Ps3 eran muy sensibles al como se ejecutaban las distintas tareas, como empaquetaras ciertos datos, como usaras el paso de varibles entre los shaders, cuando leer una textura para ocultar latencias... Pero todo eso ha quedado atrás, en la arquitectura GCN no es necesario ser tan "tiquismiquis" con las instrucciones debido a como están diseñadas (con arquitecturas anteriores de AMD por ejemplo basadas en VLIW el como y donde poner las instrucciones era VITAL). No obstante todo esto se hace a nivel de hardware y driver.No deja de ser una mejora de la drawcall que aprovecha la optimización del CU dedicado a GPGPU en base a conceptos FPU.
En todo caso sería: no deja de ser una mejora en los drawcall que aprovechan la optimización de las CUs dedicadas a GPGPU en base a conceptos FPU. Pero es q esto...FPU (flotating point unit), en base a conceptos de FPU??? CUs dedicadas a GPGPU exclusivamente?.12CU simples no son capaces de paralelizar nada sólo con optimización de ops.
. Solo con esa frase te das cuenta de que lo que dice no tiene ni pies ni cabeza. Que tiene que ver la optimización a nivel de operaciones con la paralelización de diferente granularidad???.16 rops modificados = 64 rops antiguos
Las ROPs son ROPs, no han cambiado mucho a lo largo de los años pq no hay mucho que cambiar. Es funcionalidad fija dentro de una GPU y tienen un trabajo muy específico que no varía de una generación a otra. Esto está ya muy trillado y no hay practicamente ningún margen de mejora. Les llegan fragmentos de los fragment/pixels shaders, Z Cull, resuelven las transparencias, resuelven el AA y escriben el pixel resultante en su caché o lo envían a traves de su controlador de memoria a donde corresponda. La cantidad de pixeles que son capaces de escribir por segundo es siempre el mismo: numero de ROPs x frecuencia, eso no cambia nunca. No hay cambios revolucionarios entre saltos generacionales pq todo está mas o menos inventado.
Las ROPs suelen ser un factor limitante y se están buscando formas de no usarlas (por ejemplo usando un compute shaders que escribe directamente en memoria y no usa las ROPs), siempre es preferible que te sobren y estés limitado por el ancho de banda que te falten y estés limitado por ROPs (tendrías que bajar la resolución del buffer por ejemplo).1 F32 ACE = 32 ACE antiguo
Esto se lo saca directamente de la manga pq el lo vale.tratamiento por bloque del GPU
no se q quiere decir con esto.X1 son 4 bloques: 2 Gfx + 2 COmpute (en esquema. 2azul 2morado)
PS4 es 1 bloque (1 Gfx + 8 ACE)
No. Otra cosa sin sentido. Bloques, que bloques?. XboxOne no es la única q tiene 2 Command Graphics, Ps4 tb tiene 2 (no solo 1 como dice, uno de ellos es capaz de despachar solo gráficos, y el otro tanto gráficos como GPGPU), de distinta prioridad, pero como dije en su momento hace ya tiempo, uno de ellos se usa para el juego en si y el otro para el SO.Los ACE de XBox One no están en ACE's, es por eso que se le llaman "Compute CP" Haríais bien de mirar las diapositivas de Mike Mantor o la diapositiva "negra" que colgue yo de Bryan, para entender el concepto.
La nueva ACE está seleccionada en base al tratamiento del mapa HSA, hay que ver como el tratamiento del CU está dispuesto ahí puesto que la comunicación está dispuesta a través del thread, y no como parte grande del pool del CU, lo cual encaja con la visión e interpretación del hardware nativo DX12 a partir de las r9 300 y su encapsulado de datos.
Cada paquete de datos encapsulado son controlados por 1 hilo del CPU y el hilo de computo de XBox One para el CPU tal y como hemos dicho en otros post alcanza los 6 ops per core y puesto que son 8 Cores "modificados" AMD Jaguar x86-64, en 2 clusters de 4 cores con modificaciones en/y/hacia la memoria compartida y el ancho de banda, alcanzan 48 ops/c en total, 24 por hilo, 24 por cluster.
Entonces es sencillísimo extrapolar y estimar que el numero de CU eficiente es de al menos 24CU por cada unidad de Compute CP del CPU, 24 threads per Compute.
Todo esto es q directamente no es posible. Está mezclando cosas de hardware y software, no sabe como funciona a nivel interno una GPU, ni una API de alto nivel, ni un driver. Las cosas no funcionan así. La CPU escribe comandos en un command buffer, estos se le pasan a la GPU y los ejecuta como una niña/o bueno. Que uno o varios núcleos puedan escribir sus propios command buffer y enviarselos a la GPU como pretende DirectX12 por ejemplo (o hacen actualmente otras APIs ya) es una cosa y otra es q tu manejes las CUs con cada hebra de tu CPU, esto es un disparate y no es ni posible ni viable ni lógico. La GPU es un procesador altamente pararelo y necesita de mecanismos específicos para manejar dicho paralelismo, no te los puedes saltar pq es hardware y son necesarios para funcionar.
Por otra parte los núcleos Jaguar de la CPU son capaces de retirar como máximo 2 instrucciones por ciclo, si tienes 8 núcleos tienes 16 instrucciones como máximo por ciclo. Cambiar el número de instrucciones que retiras por ciclo o IPC es jodidamente difícil y viene determinado por la arquitectura en sí de la CPU. Si es Jaguar, q lo es, retira 2 por ciclo no hay más.No es solo optimizar las colas, no es solo optimizar el entendimiento per CU, no es tan sencillo y simple, XBox One tiene duplicados los CU, pero no toda la piscina, sólo dobla las áreas referentes al GPGPU y dejan la forma de calcular actualmente los cálculos de propósito general de lado y los ACE en XBox One ya no son ACE's propiamente dichos. Y es por eso por lo cual se necesitan 768 ALU's*2 y es por eso que MS sólo menciona 768 ALU's
XboxOne no tiene duplicadas las CU ni tiene el doble de ALUs divididas en gráficos y GPGPU primero pq la familia es Sea Island (dicho por ellos) y segundo pq no es una solución correcta. La tendencia es dar cada vez mas flexibilidad a las CUs y para ello tienes q hacerlas cada vez mas generales. Que pasa si mi juego, o yo como desarrollador no quiero usar GPGPU?. O quiero usar toda la potencia de la GPU para procesar gráficos?. Desperdiciar espacio en unas ALUs que no tengan acceso al pipeline gráfico o q no se puedan usar para procesar gráficos es una tontería. Dame una ALU/CU q yo decida para q la quiero usar. Es mejor tener 12 CUs q yo decida balancear y usar como me plazca q estar limitado por una división 6+6 pq de esa forma solo podré usar 6 CUs para hacer gráficos. Es similar a lo q vimos con los shader unificados o los específicos q tenian Xbox360 y Ps3 respectivamente.El GPGPU en XBox One es nativo DX12, paraleliza todos los CU
El GPGPU en PS4 es a través de solo 4CU dedicados fortalecidos por ACE's extra
X1 12GFX 12GPGPU se beneficia de la optimización por microcódigo sensible a nivel de hardware
PS4 14GFX 4GPGPU se beneficiará de cierta optimización por microcódigo sensible a nivel de software
Los CUs se "parelelizan" solitos. Pocos kernels en CUDA, compute shaders o kernels en OpenCL ha escrito este hombre. El resto no tiene sentido.
Un saludo.
Las ROPs son ROPs, no han cambiado mucho a lo largo de los años pq no hay mucho que cambiar. Es funcionalidad fija dentro de una GPU y tienen un trabajo muy específico que no varía de una generación a otra. Esto está ya muy trillado y no hay practicamente ningún margen de mejora. Les llegan fragmentos de los fragment/pixels shaders, Z Cull, resuelven las transparencias, resuelven el AA y escriben el pixel resultante en su caché o lo envían a traves de su controlador de memoria a donde corresponda. La cantidad de pixeles que son capaces de escribir por segundo es siempre el mismo: numero de ROPs x frecuencia, eso no cambia nunca. No hay cambios revolucionarios entre saltos generacionales pq todo está mas o menos inventado.
Las ROPs suelen ser un factor limitante y se están buscando formas de no usarlas (por ejemplo usando un compute shaders que escribe directamente en memoria y no usa las ROPs), siempre es preferible que te sobren y estés limitado por el ancho de banda que te falten y estés limitado por ROPs (tendrías que bajar la resolución del buffer por ejemplo).
papatuelo escribió:Sólo queda esperar, xq está claro que tu sabes de lo que hablas, pero creo que no sabes de lo que el habla.
Forzimbras escribió:Yo creo que aquí la verdad es que tampoco veo a nadie seguro de lo que dice. Más que nada porque, tal y como me han recordado, en este mismo hilo se saltó en un comienzo del "Xbox One no será compatible con DX12", pasando por el (una vez se confirmó que si lo era) "Xbox seguro que solo es compatible con DX12 por emulación", al (una vez confirmado que la compatibilidad iba por hard) "ya veremos".
El caso es que siempre tiene que haber algún "pero" para no admitir completamente nada.
Polyteres escribió:Forzimbras escribió:Yo creo que aquí la verdad es que tampoco veo a nadie seguro de lo que dice. Más que nada porque, tal y como me han recordado, en este mismo hilo se saltó en un comienzo del "Xbox One no será compatible con DX12", pasando por el (una vez se confirmó que si lo era) "Xbox seguro que solo es compatible con DX12 por emulación", al (una vez confirmado que la compatibilidad iba por hard) "ya veremos".
El caso es que siempre tiene que haber algún "pero" para no admitir completamente nada.
Buenas gente. Yo no he cambiado mi discurso.
Un saludo.
Polyteres escribió:Buenas gente. Con respecto al tema de las ROPs. Estaba respondiendo a lo que decía el mensaje que estábamos comentando sobre el 16 ROPs "nuevas" vs 64 ROPs antiguas.
Me autocito:Las ROPs son ROPs, no han cambiado mucho a lo largo de los años pq no hay mucho que cambiar. Es funcionalidad fija dentro de una GPU y tienen un trabajo muy específico que no varía de una generación a otra. Esto está ya muy trillado y no hay practicamente ningún margen de mejora. Les llegan fragmentos de los fragment/pixels shaders, Z Cull, resuelven las transparencias, resuelven el AA y escriben el pixel resultante en su caché o lo envían a traves de su controlador de memoria a donde corresponda. La cantidad de pixeles que son capaces de escribir por segundo es siempre el mismo: numero de ROPs x frecuencia, eso no cambia nunca. No hay cambios revolucionarios entre saltos generacionales pq todo está mas o menos inventado.
Las ROPs suelen ser un factor limitante y se están buscando formas de no usarlas (por ejemplo usando un compute shaders que escribe directamente en memoria y no usa las ROPs), siempre es preferible que te sobren y estés limitado por el ancho de banda que te falten y estés limitado por ROPs (tendrías que bajar la resolución del buffer por ejemplo).
Una cosa es eso, cosa que ya puntualizo en su momento y otra muy distinta prescindir de las ROPs. Ahora mismo con el hardware que hay (y en esto incluyo a XboxOne/Ps4 y PC y por bastante tiempo) es inviable implementar toda la funcionalidad fija de una GPU con trabajo GPGPU. Una GPU tiene un pipeline fijo, dividido en etapas por los que se tiene q pasar. Todo diseñado para ese fin, y de hecho lo hace de forma muy eficiente. Si usas por ejemplo un Compute Shader o un kernel de CUDA para implementar cualquier función no usas dicha funcionalidad fija y esto es un handicap. A parte de q hay ciertas funciones implementadas directamente en el hardware que se hacen de forma muy eficiente (el ZCull por ejemplo, la interpolación entre los distintos atributos, la rasterización...).
Dicho lo cual, y puesto q el número de ROPs siempre suele ser un factor limitante se están buscando ciertas formas de evitar este cuello de botella sobre aquellas operaciones que se presten a ello (que no todas), como por ejemplo la composición de la iluminación de un Deferred Rendering (Frostbite Engine) y efectos de post procesado.
Pero como digo esto es una cosa y otra decir que las ROPs son innecesarias.
Un saludo.
Qwertydhf escribió:Amén.
f5inet escribió:Deberias tener cuidado con lo que escribes, porque tienes cierto prestigio en este foro y textos como el que acabas de exponer te desautorizan completamente. Las GPUs dejaron de tener pipeline fijo desde la epoca de pixel y vertex Shaders, o para afinar mas, desde DirectX 8 y Windows XP (que ya ha llovido, epoca de la Geforce3 y Radeon 8500). De hecho, el driver/controlador de esas GPUs 'autocargan' un shader generico que EMULA el pipeline fijo que historicamente tenian dichas GPUs. es cuando el programador desea aplicar un efecto distinto al programado por el pipeline por defecto, cuando cargan el shader.
Como tu bien apuntas, las primeras tarjetas con shaders programables ERAN MAS LENTAS que sus homologas de pipeline fijo, ya que no es lo mismo ejecutar un programa, que tener el programa 'incrustado' en el silicio con microcodigo. Esto se acentuo aun mas con los shaders totalmente programables, como las tarjetas compatibles con DirectX10 (nVIdia Geforce 8000 y ATI HD2000), pero los shaders unificados permitian usar mas recursos del CU para transformaciones de pixeles o para transformaciones de vertices, permitiendo shaders aun mas flexibles.
Por supuesto, en toda esta carrera por pintar mas y mas pixeles de mundos 3D en pantalla, necesitaron memorias cada vez con mayor ancho de banda, capaz de cargar rapidamente en los CUs los shaders a ejecutar, leer los inputs, y sacar los resultados a VRAM. en esto, se empezaron a dar cuenta que, si escribian los datos a la VRAM tal como eran escupidos por el shader, la latencia de la VRAM mataba el rendimiento del shader. Asi que una optimizacion rapida era meter una memoria local al CU donde almacenar los datos, y que el ROP se encargara de volcar dichos datos a la VRAM. antiguamente, cada CU tenia su propio ROP. Luego, se dieron cuenta que mientras la CU esta computando el shader, el ROP esta ocioso, asi que en lugar de dedicar silicio a 1 ROP por cada 1CU, decidieron poner menos ROPs que CUs, y con el silicio que se ahorraban metian 1 o 2 CUs adicionales. Todo era felicidad y amor en aquella epoca: mientras mas CUs tuviese tu GPU, tus shaders podian ser mas complejos y la escena resultante podia ser mas bonita, y mientras mas ROPs tuviese tu GPU, mayor podia ser la resolucion.
Pero no olvidemos lo principal: los ROPs fueron UN PARCHE para enmascarar la altisima latencia de la VRAM. una VRAM con un ancho de banda bestial, a costa de una latencia altisima. La solucion ideal hubiese sido un enorme ancho de banda con una latencia bajisima, pero eso no existia en ese momento...
Hasta que llegaron los 32 nanometros, y los procesadores Intel SandyBridge con algunos i7 con 15MB de cache L3 dentro del DIE. Oh amigo... la memoria incrustada de altisimo ancho de banda y bajisima latencia ESTABA AQUI.
¿Y sabes que dejo de ser necesario? Los ROPs...
Si el propio Shader YA PUEDE ESCRIBIR el resultado de su computacion en la memoria incrustada sin penalizaciones, e incluso mas rapido que si delega ese trabajo a un ROP, dediquemos el silicio que tiene asignado esos ROPs a otra cosa, como... no se... ¿un controlador de memoria adicional que permita movimientos de datos dentro y fuera del micro, y los llamamos DME? hecho. ¿Metemos una tarjeta de sonido decente dentro y nos ahorramos comermos core y medio como en la epoca de la X360? me parece buena idea. ¿pero no seria buena idea dejar algun ROP, ya sabes... 'por si acaso'? si, dejemos alguno, seguro que alguien querra seguir programando a la antigua usanza, dejadle los justitos para que los ports de DX11 vayan a 720p, pero para DX12 ya sabeis, pasamos de ROPs y vamos a sacarle todo el jugo a este silicio...
f5inet escribió:Deberias tener cuidado con lo que escribes, porque tienes cierto prestigio en este foro y textos como el que acabas de exponer te desautorizan completamente. Las GPUs dejaron de tener pipeline fijo desde la epoca de pixel y vertex Shaders, o para afinar mas, desde DirectX 8 y Windows XP (que ya ha llovido, epoca de la Geforce3 y Radeon 8500). De hecho, el driver/controlador de esas GPUs 'autocargan' un shader generico que EMULA el pipeline fijo que historicamente tenian dichas GPUs. es cuando el programador desea aplicar un efecto distinto al programado por el pipeline por defecto, cuando cargan el shader.
Como tu bien apuntas, las primeras tarjetas con shaders programables ERAN MAS LENTAS que sus homologas de pipeline fijo, ya que no es lo mismo ejecutar un programa, que tener el programa 'incrustado' en el silicio con microcodigo. Esto se acentuo aun mas con los shaders totalmente programables, como las tarjetas compatibles con DirectX10 (nVIdia Geforce 8000 y ATI HD2000), pero los shaders unificados permitian usar mas recursos del CU para transformaciones de pixeles o para transformaciones de vertices, permitiendo shaders aun mas flexibles.
Por supuesto, en toda esta carrera por pintar mas y mas pixeles de mundos 3D en pantalla, necesitaron memorias cada vez con mayor ancho de banda, capaz de cargar rapidamente en los CUs los shaders a ejecutar, leer los inputs, y sacar los resultados a VRAM. en esto, se empezaron a dar cuenta que, si escribian los datos a la VRAM tal como eran escupidos por el shader, la latencia de la VRAM mataba el rendimiento del shader. Asi que una optimizacion rapida era meter una memoria local al CU donde almacenar los datos, y que el ROP se encargara de volcar dichos datos a la VRAM. antiguamente, cada CU tenia su propio ROP. Luego, se dieron cuenta que mientras la CU esta computando el shader, el ROP esta ocioso, asi que en lugar de dedicar silicio a 1 ROP por cada 1CU, decidieron poner menos ROPs que CUs, y con el silicio que se ahorraban metian 1 o 2 CUs adicionales. Todo era felicidad y amor en aquella epoca: mientras mas CUs tuviese tu GPU, tus shaders podian ser mas complejos y la escena resultante podia ser mas bonita, y mientras mas ROPs tuviese tu GPU, mayor podia ser la resolucion.
Pero no olvidemos lo principal: los ROPs fueron UN PARCHE para enmascarar la altisima latencia de la VRAM. una VRAM con un ancho de banda bestial, a costa de una latencia altisima. La solucion ideal hubiese sido un enorme ancho de banda con una latencia bajisima, pero eso no existia en ese momento...
Hasta que llegaron los 32 nanometros, y los procesadores Intel SandyBridge con algunos i7 con 15MB de cache L3 dentro del DIE. Oh amigo... la memoria incrustada de altisimo ancho de banda y bajisima latencia ESTABA AQUI.
¿Y sabes que dejo de ser necesario? Los ROPs...
Si el propio Shader YA PUEDE ESCRIBIR el resultado de su computacion en la memoria incrustada sin penalizaciones, e incluso mas rapido que si delega ese trabajo a un ROP, dediquemos el silicio que tiene asignado esos ROPs a otra cosa, como... no se... ¿un controlador de memoria adicional que permita movimientos de datos dentro y fuera del micro, y los llamamos DME? hecho. ¿Metemos una tarjeta de sonido decente dentro y nos ahorramos comermos core y medio como en la epoca de la X360? me parece buena idea. ¿pero no seria buena idea dejar algun ROP, ya sabes... 'por si acaso'? si, dejemos alguno, seguro que alguien querra seguir programando a la antigua usanza, dejadle los justitos para que los ports de DX11 vayan a 720p, pero para DX12 ya sabeis, pasamos de ROPs y vamos a sacarle todo el jugo a este silicio...
f5inet escribió: Hasta que llegaron los 32 nanometros, y los procesadores Intel SandyBridge con algunos i7 con 15MB de cache L3 dentro del DIE. Oh amigo... la memoria incrustada de altisimo ancho de banda y bajisima latencia ESTABA AQUI.
¿Y sabes que dejo de ser necesario? Los ROPs...
Si el propio Shader YA PUEDE ESCRIBIR el resultado de su computacion en la memoria incrustada sin penalizaciones, e incluso mas rapido que si delega ese trabajo a un ROP, dediquemos el silicio que tiene asignado esos ROPs a otra cosa, como... no se... ¿un controlador de memoria adicional que permita movimientos de datos dentro y fuera del micro, y los llamamos DME? hecho. ¿Metemos una tarjeta de sonido decente dentro y nos ahorramos comermos core y medio como en la epoca de la X360? me parece buena idea. ¿pero no seria buena idea dejar algun ROP, ya sabes... 'por si acaso'? si, dejemos alguno, seguro que alguien querra seguir programando a la antigua usanza, dejadle los justitos para que los ports de DX11 vayan a 720p, pero para DX12 ya sabeis, pasamos de ROPs y vamos a sacarle todo el jugo a este silicio...
Polyteres escribió:f5inet escribió:Deberias tener cuidado con lo que escribes, porque tienes cierto prestigio en este foro y textos como el que acabas de exponer te desautorizan completamente. Las GPUs dejaron de tener pipeline fijo desde la epoca de pixel y vertex Shaders, o para afinar mas, desde DirectX 8 y Windows XP (que ya ha llovido, epoca de la Geforce3 y Radeon 8500). De hecho, el driver/controlador de esas GPUs 'autocargan' un shader generico que EMULA el pipeline fijo que historicamente tenian dichas GPUs. es cuando el programador desea aplicar un efecto distinto al programado por el pipeline por defecto, cuando cargan el shader.
Como tu bien apuntas, las primeras tarjetas con shaders programables ERAN MAS LENTAS que sus homologas de pipeline fijo, ya que no es lo mismo ejecutar un programa, que tener el programa 'incrustado' en el silicio con microcodigo. Esto se acentuo aun mas con los shaders totalmente programables, como las tarjetas compatibles con DirectX10 (nVIdia Geforce 8000 y ATI HD2000), pero los shaders unificados permitian usar mas recursos del CU para transformaciones de pixeles o para transformaciones de vertices, permitiendo shaders aun mas flexibles.
Por supuesto, en toda esta carrera por pintar mas y mas pixeles de mundos 3D en pantalla, necesitaron memorias cada vez con mayor ancho de banda, capaz de cargar rapidamente en los CUs los shaders a ejecutar, leer los inputs, y sacar los resultados a VRAM. en esto, se empezaron a dar cuenta que, si escribian los datos a la VRAM tal como eran escupidos por el shader, la latencia de la VRAM mataba el rendimiento del shader. Asi que una optimizacion rapida era meter una memoria local al CU donde almacenar los datos, y que el ROP se encargara de volcar dichos datos a la VRAM. antiguamente, cada CU tenia su propio ROP. Luego, se dieron cuenta que mientras la CU esta computando el shader, el ROP esta ocioso, asi que en lugar de dedicar silicio a 1 ROP por cada 1CU, decidieron poner menos ROPs que CUs, y con el silicio que se ahorraban metian 1 o 2 CUs adicionales. Todo era felicidad y amor en aquella epoca: mientras mas CUs tuviese tu GPU, tus shaders podian ser mas complejos y la escena resultante podia ser mas bonita, y mientras mas ROPs tuviese tu GPU, mayor podia ser la resolucion.
Pero no olvidemos lo principal: los ROPs fueron UN PARCHE para enmascarar la altisima latencia de la VRAM. una VRAM con un ancho de banda bestial, a costa de una latencia altisima. La solucion ideal hubiese sido un enorme ancho de banda con una latencia bajisima, pero eso no existia en ese momento...
Hasta que llegaron los 32 nanometros, y los procesadores Intel SandyBridge con algunos i7 con 15MB de cache L3 dentro del DIE. Oh amigo... la memoria incrustada de altisimo ancho de banda y bajisima latencia ESTABA AQUI.
¿Y sabes que dejo de ser necesario? Los ROPs...
Buenas gente. Dudo que me desautoricen puesto q no he dicho ninguna barbaridad:
http://msdn.microsoft.com/en-us/library ... 82(v=vs.85).aspx
Un pipeline es una "tubería" dividida en etapas. En un pipeline gráfico actual hay etapas programables y otras no programables, pero este pipeline es fijo, es decir hay que seguir un orden en el procesamiento de los datos. Los datos entran por un extremo, se procesan en un orden determinado y acaban saliendo los resultados por el otro extremo. En el caso de un pipeline gráfico, los datos de entrada son los atributos de los vértices y los triángulos, y la salida es un pixel con sus atributos propios.
Tener un pipeline fijo no significa que este no sea programable, al menos parcialmente. Aún así dentro del pipeline gráfico hay etapas programables (vertex shader, geometry shader, hull shader, domain shader, pixel shader) y otras que no lo son, son fijas inmutables y el programador no puede hacer nada pq so fijas, aún a día de hoy (el procesado de geometría/input assembler, la rasterización, el ZCull, Zbuffer, tesselator stage, todo lo que tiene que ver con las ROPs...).
Te has confundido con los shaders programables, no tiene nada que ver con lo que yo había dicho.
Las ROPs no fueron un parche para nada, ni mucho menos. Las ROPs llevan en las GPUs desde el principio, de hecho las primeras tarjetas no eran mas que simples rasterizadores. Las ROPs hacen muchas mas funciones que solo escribir datos en memoria, las transparencias por ejemplo se hacen aquí, el MSAA tb... Quítale ROPs a una GPU y verás como sufre a la hora de trabajar con transparencias, o verás como sufre tu GPU para renderizar una sombra xD.
La optimización más lógica y barata para evitar una latencia, y la usada por los diseñadores, es usar cachés dentro de las ROPs (en este caso dos distintas una para el color y otra para el valor z). De hecho, si profundizamos un poco más... habría formas de renderizar ciertos elementos (partículas por ejemplo) de forma que optimices la caches de las ROPs pero esto es profundizar mucho mucho mas y no viene a cuento.Si el propio Shader YA PUEDE ESCRIBIR el resultado de su computacion en la memoria incrustada sin penalizaciones, e incluso mas rapido que si delega ese trabajo a un ROP, dediquemos el silicio que tiene asignado esos ROPs a otra cosa, como... no se... ¿un controlador de memoria adicional que permita movimientos de datos dentro y fuera del micro, y los llamamos DME? hecho. ¿Metemos una tarjeta de sonido decente dentro y nos ahorramos comermos core y medio como en la epoca de la X360? me parece buena idea. ¿pero no seria buena idea dejar algun ROP, ya sabes... 'por si acaso'? si, dejemos alguno, seguro que alguien querra seguir programando a la antigua usanza, dejadle los justitos para que los ports de DX11 vayan a 720p, pero para DX12 ya sabeis, pasamos de ROPs y vamos a sacarle todo el jugo a este silicio...
Si quieres saltarte las ROPs debes usar un Compute Shader. Si usas un compute shader no tienes acceso al pipeline fijo de la GPU (las etapas no programables de las que hablaba antes, por lo que por ejemplo tendrás que rasterizar de forma manual...), las cuales hacen un trabajo muy específico y de forma muy eficiente. Si te quitas esto y no lo usas tendrás que hacerlo todo tu (la cosa se empieza a complicar), por lo que quemarás muchos ciclos en esto. A parte tendrás que hilar muy fino en el compute shader para usar bien las memorias compartidas entre las CUs, las caches, y la memoria LDS y sobre todo empezar a usar barreras a punta pala para que la cosa te vaya medio en condiciones...si es q lo consigues.
A dia de hoy tener un rasterizador completo en un Compute Shader es inviable. Lo máximo q se ha llegado, de forma comercial, es ha implementar un Zbuffer a una resolución muy baja para realizar culling (Frostbite Engine).
Si tienes unos shaders "sencillos" puede que llegues a estar limitado por el número de ROPs. Que se considera un shader sencillo?. Todos aquellos q tengan pocas instrucciones, como por ejemplo los efectos de post procesado, o incluso la composición de la iluminación de un deferred rendering. De este tipo de operaciones si se beneficia el puentear las ROPs y por eso los efectos de postprocesado se programan con un Compute Shader...lo q he dicho antes.
Las ROPs no son unidades demasiado grandes como para tener que quitarlas para ahorrar espacio. El número de ROPs va muy de la mano del número de CUs que tengas, y del número de controladores de memoria y el ancho del bus de la memoria.
Un saludo.
kamikaze2052 escribió:f5inet escribió: Hasta que llegaron los 32 nanometros, y los procesadores Intel SandyBridge con algunos i7 con 15MB de cache L3 dentro del DIE. Oh amigo... la memoria incrustada de altisimo ancho de banda y bajisima latencia ESTABA AQUI.
¿Y sabes que dejo de ser necesario? Los ROPs...
Si el propio Shader YA PUEDE ESCRIBIR el resultado de su computacion en la memoria incrustada sin penalizaciones, e incluso mas rapido que si delega ese trabajo a un ROP, dediquemos el silicio que tiene asignado esos ROPs a otra cosa, como... no se... ¿un controlador de memoria adicional que permita movimientos de datos dentro y fuera del micro, y los llamamos DME? hecho. ¿Metemos una tarjeta de sonido decente dentro y nos ahorramos comermos core y medio como en la epoca de la X360? me parece buena idea. ¿pero no seria buena idea dejar algun ROP, ya sabes... 'por si acaso'? si, dejemos alguno, seguro que alguien querra seguir programando a la antigua usanza, dejadle los justitos para que los ports de DX11 vayan a 720p, pero para DX12 ya sabeis, pasamos de ROPs y vamos a sacarle todo el jugo a este silicio...
Y yo pregunto ¿por que las empresas especialistas en tarjetas gráficas siguen usando los ROPs en su hardware de ultima generación?
Nvidia Titan Black http://www.anandtech.com/show/7765/nvidias-geforce-gtx-titan-black-no-compromises-for-gaming-compute
Radeon R9 290xhttp://www.anandtech.com/show/7457/the-radeon-r9-290x-review
Polyteres escribió:f5inet escribió:Deberias tener cuidado con lo que escribes, porque tienes cierto prestigio en este foro y textos como el que acabas de exponer te desautorizan completamente. Las GPUs dejaron de tener pipeline fijo desde la epoca de pixel y vertex Shaders, o para afinar mas, desde DirectX 8 y Windows XP (que ya ha llovido, epoca de la Geforce3 y Radeon 8500). De hecho, el driver/controlador de esas GPUs 'autocargan' un shader generico que EMULA el pipeline fijo que historicamente tenian dichas GPUs. es cuando el programador desea aplicar un efecto distinto al programado por el pipeline por defecto, cuando cargan el shader.
Como tu bien apuntas, las primeras tarjetas con shaders programables ERAN MAS LENTAS que sus homologas de pipeline fijo, ya que no es lo mismo ejecutar un programa, que tener el programa 'incrustado' en el silicio con microcodigo. Esto se acentuo aun mas con los shaders totalmente programables, como las tarjetas compatibles con DirectX10 (nVIdia Geforce 8000 y ATI HD2000), pero los shaders unificados permitian usar mas recursos del CU para transformaciones de pixeles o para transformaciones de vertices, permitiendo shaders aun mas flexibles.
Por supuesto, en toda esta carrera por pintar mas y mas pixeles de mundos 3D en pantalla, necesitaron memorias cada vez con mayor ancho de banda, capaz de cargar rapidamente en los CUs los shaders a ejecutar, leer los inputs, y sacar los resultados a VRAM. en esto, se empezaron a dar cuenta que, si escribian los datos a la VRAM tal como eran escupidos por el shader, la latencia de la VRAM mataba el rendimiento del shader. Asi que una optimizacion rapida era meter una memoria local al CU donde almacenar los datos, y que el ROP se encargara de volcar dichos datos a la VRAM. antiguamente, cada CU tenia su propio ROP. Luego, se dieron cuenta que mientras la CU esta computando el shader, el ROP esta ocioso, asi que en lugar de dedicar silicio a 1 ROP por cada 1CU, decidieron poner menos ROPs que CUs, y con el silicio que se ahorraban metian 1 o 2 CUs adicionales. Todo era felicidad y amor en aquella epoca: mientras mas CUs tuviese tu GPU, tus shaders podian ser mas complejos y la escena resultante podia ser mas bonita, y mientras mas ROPs tuviese tu GPU, mayor podia ser la resolucion.
Pero no olvidemos lo principal: los ROPs fueron UN PARCHE para enmascarar la altisima latencia de la VRAM. una VRAM con un ancho de banda bestial, a costa de una latencia altisima. La solucion ideal hubiese sido un enorme ancho de banda con una latencia bajisima, pero eso no existia en ese momento...
Hasta que llegaron los 32 nanometros, y los procesadores Intel SandyBridge con algunos i7 con 15MB de cache L3 dentro del DIE. Oh amigo... la memoria incrustada de altisimo ancho de banda y bajisima latencia ESTABA AQUI.
¿Y sabes que dejo de ser necesario? Los ROPs...
Buenas gente. Dudo que me desautoricen puesto q no he dicho ninguna barbaridad:
http://msdn.microsoft.com/en-us/library ... 0;v=vs.85).aspx
Un pipeline es una "tubería" dividida en etapas. En un pipeline gráfico actual hay etapas programables y otras no programables, pero este pipeline es fijo, es decir hay que seguir un orden en el procesamiento de los datos. Los datos entran por un extremo, se procesan en un orden determinado y acaban saliendo los resultados por el otro extremo. En el caso de un pipeline gráfico, los datos de entrada son los atributos de los vértices y los triángulos, y la salida es un pixel con sus atributos propios.
Tener un pipeline fijo no significa que este no sea programable, al menos parcialmente. Aún así dentro del pipeline gráfico hay etapas programables (vertex shader, geometry shader, hull shader, domain shader, pixel shader) y otras que no lo son, son fijas inmutables y el programador no puede hacer nada pq so fijas, aún a día de hoy (el procesado de geometría/input assembler, la rasterización, el ZCull, Zbuffer, tesselator stage, todo lo que tiene que ver con las ROPs...).
Te has confundido con los shaders programables, no tiene nada que ver con lo que yo había dicho.
Las ROPs no fueron un parche para nada, ni mucho menos. Las ROPs llevan en las GPUs desde el principio, de hecho las primeras tarjetas no eran mas que simples rasterizadores. Las ROPs hacen muchas mas funciones que solo escribir datos en memoria, las transparencias por ejemplo se hacen aquí, el MSAA tb... Quítale ROPs a una GPU y verás como sufre a la hora de trabajar con transparencias, o verás como sufre tu GPU para renderizar una sombra xD.
La optimización más lógica y barata para evitar una latencia, y la usada por los diseñadores, es usar cachés dentro de las ROPs (en este caso dos distintas una para el color y otra para el valor z). De hecho, si profundizamos un poco más... habría formas de renderizar ciertos elementos (partículas por ejemplo) de forma que optimices la caches de las ROPs pero esto es profundizar mucho mucho mas y no viene a cuento.Si el propio Shader YA PUEDE ESCRIBIR el resultado de su computacion en la memoria incrustada sin penalizaciones, e incluso mas rapido que si delega ese trabajo a un ROP, dediquemos el silicio que tiene asignado esos ROPs a otra cosa, como... no se... ¿un controlador de memoria adicional que permita movimientos de datos dentro y fuera del micro, y los llamamos DME? hecho. ¿Metemos una tarjeta de sonido decente dentro y nos ahorramos comermos core y medio como en la epoca de la X360? me parece buena idea. ¿pero no seria buena idea dejar algun ROP, ya sabes... 'por si acaso'? si, dejemos alguno, seguro que alguien querra seguir programando a la antigua usanza, dejadle los justitos para que los ports de DX11 vayan a 720p, pero para DX12 ya sabeis, pasamos de ROPs y vamos a sacarle todo el jugo a este silicio...
Si quieres saltarte las ROPs debes usar un Compute Shader. Si usas un compute shader no tienes acceso al pipeline fijo de la GPU (las etapas no programables de las que hablaba antes, por lo que por ejemplo tendrás que rasterizar de forma manual...), las cuales hacen un trabajo muy específico y de forma muy eficiente. Si te quitas esto y no lo usas tendrás que hacerlo todo tu (la cosa se empieza a complicar), por lo que quemarás muchos ciclos en esto. A parte tendrás que hilar muy fino en el compute shader para usar bien las memorias compartidas entre las CUs, las caches, y la memoria LDS y sobre todo empezar a usar barreras a punta pala para que la cosa te vaya medio en condiciones...si es q lo consigues.
A dia de hoy tener un rasterizador completo en un Compute Shader es inviable. Lo máximo q se ha llegado, de forma comercial, es ha implementar un Zbuffer a una resolución muy baja para realizar culling (Frostbite Engine).
Si tienes unos shaders "sencillos" puede que llegues a estar limitado por el número de ROPs. Que se considera un shader sencillo?. Todos aquellos q tengan pocas instrucciones, como por ejemplo los efectos de post procesado, o incluso la composición de la iluminación de un deferred rendering. De este tipo de operaciones si se beneficia el puentear las ROPs y por eso los efectos de postprocesado se programan con un Compute Shader...lo q he dicho antes.
Las ROPs no son unidades demasiado grandes como para tener que quitarlas para ahorrar espacio. El número de ROPs va muy de la mano del número de CUs que tengas, y del número de controladores de memoria y el ancho del bus de la memoria.
Un saludo.
f5inet escribió:Polyteres escribió:f5inet escribió:Deberias tener cuidado con lo que escribes, porque tienes cierto prestigio en este foro y textos como el que acabas de exponer te desautorizan completamente. Las GPUs dejaron de tener pipeline fijo desde la epoca de pixel y vertex Shaders, o para afinar mas, desde DirectX 8 y Windows XP (que ya ha llovido, epoca de la Geforce3 y Radeon 8500). De hecho, el driver/controlador de esas GPUs 'autocargan' un shader generico que EMULA el pipeline fijo que historicamente tenian dichas GPUs. es cuando el programador desea aplicar un efecto distinto al programado por el pipeline por defecto, cuando cargan el shader.
Como tu bien apuntas, las primeras tarjetas con shaders programables ERAN MAS LENTAS que sus homologas de pipeline fijo, ya que no es lo mismo ejecutar un programa, que tener el programa 'incrustado' en el silicio con microcodigo. Esto se acentuo aun mas con los shaders totalmente programables, como las tarjetas compatibles con DirectX10 (nVIdia Geforce 8000 y ATI HD2000), pero los shaders unificados permitian usar mas recursos del CU para transformaciones de pixeles o para transformaciones de vertices, permitiendo shaders aun mas flexibles.
Por supuesto, en toda esta carrera por pintar mas y mas pixeles de mundos 3D en pantalla, necesitaron memorias cada vez con mayor ancho de banda, capaz de cargar rapidamente en los CUs los shaders a ejecutar, leer los inputs, y sacar los resultados a VRAM. en esto, se empezaron a dar cuenta que, si escribian los datos a la VRAM tal como eran escupidos por el shader, la latencia de la VRAM mataba el rendimiento del shader. Asi que una optimizacion rapida era meter una memoria local al CU donde almacenar los datos, y que el ROP se encargara de volcar dichos datos a la VRAM. antiguamente, cada CU tenia su propio ROP. Luego, se dieron cuenta que mientras la CU esta computando el shader, el ROP esta ocioso, asi que en lugar de dedicar silicio a 1 ROP por cada 1CU, decidieron poner menos ROPs que CUs, y con el silicio que se ahorraban metian 1 o 2 CUs adicionales. Todo era felicidad y amor en aquella epoca: mientras mas CUs tuviese tu GPU, tus shaders podian ser mas complejos y la escena resultante podia ser mas bonita, y mientras mas ROPs tuviese tu GPU, mayor podia ser la resolucion.
Pero no olvidemos lo principal: los ROPs fueron UN PARCHE para enmascarar la altisima latencia de la VRAM. una VRAM con un ancho de banda bestial, a costa de una latencia altisima. La solucion ideal hubiese sido un enorme ancho de banda con una latencia bajisima, pero eso no existia en ese momento...
Hasta que llegaron los 32 nanometros, y los procesadores Intel SandyBridge con algunos i7 con 15MB de cache L3 dentro del DIE. Oh amigo... la memoria incrustada de altisimo ancho de banda y bajisima latencia ESTABA AQUI.
¿Y sabes que dejo de ser necesario? Los ROPs...
Buenas gente. Dudo que me desautoricen puesto q no he dicho ninguna barbaridad:
http://msdn.microsoft.com/en-us/library ... 0;v=vs.85).aspx
Un pipeline es una "tubería" dividida en etapas. En un pipeline gráfico actual hay etapas programables y otras no programables, pero este pipeline es fijo, es decir hay que seguir un orden en el procesamiento de los datos. Los datos entran por un extremo, se procesan en un orden determinado y acaban saliendo los resultados por el otro extremo. En el caso de un pipeline gráfico, los datos de entrada son los atributos de los vértices y los triángulos, y la salida es un pixel con sus atributos propios.
Tener un pipeline fijo no significa que este no sea programable, al menos parcialmente. Aún así dentro del pipeline gráfico hay etapas programables (vertex shader, geometry shader, hull shader, domain shader, pixel shader) y otras que no lo son, son fijas inmutables y el programador no puede hacer nada pq so fijas, aún a día de hoy (el procesado de geometría/input assembler, la rasterización, el ZCull, Zbuffer, tesselator stage, todo lo que tiene que ver con las ROPs...).
Te has confundido con los shaders programables, no tiene nada que ver con lo que yo había dicho.
Las ROPs no fueron un parche para nada, ni mucho menos. Las ROPs llevan en las GPUs desde el principio, de hecho las primeras tarjetas no eran mas que simples rasterizadores. Las ROPs hacen muchas mas funciones que solo escribir datos en memoria, las transparencias por ejemplo se hacen aquí, el MSAA tb... Quítale ROPs a una GPU y verás como sufre a la hora de trabajar con transparencias, o verás como sufre tu GPU para renderizar una sombra xD.
La optimización más lógica y barata para evitar una latencia, y la usada por los diseñadores, es usar cachés dentro de las ROPs (en este caso dos distintas una para el color y otra para el valor z). De hecho, si profundizamos un poco más... habría formas de renderizar ciertos elementos (partículas por ejemplo) de forma que optimices la caches de las ROPs pero esto es profundizar mucho mucho mas y no viene a cuento.Si el propio Shader YA PUEDE ESCRIBIR el resultado de su computacion en la memoria incrustada sin penalizaciones, e incluso mas rapido que si delega ese trabajo a un ROP, dediquemos el silicio que tiene asignado esos ROPs a otra cosa, como... no se... ¿un controlador de memoria adicional que permita movimientos de datos dentro y fuera del micro, y los llamamos DME? hecho. ¿Metemos una tarjeta de sonido decente dentro y nos ahorramos comermos core y medio como en la epoca de la X360? me parece buena idea. ¿pero no seria buena idea dejar algun ROP, ya sabes... 'por si acaso'? si, dejemos alguno, seguro que alguien querra seguir programando a la antigua usanza, dejadle los justitos para que los ports de DX11 vayan a 720p, pero para DX12 ya sabeis, pasamos de ROPs y vamos a sacarle todo el jugo a este silicio...
Si quieres saltarte las ROPs debes usar un Compute Shader. Si usas un compute shader no tienes acceso al pipeline fijo de la GPU (las etapas no programables de las que hablaba antes, por lo que por ejemplo tendrás que rasterizar de forma manual...), las cuales hacen un trabajo muy específico y de forma muy eficiente. Si te quitas esto y no lo usas tendrás que hacerlo todo tu (la cosa se empieza a complicar), por lo que quemarás muchos ciclos en esto. A parte tendrás que hilar muy fino en el compute shader para usar bien las memorias compartidas entre las CUs, las caches, y la memoria LDS y sobre todo empezar a usar barreras a punta pala para que la cosa te vaya medio en condiciones...si es q lo consigues.
A dia de hoy tener un rasterizador completo en un Compute Shader es inviable. Lo máximo q se ha llegado, de forma comercial, es ha implementar un Zbuffer a una resolución muy baja para realizar culling (Frostbite Engine).
Si tienes unos shaders "sencillos" puede que llegues a estar limitado por el número de ROPs. Que se considera un shader sencillo?. Todos aquellos q tengan pocas instrucciones, como por ejemplo los efectos de post procesado, o incluso la composición de la iluminación de un deferred rendering. De este tipo de operaciones si se beneficia el puentear las ROPs y por eso los efectos de postprocesado se programan con un Compute Shader...lo q he dicho antes.
Las ROPs no son unidades demasiado grandes como para tener que quitarlas para ahorrar espacio. El número de ROPs va muy de la mano del número de CUs que tengas, y del número de controladores de memoria y el ancho del bus de la memoria.
Un saludo.
Me gusta ese razonamiento. Estoy de acuerdo con algunas cosas, pero no con otras, y veo inutil intentar defender mi postura porque veo que tienes la tuya muy definida y no te veo por la labor de cambiar tu argumentario. No importa, puedo vivir con eso. al fin y al cabo, creo que nuestra diferencia principal es semantica, y tu entiendes como 'shader' cosas que yo no entiendo como tales.
Pero si hemos llegado a una conclusion. hemos coincidido que en GPUs antiguas, si cambiabas el shader 'por defecto' para cargar el tuyo propio, el rendimiento de la GPU tendia a caer en picado porque tenia que calcular cosas para las cuales no estaba 'microprogramada'. Bien. Esto se acabo con la generacion GCN de AMD. Oye, pero no hace falta que lo diga yo, supongo que una slide de la GamesDevelopersConference de 2014 tendra mas autoridad:
supongo que el 'bypass ROPs with compute shaders' habla por si mismo...
pero puesto que el slide no tiene autor, y podeis argumentar que ese tipo es un tontolaba, unos slides de ¡2009! de EpicGames tendran mas autoridad aun...
http://graphics.cs.williams.edu/archive ... PG2009.pdf
del cual, los slides 25 y 27 son PODEROSAMENTE llamativos:
echaros un vistazo tambien al slide 34 (Future Graphics: Software Tiled Rendering)
Y no tengo nada mas que objetar, señoria!!!
f5inet escribió:Me gusta ese razonamiento. Estoy de acuerdo con algunas cosas, pero no con otras, y veo inutil intentar defender mi postura porque veo que tienes la tuya muy definida y no te veo por la labor de cambiar tu argumentario. No importa, puedo vivir con eso. al fin y al cabo, creo que nuestra diferencia principal es semantica, y tu entiendes como 'shader' cosas que yo no entiendo como tales.
Pero si hemos llegado a una conclusion. hemos coincidido que en GPUs antiguas, si cambiabas el shader 'por defecto' para cargar el tuyo propio, el rendimiento de la GPU tendia a caer en picado porque tenia que calcular cosas para las cuales no estaba 'microprogramada'. Bien. Esto se acabo con la generacion GCN de AMD. Oye, pero no hace falta que lo diga yo, supongo que una slide de la GamesDevelopersConference de 2014 tendra mas autoridad:
supongo que el 'bypass ROPs with compute shaders' habla por si mismo...
pero puesto que el slide no tiene autor, y podeis argumentar que ese tipo es un tontolaba, unos slides de ¡2009! de EpicGames tendran mas autoridad aun...
http://graphics.cs.williams.edu/archive ... PG2009.pdf
del cual, los slides 25 y 27 son PODEROSAMENTE llamativos:
echaros un vistazo tambien al slide 34 (Future Graphics: Software Tiled Rendering)
Y no tengo nada mas que objetar, señoria!!!
darksch escribió:Si tengo que dar mi opinión de lo que vengo leyendo, me parece que el "fallo" de Polyteres es que sólo considera el caso actual que él mismo conoce, es decir a lo que él mismo usa (que será seguramente PC).
Polyteres escribió:[...]El slice que has puesto, si tiene autor. Es Emil Persson, jefe de i+D de Avalanche Studios. Antes hiciste referencia a él, es el famoso Humus3D. Lo q dice en ese papers es lo mismo que llevo yo repitiendo desde que empezó la conversación. Si tienes shaders que tienen muy pocas instrucciones es probable que satures las ROPs pq provocan un cuello de botella en el hardware (hay pocas y les llegan muchas peticiones de las CUs). Puedo saltarme las ROPs?. Si, usa un compute shader para escribir directamente en memoria pero...si uso un Compute Shader no podré tener acceso a ciertos elementos del pipeline gráfico que son vitales para mi. Ok...cuales son esos shaders con pocas instrucciones?. Los shaders de post procesado. Esos se adaptan bien a la estructura de un Compute Shader?. Sip, ok adelante.
Puedo implementar a día de hoy, con la potencia que tengo, un rasterizador software en la GPU mediante GPGPU?. No al menos al nivel que deseo.
[...]
de momento dejo una foto del die de una R9 290X, una tarjeta de la familia VolcanicIslands
Vaya... esa disposicion de los shaders me recuerda algo...
f5inet escribió:o sea, que la discusion que traemos es por tu crees que XboxONE no posee la potencia necesaria para implementar un rasterizador por 'software' en la GPU via GPGPU y yo creo que si.
Tu defiendes el uso de los ROPs porque con la potencia actual no se podria desarrollar un shader programable que realize el mismo todo el proceso de rasterizacion, y es mejor seguir usando la tecnologia y el know-how actual.
Yo defiendo que no se deben usar los ROPs porque la tecnologia y la arquitectura ha llegado un nivel suficiente para implementar dicho rasterizador por software y obtener aun mas rendimiento que con el pipeline fijo.
basicamente es eso, ¿no? bueno, pues ya veremos quien tiene razon al final... y todo dependera de si la GPU de la XboxONE esta basada al 100% en SeaIslands o 'coge prestada' algunas de las nuevas caracteristicas de PirateIslands...