2015-07-18 2 views
1

Я хочу, чтобы printf() что-то в моем ядре CUDA. [Руководство по программированию предлагает] [1] Я делаю это так:Зачем использовать <stdio.h> для использования printf() CUDA?

#include <stdio.h> 

__global__ void helloCUDA(float f) 
{ 
    printf("Hello thread %d, f=%f\n", threadIdx.x, f); 
} 

Но это просто в том числе стандартная библиотека C-х stdio.h. Зачем это необходимо? CUDA printf() не имеет такого же поведения, что и у stdio printf(); и мне, конечно, не нужно больше всего остального, что там.

ответ

4

Это деталь реализации, о которой вам не нужно знать, что связано с ограничениями в синтаксисе CUDA (в основном это незаконно определять разные версии той же функции) .

Прототип стандартной библиотеки используется в качестве прокси в коде устройства во время компиляции, а при компиляции для поддерживаемой архитектуры используется некоторая скрытая перегрузка шаблонов для вставки реализации устройства в код устройства.

+1

так что вы могли бы просто отправить объявление, и это будет делать то же самое? –

+0

@ RussellGreene: Это хороший вопрос, на который у меня нет ответа. Если бы вы могли получить прототип для соответствия точной реализации libC, которую должен увидеть интерфейс CUDA, он должен работать (по крайней мере теоретически). Но это похоже на большое усилие, а не только на 'cstdio', и принятие магии происходит под капотом, чтобы заставить его работать. – talonmies

+0

Я бы по-прежнему ожидал, что NVIDIA скажет мне «#include» cuda_printf.h »и попросит их сделать свою магию внутри. – einpoklum

Смежные вопросы