М. В. Ломоносова 2015 Антонюк Валерий Алексеевич Программирование на видеокартах (gpgpu). Спецкурс кафедры мми. М. Физический факультет мгу им. М. В. Ломоносова, 2015. 48 с. Учебное пособие
Скачать 1.54 Mb.
|
#array ( . . . ) , #list ( . . . ) , #tree ( . . . ) , на которых мы здесь останавливаться не будем, отметим лишь, что с их использованием появляются новые переменные для выражений: $i , $c , $r Visual Studio 2012 Начиная с Visual Studio 2012 введён другой формат описания визуализаторов в отладчике: они помещаются в XML-файлы с расширением .natvis , при этом поддерживаются множественные файлы визуализаторов. Располагаться такие файлы могут в следующих местах: • %VSINSTALLDIR%\Common7\Packages\Debugger\Visualizers (требуются административные права!) • %USERPROFILE%\My Documents\Visual Studio 2012\Visualizers\ • Каталоги VS-расширений 46 Пример содержимого .natvis -файла: Видно, что его содержание примерно соответствует старым описаниям, но оформляется по- другому. Интересные и/или полезные ссылки по теме Visualizers http://msdn.microsoft.com/en-us/library/zayyhzts.aspx Статья из библиотеки MSDN; интересна тем, что это всё-таки информация хотя и недостаточная, но от разработчика... Writing custom visualizers for Visual Studio 2005 http://www.virtualdub.org/blog/pivot/entry.php?id=120 Одна из первых и наиболее часто цитируемых статей, в которой подробно описаны (недокументированные) свойства файла autoexp.dat How to fix debugger visualizers for VS2005 SP1 and VS2008 http://virtualdub.org/blog/pivot/entry.php?id=172 Watch out for number bases in Visual C++ visualizers http:// virtualdub .org/ blog /pivot/entry.php?id=302 Другие заметки этого же автора на рассматриваемую тему. OpenCV debugger visualizers for Visual Studio https://bitbucket.org/sergiu/opencv-visualizers Набор визуализаторов для популярной библиотеки компьютерного зрения OpenCV, упоминаемой в курсе ранее. Включает показ ключевых типов cv::Mat|cv::Mat_<*> и cv::gpu::GpuMat (наиболее интересных для нас), а также других ( cv::Vec<*,*> , cv::Point_<*> , cv::Rect_<*> , cv::Scalar_<*> , cv::Ptr<*> и пр.) About Debugger Visualizers https://svn.boost.org/trac/boost/wiki/DebuggerVisualizers Приведены визуализаторы для упоминавшейся ранее библиотеки Boost (описаны типы boost::array , boost::ptr_vector , boost::ptr_array , boost::ptr_deque , boost::ptr_list , boost::ptr_map , boost::ptr_set и многие другие). 47 Visual Studio Debug Visualizer For Half Floats http://www.reedbeta.com/blog/2013/02/06/visual-studio-debug-visualizer-for- half-floats/ Визуализатор для вещественных величин, занимающих два байта (т.н. формат half float). half{ preview( #if (($e._h & 0x7c00) == 0x7c00) ( #if (($e._h & 0x03ff) == 0) ( #if ($e._h & 0x8000) ("-inf") #else ("+inf") ) #else ( #if ($e._h & 0x0200) ("qNaN") #else ("sNaN") ) ) #else (#if (($e._h & 0x7c00) == 0) ( ; Denormal or zero [($e._h & 0x03ff) / 16777216.0 * (($e._h >> 0xf) * -2.0 + 1.0), g] ) #else ( ; Normal float (condensed to avoid length problem) [(1<<(($e._h&0x7c00)>>0xa))/32768.0*(1.0+($e._h&0x03ff)/1024.0)*(($e._h>>0xf)*-2.0+1.0),g] )) ) } Автор статьи тестировал код в Visual Studio 2008 и 2010 и обнаружил, что, по-видимому, есть ограничение на число символов в квадратных скобках (около сотни символов); это влияет на окно с локальными переменными (но не на Watch-окно). Кроме того, он обнаружил, что если включён шестнадцатиричный режим в отладчике, то все целые числа воспринимаются как шестнадцатиричные, что вынудило его в тексте визуализатора записывать их именно так. How to Write Native C++ Debugger Visualizers in Visual Studio for Complicated Types http://www.idigitalhouse.com/Blog/?p=83 Частный пример построения визуализатора для строки, находящейся глубоко в иерархии (с подробными пояснениями и иллюстрациями получаемых результатов). Setting up Visual Studio Debugger Visualizers http://www.chromium.org/developers/how-tos/how-to-set-up-visual-studio- debugger-visualizers Визуализаторы для проекта известного открытого браузера Chromium. 48 О спецкурсе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Видеокарты и GPU как супервычислители . . . . . . . . . . . . . . . . . . . . . . . 5 CUDA — архитектура и программные средства . . . . . . . . . . . . . . . . . . . . 6 CUDA-программа . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Иерархия нитей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Виды памяти . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Компиляция программ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Расширения языка C в архитектуре CUDA . . . . . . . . . . . . . . . . . . . . . . . 9 Спецификаторы функций и переменных . . . . . . . . . . . . . . . . . . . . 9 Дополнительные типы данных CUDA . . . . . . . . . . . . . . . . . . . . . . 9 Полный синтаксис запуска ядер на исполнение . . . . . . . . . . . . . . . . 9 Дополнительные математические функции . . . . . . . . . . . . . . . . . . . 10 Разделяемая память . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Взаимодействие нитей в блоках . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Адресация памяти в нитях . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Суммирование компонент вектора — пример ядра . . . . . . . . . . . . . . . . . . 13 Умножение матриц . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Алгоритм параллельной сортировки Bitonic Sort . . . . . . . . . . . . . . . . . . . 17 "Косвенное" использование возможностей GPU . . . . . . . . . . . . . . . . . . . 19 Библиотеки для CUDA GPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Thrust: состав и возможности . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Библиотека cuBLAS — базовые функции линейной алгебры . . . . . . . . . 22 Библиотека cuSPARSE — разреженные матрицы . . . . . . . . . . . . . . . 24 Библиотека cuSPARSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Общие сведения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Форматы представления данных . . . . . . . . . . . . . . . . . . . . . . . . . 25 Форматы представления разреженных матриц . . . . . . . . . . . . . . . . . . . . . 26 Coordinate Format (COO) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Compressed Sparse Row Format (CSR) . . . . . . . . . . . . . . . . . . . . . . 26 Compressed Sparse Column Format (CSC) . . . . . . . . . . . . . . . . . . . . 26 Ellpack-Itpack Format (ELL) . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Hybrid Format (HYB) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Пример использования библиотеки cuSPARSE . . . . . . . . . . . . . . . . . . . . . 27 Общие замечания о сторонних библиотеках . . . . . . . . . . . . . . . . . . 28 Отображение разреженных матриц . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 Библиотека Boost — решение ОДУ . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Boost.Compute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Стандарт OpenCL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Дополнительные материалы по Boost и OpenCL . . . . . . . . . . . . . . . . . . . 35 Библиотека OpenCV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Общие сведения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Компиляция и сборка проекта . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Программирование с использованием OpenCV . . . . . . . . . . . . . . . . 37 Простейшие примеры программ . . . . . . . . . . . . . . . . . . . . . . . . . 38 Графическая библиотека OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Использование GLUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 GLSL (OpenGL Shading Language) . . . . . . . . . . . . . . . . . . . . . . . . 41 OpenGL в браузере — WebGL . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Вспомогательные средства: визуализаторы . . . . . . . . . . . . . . . . . . . . . . . 44 Visual Studio 2005-2008-2010 . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Синтаксические конструкции autoexp.dat . . . . . . . . . . . . . . . . . . . 45 Visual Studio 2012 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Ссылки по теме . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 |