#printf #opencl #ati
#printf #opencl #ati
Вопрос:
Я использую OpenCL на плате ATI с включенным расширением printf. Я написал функцию для печати переменных:
void printVar(constant char* name, float var)
{
printf("%s: %frn", name, var);
}
Этот код работает, как ожидалось, при компиляции как обычный C, но если я вызываю его в OpenCL с
printVar("foo", 0.123);
результатом всегда является некоторый случайный символ, за которым следует 0.123 вместо «foo: 0.123». Я предполагаю, что у компилятора проблемы с распознаванием строки char *, есть ли обходной путь или исправление, чтобы я мог заставить функцию работать?
Комментарии:
1. Я также получаю такое поведение. Примечательно, что это работает должным образом, если ядро запущено на моем процессоре (с AMD APP SDK 2.3), но не на моем HD 5870. Я предполагаю, что это либо ошибка, либо недокументированное ограничение printf на графическом процессоре.
2. Для полноты картины: я только что прочитал примечания разработчика AMD APP SDK 2.4 к выпуску, и в них говорится, что printf в настоящее время не поддерживает печать строк.
Ответ №1:
Как я упоминал в своем комментарии, я также получаю такое же поведение, однако я могу предложить простой обходной путь для показанного вами варианта использования, т. Е. когда строка известна во время компиляции, мы могли бы просто использовать вместо этого оператор define:
#define PRINTVAR(N,X) (printf(N ": %frn", X))