2012-10-07 16 views
5

Estoy un poco confundido acerca de cómo funciona exactamente la copia cero.Ruta de acceso en Copia cero en OpenCL

1- Quiere confirmar que lo siguiente corresponde a copia cero en opencl.

....................... 
.   .   . 
.   .   . 
.   . CPU  . 
. SYSTEM .   . 
. RAM . c3 X . 
.   <=====>  . 
...|................... 
    PCI-E // 
    |  // 
c2 |X  /PCI-E, CPU directly accessing GPU memory 
    | //       copy c3, c2 is avoided, indicated by X. 
...|...././................ 
. MEMORY<====>   . 
. OBJECT .c1   . 
.   .  GPU  . 
. GPU RAM .    . 
.   .    . 
........................... 




....................... 
.   .   . 
.   .   . 
.   . CPU . 
.SYSTEM RAM .   . 
.   .   . 
.   . c3  . 
. MEMORY<====>  .   
...| OBJECT............ 
    |  \ \ 
    PCI-E \ \PCI-E, GPU directly accessing System memory. copy c2, c1 is avoided 
    |  \ \ 
C2 |X  \ \ 
...|.........\..\........... 
. |  .    . 
.  <=======>   . 
. GPU c1 X GPU  . 
. RAM  .    . 
.   .    . 
............................ 

La GPU/CPU está accediendo al sistema/GPU-RAM directamente, sin copia explícita.

2-¿Cuál es la ventaja de tener esto? PCI-e todavía está limitando el ancho de banda en general. O la única ventaja es que podemos evitar las copias c2 & c1/c3 en situaciones anteriores?

Respuesta

13

Tiene razón en su comprensión de cómo funciona la copia cero. La premisa básica es que puede acceder a la memoria del host desde el dispositivo o desde la memoria del dispositivo desde el host sin necesidad de realizar un paso intermedio de almacenamiento intermedio.

Puede realizar copia cero mediante la creación de memorias intermedias con las siguientes banderas:

CL_MEM_AMD_PERSISTENT_MEM //Device-Resident Memory 
CL_MEM_ALLOC_HOST_PTR // Host-Resident Memory 

A continuación, se puede acceder a las memorias intermedias utilizando la semántica de asignación de memoria:

void* p = clEnqueueMapBuffer(queue, buffer, CL_TRUE, CL_MAP_WRITE, 0, size, 0, NULL, NULL, &err); 
//Perform writes to the buffer p 
err = clEnqueueUnmapMemObject(queue, buffer, p, 0, NULL, NULL); 

Uso de copia cero se podía ser capaz de lograr el rendimiento en una implementación que hizo lo siguiente:

  1. Copie un archivo a un buff de host er
  2. Copia búfer al dispositivo

lugar que podría hacerlo todo en un solo paso

  1. memoria tampón en el lado del dispositivo Mapa
  2. archivo
  3. Copia del anfitrión al dispositivo de memoria
  4. Unmap

En algunas implementaciones, las llamadas de asignación y desinstalación pueden ocultar th e costo de la transferencia de datos. Al igual que en nuestro ejemplo,

  1. memoria tampón en el lado del dispositivo Mapa [En realidad crea un búfer del host del mismo tamaño]
  2. Copiar archivo del anfitrión al dispositivo [escribe realidad en el búfer del host]
  3. memoria Unmap [en realidad copia datos de anfitrión-buffer a dispositivo de memoria intermedia a través de clEnqueueWriteBuffer]

Si la aplicación está realizando de esta manera, entonces no habrá ningún beneficio de usar el método de asociación. Sin embargo, los controladores más nuevos de AMD para OpenCL permiten que los datos se escriban directamente, lo que hace que el costo de mapeo y desinstalación sea casi 0. Para tarjetas gráficas discretas, las solicitudes aún se realizan sobre el bus PCIe, por lo que las transferencias de datos pueden ser lentas.

En el caso de una arquitectura de APU, sin embargo, los costos de las transferencias de datos usando la semántica de copia cero pueden aumentar en gran medida la velocidad de las transferencias debido a la arquitectura única de las APU (ver abajo). En esta arquitectura, el bus PCIe se reemplaza con el Unified North Bridge (UNB) que permite transferencias más rápidas.

TENGA EN CUENTA que al usar la semántica de copia cero con la asignación de memoria, verá anchos de banda absolutamente horribles al leer un búfer del lado del dispositivo desde el host. Estos anchos de banda son del orden de 0.01 Gb/sy pueden convertirse fácilmente en un nuevo cuello de botella para su código.

Disculpe si esta es demasiada información. Este fue mi tema de tesis.

APU Architecture

+0

+5 para una explicación más detallada! – gpuguy

+0

¿Podemos ver su tesis? ¡Suena impresionante! Jugué mucho con apus para mi tesis también –

+0

@ homemade-jam Sure. Aquí tienes: http://scholar.lib.vt.edu/theses/available/etd-07272012-152625/unrestricted/Lee_KS_T_2012.pdf – KLee1

Cuestiones relacionadas