CUDA: суперкомпьютерные вычисления понятным языком. Часть 2.

Rob Farber, “CUDA, Supercomputing for the Masses: Part 2”, public translation into Russian from English More about this translation.

See also 90 similar translations

Translate into another language.

Participants

zanuda1612 points
itcrowd47 points
alco7 points
And others...
Join Translated.by to translate! If you already have a Translated.by account, please sign in.
If you do not want to register an account, you can sign in with OpenID.
Pages: ← previous Ctrl next next untranslated
1 2 3 4 5 6

CUDA, Supercomputing for the Masses: Part 2

CUDA: суперкомпьютерные вычисления понятным языком. Часть 2.

History of edits (Latest: alco 2 years, 4 months ago) §

In Part 1 of this article series, I presented a simple first CUDA (short for "Compute Unified Device Architecture") program -- moveArrays.cu -- to familiarize you with the CUDA tools for building and executing programs. For C programmers, this program did nothing more than call the CUDA API to allocate memory and move data to and from the CUDA device. Nothing new was added that might cause confusion in learning how to use the tools to build and run a CUDA program.

В первой части серии я показал первую программу на CUDA ("Compute Unified Device Architecture") - moveArrays.cu - чтоб познакомить вас с инструментарием разработки на CUDA. Для Си-программистов, эта программа не более чем обращение к CUDA API для выделения памяти и перемещения данных в устройство CUDA и обратно. Не было показано ничего нового, того, что могло бы вызвать затруднения в понимании CUDA инструментария.

History of edits (Latest: zanuda 2 years, 4 months ago) §

This article builds on that first example by adding a few additional lines of code to perform a simple calculation on the CUDA device -- specifically incrementing each element in a floating-point array by 1. Amazingly, this example already provides the basic framework ("move data to CUDA-enabled device(s), perform a calculation and retrieve result") for solving many problems with CUDA!

В этой статье мы продолжим работу над первым примером и добавим всего несколько строк кода выполняющих простое вычисление на CUDA устройстве, а именно увеличение каждого элемента массива чисел с плавающей точкой на единицу. Удивительно, но эта демонстрационная программка - отправляющая данные в устройство, выполнающая вычисления и извлекающая результат дает нам вполне работоспособный фреймворк для решения многих реальных задач с CUDA!

History of edits (Latest: itcrowd 2 years, 2 months ago) §

Before tackling more advanced topics, you first need to understand:

Сначала нужно уяснить:

History of edits (Latest: zanuda 2 years, 4 months ago) §

What is a kernel? A kernel is a function callable from the host and executed on the CUDA device -- simultaneously by many threads in parallel.

Что такое зерно (kernel)? Это функция вызываемая главным приложением (хостом),, но выполняемая на CUDA устройстве параллельно, множеством потоков.

History of edits (Latest: esenia 2 years, 4 months ago) §

Comment was deleted

— Я тоже не в восторге от зерна. Однако "ядро" воспринимается как нечто весьма заумное и тяжелое. По аналогии с ядром линукса. Здесь "кёнл" - атомарная вычисляющая функция, легковесная и дешевая.  zanuda

— Все такие надо оставить ядро и ничего тяжеловесного нет - подразумевается функция исполняемая на видеокарте. Если кто захочет почитать материалы на английском, то и искать надо будет kernel. itcrowd

How does the host call a kernel? This involves specifying the name of the kernel plus an execution configuration. For the purposes of this column, an execution configuration just means defining the number of parallel threads in a group and the number of groups to use when running the kernel for the CUDA device. This is actually an important topic that will be discussed in greater depth in future columns.

Как хост вызывает ядро? Для вызова нужно сообщить имя ядра и параметры исполнения (execution configuration). В этой статье можно упрощенно описать параметры исполнения двумя числами: числом потоков в одном блоке и числом блоков используемых для исполнения ядра на CUDA устройстве. На самом же деле параметры исполнения это довольно важная штука, которая позже будет описана подробнее.

History of edits (Latest: itcrowd 2 years, 2 months ago) §

Comment was deleted

— > parallel threads in a group Здесь речь идет не просто о группе, а о блоках потоках. Именно блоках, если придерживаться терминологии от NVidia. itcrowd

— configuration = конфигурация, топология, компоновка или профиль. Но в каком мире configuration = параметры?  zanuda

— Это близкое по смыслу слово и оно подходит, потому что вызов ядра происходит именно через задание параметров. Примерно так: gpu_kernel<<<16, 32>>>(data); где в <<< ... >>> и находятся те самые параметры(ну или конфигурация) о которых мы говорим. То есть происходит вызов ядра с заданными параметрами исполнения. Конфигурация тоже пойдет, но не совсем то. itcrowd

How to synchronize kernels and host code.

Как синхронизировать gpu-код(ядро) и хост.

History of edits (Latest: itcrowd 2 years, 2 months ago) §

At the top of the Listing One (incrementArrays.cu), we see an example host routine, incrementArrayOnHost and our first kernel, incrementArraysOnDevice.

В начале Листинга 1 (incrementArrays.cu) приведены примеры процедуры выполняемая на хосте, incrementArrayOnHost и первое ядро, incrementArraysOnDevice.

History of edits (Latest: itcrowd 2 years, 2 months ago) §

The host function incrementArrayOnHost is just a simple loop over the number of elements in an array to increment each array element by one. This function is used for comparison purposes at the end of this code to verify the kernel performed the correct calculation on the CUDA device.

Функция выполняемая на хосте incrementArrayOnHost это обычный цикл перебора элементов в массиве, где каждый элемент массив будет увеличен на единицу. Она приведена здесь лишь для сравнения и подтверждения того, что CUDA устройство выполнило вычисления верно.

History of edits (Latest: itcrowd 2 years, 2 months ago) §

— to increment each array element by one - это слова автора. Мне кажется, при переводе не надо состязаться с автором и выбрасывать то, что он это хотел сказать и сказал. zanuda

Comment was deleted

Next in the Listing One is our first CUDA kernel, incrementArrayOnDevice. CUDA provides several extensions to the C-language. The function type qualifier __global__ declares a function as being an executable kernel on the CUDA device, which can only be called from the host. All kernels must be declared with a return type of void.

Далее в нашем Листинге 1 идет наше первое CUDA ядро, incrementArrayOnDevice. CUDA привносит в Си несколько расширений. Спецификатор типа функции __global__ описывает функцию как исполняемое ядро для CUDA устройства, которое может быть вызвано только хостом. Все ядра должны возвращать void.

History of edits (Latest: itcrowd 2 years, 2 months ago) §

Comment was deleted

— Не совсем понял - что не так с переводом? itcrowd

— А точно все ядра должны возвращать void или только global? zanuda

— __global__ это не возвращаемое значение, это дополнение языка C означающие,что эта функция будет исполняться на GPU. К функции предъявляется условие возвращать она ничего не должна - т.е. void itcrowd

Comment was deleted

Pages: ← previous Ctrl next next untranslated
1 2 3 4 5 6