Проблема расширения ATI OpenCL printf с аргументом char *, переданным функции

#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))