OpenCL (Open Computing Language – відкрита мова обчислень) – надає каркас для написання комп’ютерних програм, пов’язаних з паралельними обчисленнями на різних графічних і центральних процесорах (GPU та CPU). До складу OpenCL входять мова програмування, яка базується на стандарті ANSI C99, і інтерфейс програмування застосувань (API). OpenCL забезпечує паралелізм на рівні інструкцій і на рівні даних і є реалізацією технології GPGPU. OpenCL – відкритий стандарт.
Мета OpenCL полягає в тому, щоб доповнити OpenGL і OpenAL, які є відкритими галузевими стандартами для тривимірної комп’ютерної графіки і звуку, можливостями GPU. OpenCL розробляється і підтримується некомерційним консорціумом Khronos Group, до якого входять багато крупних компаній, включаючи Apple, AMD, Intel, NVIDIA, Sun Microsystems, Sony.
Відкриті системи та об’єктно-орієнтований підхід
У зв’язку із застосуванням підходу відкритих систем вельми перспективним напрямком представляється об’єктно-орієнтований стиль проектування та програмування. Об’єктно-орієнтованим системам притаманні такі властивості:
ü Інкапсуляція (приховування реалізації) – дані та процедури об’єкта приховуються від зовнішнього користувача, і зв’язок з об’єктом обмежується набором повідомлень, які «розуміє» об’єкт;
ü Поліморфізм (багатозначність повідомлень) – однакові повідомлення по-різному розуміються різними об’єктами, в залежності від їх класу;
ü Динамічне (пізніше) зв’язування – значення імені (область пам’яті для даних або текст програми для процедур) стає відомим тільки під час виконання програми;
ü Абстрактні типи даних – об’єднання даних і операцій для опису нових типів, що дозволяють використовувати нові типи нарівні з вже існуючими;
ü Успадкування – дозволяє при створенні нових об’єктів використовувати властивості вже існуючих об’єктів, описуючи наново лише ті властивості, які відрізняються.
Зауважимо, що основні властивості відкритих систем добре підтримуються об’єктно-орієнтованим підходом до реалізації системи.
Властивості відкритих систем | Дружність (до користувача) | Мобільність (платформи) | Масштабованість (нові функції і області застосування) | Інтероперабельність (інші системи, користувач) |
Властивості об’єктно-орієнтованих систем програмування | Об’єктне подання предметної області, найбільш зручне людині | Інкапсуляція (приховування реалізації) | Успадкування, абстрактні типи даних | Поліморфізм, динамічне зв’язування |