Como imprimir no CUDA

Como imprimir no CUDA

por Ricardo Cillo -
Número de respostas: 9
Como fazer um print de uma variável no CUDA?
Em resposta à Ricardo Cillo

Re: Como imprimir no CUDA

por Hugo Corbucci -
Posso estar errado mas acho que isso não é possível (fora em modo emulado).

Até onde eu testei e entendi, a placa de vídeo não tem acesso à saída padrão porque isso não existe no contexto dela. Eu ainda acho que deve ser possível de alguma forma porque em computação, tudo dá, mas deve ser bem complicadinho. O jeito mais fácil é copiar o valor da variável para memória da CPU e aí pedir uma impressão a partir do "host", isto é, de uma função que roda na CPU.
Em resposta à Hugo Corbucci

Re: Como imprimir no CUDA

por Ricardo Cillo -
É possível copiar o valor da variável da GPU para a CPU a partir de um comando fora do host?
Senão, como o host sabe q uma resposta ficou pronta para ele copiar para sua memória de trabalho e imprimir? A solução é elegante? A solução é porca e custosa? Da uma dica =P
Na net só acho coisas relacionadas a copiar texturas pra lá e para cá. Tudo num nível mto complexo pra mim.
Em resposta à Ricardo Cillo

Re: Como imprimir no CUDA

por Hugo Corbucci -
Dê uma olhada nos exemplos que vêm com o CUDA.
A maior parte deles faz uso intenso de paralelismo e recupera as informações que foram processadas pelas threads para imprimir no main. Veja o scalarProd e matrixProd que o algoritmo deve ser bem fácil de entender.
Em resposta à Hugo Corbucci

Re: Como imprimir no CUDA

por Ricardo Cillo -
Já olhei eles, Hugo. Foi meu ponto de partida.
Acho que eu não me expliquei direito.

Os exemplos fazem: "Reading back GPU result...\n"

Ou seja, a CPU sabe q tem um resultado pronto e então lê devolta.
Ela sabe disso pq executa um CUDA_SAFE_CALL( cudaThreadSynchronize() ); no caso do scalarProd, certo?

No nosso caso, os resultados vão surgindo aleatoriamente e não podemos armazená-los pois eles potencialmente chegam aos bilhões.

Então pensei que se trata de um problema estilo produtor-consumidor.

As threads produzem respostas e o host consome.
Usando semáforos talvez dê para controlar tudo.

O q vc acha? Mta confusão? É um caminho?

Pq não sei como usar semáforos direito, nem se é possível.
Em resposta à Ricardo Cillo

Re: Como imprimir no CUDA

por Hugo Corbucci -
Ah tá! Certinho em relação ao synchronize.

Beleza, você não pode armazenar todos os resultados mas você pode armazenar um (se você conseguir garantir um acesso restrito para consumo desse resultado).

Acho que você entendeu direitinho o problema sorriso
Existem vários jeitos de controlar o consumo de informações, semáforos são uma solução sim. Se vai ficar confuso ou não depende do seu código.

Agora pense como você vai fazer para manter a sua thread consumidora prestando atenção para saber se o resultado está pronto para ser impresso.
Use a solução mais simples que conseguir por enquanto. Depois você pensa em otimizar ela.
Em resposta à Ricardo Cillo

Re: Como imprimir no CUDA

por Edson Kiyohiro Miyahara -
posso fazer a impressão só no modo emulado, ou devo imprimir também no modo não emulado?????
Em resposta à Edson Kiyohiro Miyahara

Re: Como imprimir no CUDA

por Hugo Corbucci -
Como vou ter certeza que seu código funciona em modo não emulado? sorriso

Nem venha com análise de corretude porque não vou fazer! hehe

Precisa imprimir de alguma forma para a competição sim. Eu sei que não é fácil, mas afinal, é 10 na média né?