2010-07-12 33 views
6

Bien, ya he pasado por la mayoría de las guías ati y nvidia de OpenCL, hay algunas cosas de las que solo quiero estar seguro, y algunas necesito aclaración. Nada en la documentación da una respuesta clara.Elementos de trabajo, grupos de trabajo y cola de comandos organización y límite de memoria en OpenCL

ahora tengo una Radeon 4650, ahora en la consulta de mi dispositivo, tengo

CL_DEVICE_MAX_COMPUTE_UNITS: 8 
    CL_DEVICE_ADDRESS_BITS: 32 
    CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS: 3 
    CL_DEVICE_MAX_WORK_ITEM_SIZES: 128/128/128 
    CL_DEVICE_MAX_WORK_GROUP_SIZE: 128 
    CL_DEVICE_MAX_MEM_ALLOC_SIZE: 256 MByte 
    CL_DEVICE_GLOBAL_MEM_SIZE: 256 MByte 

bien en primer lugar, mi tarjeta de memoria de 1 GB ha, por eso me es permitido solamente 256MB?

2º No entiendo la parte de la dimensión del elemento de trabajo, ¿significa que puedo tener hasta 128 * 3 o 128^3 elementos de trabajo?

cuando calculé esto antes de ejecutar la consulta, obtuve 8 núcleos * 16 procesadores de flujo * 4 elementos de trabajo = 512 ¿por qué está mal?

también obtuve el mismo material de trabajo de 3 dimensiones para mi CPU inte core 2 duo, ¿se aplican los mismos cálculos?

En cuanto a las colas de comandos, cuando intenté acceder a mi CPU core duo como un dispositivo usando OpenCL, las cosas se procesaron solo en un núcleo, intenté hacer varias colas y poner en cola varias entradas, pero aún me procesaron en un solo núcleo , utilicé un global_workwork_size de 128 * 128 * 128 * 8 para un programa de escritura simple donde cada elemento de trabajo escribe su propio ID global en el búfer y obtuve solo ceros.

y qué tal las tarjetas Nvidia? en una Nvidia 9500 GT con 32 núcleos cuda, ¿los elementos de trabajo se calculan de manera similar?

Muchas gracias, he estado realmente por todas partes tratando de encontrar respuestas.

Respuesta

5

bien primero, mi tarjeta tiene 1GB de memoria, ¿por qué tengo permitido 256MB solamente?

Este es un error/limitación del controlador ATI AFAIK. Comprobaré en mi 5850 si puedo repro.

http://devforums.amd.com/devforum/messageview.cfm?catid=390&threadid=124142&messid=1069111&parentid=0&FTVAR_FORUMVIEWTMP=Branch

segundo no entiendo la parte dimensión de elemento de trabajo , ¿Eso significa que puedo tener hasta 128 * 128 o 3^3 elementos de trabajo?

No. Eso significa que puede tener un máximo de 128 en una tenue desde CL_DEVICE_MAX_WORK_ITEM_SIZES es 128/128/128. Y dado que CL_DEVICE_MAX_WORK_GROUP_SIZE es 128, puede tener, por ejemplo: work_group_size(128, 1, 1) o work_group_size(1, 128, 1) o work_group_size(64, 1, 2), o work_group_size(8, 4, 4) etc., siempre que el producto de cada atenuación sea <= 128 estará bien.

cuando calculé esto antes corro la consulta, tengo 8 núcleos * 16 * procesadores stream 4 elementos de trabajo = 512 ¿por qué es este mal?

también obtuve las mismas 3 dimensiones cosas de trabajo para mi núcleo inte 2 duo CPU, ¿se aplican los mismos cálculos?

No entiendo lo que está intentando calcular aquí.

+0

primero apagado Gracias mucho. um nvm la parte 512, confundí elementos de procesamiento con elementos de trabajo. en cuanto a la CPU, me preguntaba si los mismos cálculos también contarían. Si es así, mi CPU mostró 1024 tamaños de grupo de trabajo, ¿eso significa que puede procesar 1024 workitems simultáneamente? – omarzouk

+0

si la CPU muestra 1024 para el tamaño máximo del grupo de trabajo, entonces se aplica la misma regla. puedes tener, por ejemplo, 128 * 8 * 1 como para un work_group_size. Ahora, si los elementos de trabajo se procesan simultáneamente, esto es abstraído por el tiempo de ejecución, por lo que realmente no se sabe. – Stringer

+0

Probablemente esté utilizando la implementación OpenCL del software de ATI (informa 1024 como el tamaño máximo de grupo de trabajo). Por supuesto, una CPU no puede trabajar en 1024 elementos de trabajo a la vez. Por lo que sé, el software OpenCl de ATI ejecuta los elementos de trabajo de un grupo de trabajo secuencialmente, en la medida de lo posible. Si accede a la memoria compartida, el núcleo se divide en varias partes. Curiosamente, un tamaño de grupo de trabajo de 1 (que * debería * funcionar bien en una CPU) tuvo un mal rendimiento con la implementación de ATI y mi código. – dietr

Cuestiones relacionadas