Решил попробовать собрать. Сразу столкнулся с тем, что нигде нет инструкции как собрать библиотеку под MinGW, да к тому же nVidia не предоставляет свои библиотеки в исходниках, а предлагает скачать собранные в составе CUDA. Но чтобы этот CUDA скачать надо еще зарегистрироваться на сайте. Мучался поиском в гугле и как-то нашел прямую ссылку, чтобы качать без регистрации:
CUDA 3.1Поставил пакет. Прописал в консоли следующие переменные, чтобы gcc мог найти заголовки и библиотеки:
set LPATH=D:/Work/CUDA/lib
set CPLUS_INCLUDE_PATH=D:/Work/CUDA/include
Распаковал исходники
QtOpenCLНу и вбил qmake && mingw32-make release
Началась сборка. Посыпалась куча варнингов и вывалилось с ошибкой сборки /demos/mandelbrot. В принципе это единственное, что не собралось.
Протестировал все примеры. Стабильно крашатся при выходе на инструкции по адресу 0 при доступе к памяти 0. Вручную собрал /demos/bezierpatch. Релизная версия не запускается нивкакую, а вот дебажная загрузилась. OpenCL даже работает, ускорение видно невооруженным глазом. Смущает только то, что окно самой демки не перемещается вообще, возникает глюк какой-то с зависоном клавы и мышки
да и при выходе тоже крашится. Утилита clinfo вообще никак не реагирует, запускается и тут же возвращается с кодом возврата 0.
В общем грешу я все на симбиоз библиотек собранных с помощью gcc и MSVC в одном приложении.
Где-то на форуме nVidia видел даже пост, что поддержка MinGW не планируется, видимо намекают на использование библиотеки только с gcc под *никсами.
Были ли у кого успехи вообще в этом направлении? Может все-таки можно где-то раздабыть исходники CUDA для linux, чтобы собрать под виндой или есть какие-нибудь универсальные библиотеки OpenCL, которые держат и nVidia и ATI?
---
То, почему ничего не выводит clinfo, я понял, тролли видать забыли, что приложения написанные под Windows с использованием printf, но без ключа CONFIG += console ничего не выводят. Поправил, теперь имею такую инфу:
OpenCL Platforms:
Platform ID : 10954264
Profile : FULL_PROFILE
Version : OpenCL 1.0 CUDA 3.1.1
Name : NVIDIA CUDA
Vendor : NVIDIA Corporation
Extension Suffix : NV
Extensions :
cl_khr_byte_addressable_store
cl_khr_icd
cl_khr_gl_sharing
cl_nv_d3d9_sharing
cl_nv_compiler_options
cl_nv_device_attribute_query
cl_nv_pragma_unroll
OpenCL Devices:
Device ID : 10973272
Platform ID : 10954264
Vendor ID : 4318
Type : GPU
Profile : FULL_PROFILE
Version : OpenCL 1.0 CUDA
Driver Version : 258.96
Language Version : OpenCL 1.0
Name : GeForce GTS 250
Vendor : NVIDIA Corporation
Available : true
Compute Units : 16
Clock Frequency : 1512 MHz
Address Bits : 32
Byte Order : Little Endian
Max Work Size : 512x512x64
Max Items/Group : 512
Local Memory : 16 kB
Global Memory : 1023 MB
Global Cache Type : None
Global Cache Size : 0 kB
Cache Line Size : 0
Max Alloc Size : 255 MB
Max Constant Size : 64 kB
Max Constant Args : 9
Separate Local : true
Alignment : 32 (min 16)
Max Param Bytes : 4352
Error Correction : false
Unified Memory : false
Float Support : InfinityNaN RoundNearest RoundZero RoundInfinity FusedMu
ltiplyAdd
Double Support : No
Half Float Support: No
Image Support : 2D, 3D
Max 2D Image Size : 8192x8192
Max Samplers : 16
Max Read Images : 128
Max Write Images : 8
Max 3D Image : 2048x2048x2048
Writable 3D Images: false
Has Compiler : true
Native Kernels : false
Out of Order Exec : true
Preferred Vector Sizes:
char1, short1, int1, long1, float1
Extensions :
cl_khr_byte_addressable_store
cl_khr_icd
cl_khr_gl_sharing
cl_nv_d3d9_sharing
cl_nv_compiler_options
cl_nv_device_attribute_query
cl_nv_pragma_unroll
cl_khr_global_int32_base_atomics
cl_khr_global_int32_extended_atomics