Цель сценария спиралей-создать компьютерное изображение. Изображение отображает графические процессоры с поддержкой CUDA.
Ниже приведены примеры изображений, созданных с помощью сценария Python. Их детали конфигурации можно найти в папке «Примеры» с другими примерами.
Чтобы запустить сценарий Python, необходимо установить следующие зависимости:
Когда запускается последовательно на Intel I7-9700K, каждое изображение занимает примерно 23,5877081 секунды.
Первым шагом к оптимизации алгоритма CGI было восстановление алгоритма для параллельного использования в GPU. Это было сделано с помощью декоратора @cuda.jit , который требует вызова ядра. Перед тем, как алгоритм выполняется, код определяет, как отобразить массив пикселей на аппаратном обеспечении GPU. В алгоритме петли для расчета каждого пикселя заменяются на i, j = cuda.grid(2) . Если i и j находятся в пределах границ изображения, функция вычисляет цвет пикселя индекса. Нет петли. Ускорение параллелизации составляет около 1072, что занимает примерно 22,1124 миллисекунд.
Согласно инструменту nvprof CLI (in Optimization.TXT), [CUDA memcpy HtoD] составляет примерно 36.09% выполнения. Чтобы обойти это, массив пикселей может быть создан и инициализирован на устройстве, даже не добавляясь в память на стороне процессора. numba.cuda предоставляет функциональную device_array для этого. Ускорение минимизации переноса в хост на место составляет около 1,38, что занимает примерно 15,9563 миллисекунд.
Следующая оптимизация использует общую память, память, которую делят блок потоков. Поскольку память специфична для блока, скорости чтения и записи быстрее. Следовательно, операции доступа к памяти могут быть рассчитаны на общей памяти. После операций один медленный доступ к глобальной массиве пикселей завершает параллелизированные вычисления. Ускорение использования общей памяти составляет около 1,068, что занимает примерно 14,9425 миллисекунд.
Общее ускорение от алгоритма процессора до оптимизированного алгоритма графического процессора составляет примерно 1578.