А пока тут вяло шло тестирование видеокарт... уже переписал часть "трудоёмкого" кода в своей основной (не тестовой уже) программе на OpenCL, 3 кернела. Сравнительно быстро всё отладил. Предварительный итог: время счёта на задачах (сутками считаются - гидродинамика) уже сократилось почти в 4 раза.
Поменял у себя на работе видео-карту на
GeForce GTX-980ti - зверь!
Кстати, фирме
Khronos стало видимо стыдно, и она
05 февраля 2016г (!!!) выложила файлы поддержки OpenCL и CUDA (заодно, чтобы не мелочиться) для Delphi. Тут можно скачать:
http://sourceforge.net/p/glscene/cod.../ParallelAPIs/ , для OpenCL хватит
CL.pas, CL_Platform.pas, CL.inc. Но мне проще использовать для OpenCL.dll свой заголовочник, кот. уже выкладывал в посте 1.
Итак. Чтобы не быть голословным, выкладываю во вложенной папке (см. ссылку для скачивания в 1-м посте), или прямо ссылку на вложенную папку -
http://gofile.me/2Zesj/TOT6JHm0
Там, во-первых,
новый работающий пример: выкинул всё написанное чехами, всё переписал заново, более осмысленно. Две программы-Kernel (так для пробы, используется в тесте первая), контроль погрешности - сравнение расчётов CPU vs GPU, использование в Kernel функции-atomic. Но Header-файл пока оставил свой, а не брал заголовочник, выложенный Khronos. Ещё там же в отдельной под-папке - 2 картинки-скана TIF с моими вопросами по работе новой видяхи GTX-980ti. Гляньте, плиз: почему такую частоту памяти видяхи показывает Caps-Viewer?
И наконец, в папке
OpenCL_Demo2016 есть под-папка с моими 3-мя Kernel для не тествых, а
рельных расчётов- последний длинный вчера дописал и опробовал - можете полюбопытствовать! Вряд ли они кому-то понадобятся в таком виде, но вот как примеры для OpenCL (для любого языка программы на хосте - хоть Delphi, хоть JAVA)...могут быть полезны участникам форума.
====
ПыСы. Посоветуйте, коллеги, на каком форуме активно обсуждается написание самих Kernel для OpenCL (программки на языке, похожем на C99, которые компилирует сам драйвер видео-карты). Или здесь подскажите, как разбивать для Kernel'a большую программу на модули (хотя это в принципе есть в моём новом примере - уже вроде осилил), и главное - как обмениваться между этими модулями (процедурами) данными: только через их списки параметров? Через всю цепочку процедур этот список тащить до той, где они действительно нужны??? Писать весь расчётный модуль одним "монолитом" без разбивки на модули - не кашерно, сами понимаете. А мне сейчас надо запихнуть на GPU код в несколько тысяч строк...