2010-07-29 18 views

Respuesta

4

Depende de lo que llame compartir.

En general, puede crear 2 procesos que crean un dispositivo OpenCL en la misma GPU. Es entonces la responsabilidad del controlador/OS/GPU de asegurarse de que las cosas funcionen.

Dicho esto, la mayoría de las implementaciones cortarán en el tiempo la ejecución de la GPU para que esto suceda (al igual que sucede con los gráficos).

Creo que esto no es exactamente lo que buscas. ¿Puedes ampliar tu pregunta con un caso de uso?

+0

El caso de uso sería un proceso único que utiliza OpenCL para utilizar la GPU durante un largo período de tiempo. Si se lanza otro proceso OpenCL que también requiere la GPU, ¿cómo se maneja? Su respuesta sugiere que el controlador dividirá el tiempo, es decir, asignará toda la GPU a un proceso en un momento dado. Sin duda, esto es ineficiente, dado que los datos asociados con cada proceso deben copiarse hacia atrás y hacia adelante entre el dispositivo y el host. – Chris

+0

@Chris: la respuesta corta es que no se deben copiar todos los datos. la ejecución tiene un límite de tiempo, pero la memoria puede permanecer compartida, si ambas encajan en la tarjeta (la memoria está "virtualizada". Consulte la siguiente URL). Si no se ajusta, copiará los datos con seguridad. La granularidad de la división temporal también es gruesa. Suponiendo que estamos hablando de Windows, en WDDM 1.1, nunca se interrumpe la ejecución de un núcleo CL, y más. Consulte http://en.wikipedia.org/wiki/Windows_Display_Driver_Model para obtener más información. – Bahbar

+0

En particular: http://download.microsoft.com/download/5/b/9/5b97017b-e28a-4bae-ba48-174cf47d23cd/PRI103_WH06.ppt – Bahbar

4

Las GPU actuales (excepto Fermi de NVidia) no admiten la ejecución simultánea de más de un kernel. Además, hasta la fecha las GPU no son compatibles con la multitarea preventiva; ¡es completamente cooperativo! La ejecución de un kernel no se puede suspender y continuar más adelante. Por lo tanto, la granularidad de cualquier intercambio de GPU basado en el tiempo depende de los tiempos de ejecución de los kernels.

Si tiene programas múltiples en ejecución que requieren acceso GPU, debe, por tanto, asegurarse de que sus granos tienen tiempos de ejecución cortos (< 100ms es una regla de oro), de manera que el tiempo de la GPU puede timesliced ​​entre los núcleos que quieren ciclos de GPU . También es importante hacerlo, ya que, de lo contrario, los gráficos del sistema host dejarán de responder porque también necesitan acceso a la GPU. Esto puede ir tan lejos que un kernel en un bucle infinito o largo aparentemente bloqueará el sistema.

Cuestiones relacionadas