Привет всем
Решил попробовать потестировать свою видеокарту Ati Radeon HD4670 (чипсет RV730XT). Система - Gentoo Linux x86, ядро 2.6.36.
Поглядел в дистрибутив FPC - вроде бы Скалогрыз уже и cl.h портировал под паскаль. Спасибо ему!
-Снес открытые драйвера.
-С грехом пополам поставил официальные проприетарные (версии 10.10) с поддержкой OpenCL. KMS конфликтует - ну да черт с ним.
-Установил ati-stream-sdk 2.2. Прописал в /etc/OpenCL/vendors/atiocl32.icd строку libatiocl32.so.
-Погонял примеры на С - вроде все работает.
Теперь под FPC:
-Добавил поддержку Linux в cl.pp (просто объявил функции как cdecl + dynlink). См. ниже
-Пример собрался.
-Пытаюсь запустить пример Скалогрыза - падает с sigfpe.
-По-запускал без особой надежды strace на собранном gcc и fpc - strace для gcc показывает что вроде используется pthreads.so. Ок. Подключил cthreads первым модулем. Результат тот же.
Сделал минимальный пример под gcc и fpc.
Максимально близкий. Делается вызов всего одной функции. Проблема та же. gcc версия работает без проблем, fpc - падает внутри вызова clGetPlatformIDs.
-если удаляю /etc/OpenCL/vendors/atiocl32.icd, то fpc версия clGetPlatformIDs ругается нормальным кодом ошибки. То есть проблема, вроде бы не в неправильном методе вызова функций в cl.pp.
Примеры под gcc и fpc приаттачил.
Может кто-нибудь чего подскажет?
OpenCL под ATI
Модератор: Модераторы
-
MageSlayer
- постоялец
- Сообщения: 216
- Зарегистрирован: 07.09.2006 12:30:44
OpenCL под ATI
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Если падает с sigfpe - наверняка где-то портится FPU/SSE control word. В этом отношении FPC не очень дружит с gcc библиотеками, т.к. каждый пытается перетянуть одеяло на себя.
-
MageSlayer
- постоялец
- Сообщения: 216
- Зарегистрирован: 07.09.2006 12:30:44
Sergei I. Gorelkin писал(а):Если падает с sigfpe - наверняка где-то портится FPU/SSE control word. В этом отношении FPC не очень дружит с gcc библиотеками, т.к. каждый пытается перетянуть одеяло на себя.
Честно говоря, это первое о чем я подумал. Неясно только что в этом случае делать.
В принципе сейчас, в моем случае, я решение нашел.
Оказалось, что sigfpe вываливается только в том случае, если приложение - консольное.
Если собрать обычное оконное приложение, то все работает.
Вроде бы у ATI в документации есть какая-то оговорка, чтобы их реализация OpenCL работает только с запущенным X сервером
Опять же неясно почему версия под gcc работает и в консольном варианте тоже.
P.S.
Добавил свой патч на багтрекер - http://bugs.freepascal.org/view.php?id=17917 .
- Sergei I. Gorelkin
- энтузиаст
- Сообщения: 1409
- Зарегистрирован: 24.07.2005 14:40:41
- Откуда: Зеленоград
Так в линуксах консольные приложения не отличаются от неконсольных. Разница только в том, что при запуске из консоли stdout - это терминал, а при запуске не из консоли перенаправляется в какой-нибудь ~/.xsession-errors.
Я бы для начала попробовал грузить библиотеку с помощью SafeLoadLibrary вместо LoadLibrary (хотя при текущей реализации это реально сделать только исправив модуль dynlibs и пересобрав все начиная с RTL).
Я бы для начала попробовал грузить библиотеку с помощью SafeLoadLibrary вместо LoadLibrary (хотя при текущей реализации это реально сделать только исправив модуль dynlibs и пересобрав все начиная с RTL).
-
MageSlayer
- постоялец
- Сообщения: 216
- Зарегистрирован: 07.09.2006 12:30:44
Sergei I. Gorelkin писал(а):Так в линуксах консольные приложения не отличаются от неконсольных. Разница только в том, что при запуске из консоли stdout - это терминал, а при запуске не из консоли перенаправляется в какой-нибудь ~/.xsession-errors.
Я в курсе.
Боюсь, что ребята из ATI просто как-то завязались на DRI и теперь никак не отвяжутся
