Pergunta

A definição de uma plataforma no Khronos 'OpenCl 1.0 e 1.1 especificação:

Plataforma: o host mais uma coleção de dispositivos gerenciados pela estrutura OpenCL que permite que um aplicativo compartilhe recursos e execute kernels em dispositivos na plataforma.

A função OpenCL clggetplatformids Cria uma variedade de plataformas, o que implica que várias plataformas são possíveis. É seguro supor que um determinado host OpenCL tenha apenas uma plataforma?

Em outras palavras, vou perder qualquer coisa em qualquer anfitrião fazendo isso:

cl_platform_id platform_id;
cl_uint num_platforms;
errcode = clGetPlatformIDs(1, &platform_id, &num_platforms);
Foi útil?

Solução

Eu não confiaria em haver apenas uma plataforma. Quando você tem várias implementações de OpenCL em um sistema (o que deve ser possível com o OpenCL ICD, embora não tenha certeza se isso está planejado ou já terminado), você deve obter várias plataformas, uma para cada implementação do OpenCL. Um exemplo em que poderia haver várias implementações de OpenCL seria uma implementação da NVIDIA para executar o OpenCL na GPU e uma implementação da AMD para executar na CPU, para que também não seja tão absurdo.

Editar: Olhe para http://developer.amd.com/support/knowledgebase/lists/knowledgebase/dispform.aspx?id=71 para (melhor) descrição deste

Outras dicas

Para complementar a resposta de Tim Child com um exemplo (ThinkPad X201 com a AMD e a Intel SDK instaladas):

$ python /usr/share/doc/python-pyopencl/examples/benchmark-all.py
Execution time of test without OpenCL:  10.9563219547 s
===============================================================
Platform name: AMD Accelerated Parallel Processing
Platform profile: FULL_PROFILE
Platform vendor: Advanced Micro Devices, Inc.
Platform version: OpenCL 1.1 AMD-APP-SDK-v2.5 (684.213)
---------------------------------------------------------------
Device name: Intel(R) Core(TM) i5 CPU       M 520  @ 2.40GHz
Device type: CPU
Device memory:  7799 MB
Device max clock speed: 2399 MHz
Device compute units: 2
Execution time of test: 0.00842799 s
Results OK
===============================================================
Platform name: Intel(R) OpenCL
Platform profile: FULL_PROFILE
Platform vendor: Intel(R) Corporation
Platform version: OpenCL 1.1 LINUX
---------------------------------------------------------------
Device name: Intel(R) Core(TM) i5 CPU       M 520  @ 2.40GHz
Device type: CPU
Device memory:  7799 MB
Device max clock speed: 2400 MHz
Device compute units: 2
Execution time of test: 0.00260659 s
Results OK

Sim, existe um ID da plataforma para cada fornecedor OpenCL Installation. Portanto, se você instalar o OpenCL SDK da AMD e da Intel, obterá um ID da plataforma para cada um.

Mesmo se você assumir que um host tem apenas uma plataforma, você teria que descobrir qual é o ID dessa plataforma, antes de ligar clggetplatforminfo. Portanto, é melhor se você ligar para o ClgetPlatformids, pegue uma plataforma padrão ou fornecida pelo usuário e, em seguida, ligue para o clgetplatforminfo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top