Pergunta

Estou tendo dificuldades para configurar um experimento em que alquei memória com CUDA no dispositivo, pego esse ponteiro para a memória no dispositivo, use -o no OpenCL e devolva os resultados. Eu quero ver se isso é possível. Eu tive dificuldade em fazer um projeto CUDA funcionar, então eu apenas usei o projeto de modelo da Nvidia em seu SDK. No Makefile, adicionei -lopencl à seção Libs do Common.mk. Tudo está bem quando faço isso, mas quando eu adiciono #include <CL/cl.h> Para modelar.cu para que eu possa começar a fazer chamadas de OpenCL, recebo mais de 100 erros. Todos eles se parecem com isso, mas com nomes de funções diferentes no final:

/usr/lib/gcc/x86_64-linux-gnu/4.4.1/include/xmmintrin.h(334): erro: identificador "__builtin_ia32_cmpeqps" é indefinido

Estou tendo dificuldade em descobrir o porquê. Por favor, ajude se você puder. Além disso, se houver uma maneira mais fácil de configurar um projeto que possa chamar as APIs CUDA e OpenCL, me avise.

Foi útil?

Solução

Eu realmente não trabalhei com Cuda, então não sei o quão útil minha resposta é.

Pelo que eu entendo, você está tentando usar o OpenCL diretamente do seu CUDA Hostcode, que é se bem me lembro compilado usando algum compilador da NVIDIA em vez do GCC padrão. Portanto, o problema é provavelmente que esse compilador não implementa os Buildins necessários para trabalhar com os cabeçalhos mencionados. Procure aqui um problema semelhante e sua solução:http://forums.nvidia.com/lofiversion/index.php?t88573.html

Parece que você precisa colocar tudo o que precisa da API OpenCL em uma unidade de compilação diferente (não CUDA) para que seja compilada pelo compilador não NVIDIA.

No entanto, eu não contaria com esse trabalho (já que os buffers de OpenCL não são apenas ponteiros para a memória, mas devem conter algumas formas de metade), simplesmente porque não há razão real para funcionar e, se não há garantia de que ele continue fazer isso.

O que você poderia tentar se realmente quiser é usar o OpenGL para a interoper, já que o OpenCL e o CUDA têm extensões para permitir a criação de buffers a partir de buffers OpenGL.

No entanto, por que você precisa fazer isso? O que o impede de usar a implementação da Apple a curto prazo, já que o IIRC é de código aberto e a maior parte (as peças do OpenCL) deve ser independente da plataforma.

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