Вторая контрольная работа (1127792), страница 4
Текст из файла (страница 4)
Т.к. массивы у нас одномерные, используется только координата x. После того, как провели вычисления, нужно передать данные обратно на хост :
cudaMemcpy(a_h, a_d, size, cudaMemcpyDeviceToHost).
cudaMemcpyDeviceToHost - копирование с устройства на хост, cudaMemcpyHostToDevice - соответственно обратно. Еще несколько действий и выводим результат : 3,141592.
Высокая вычислительная мощность GPU объясняется особенностями архитектуры. Если современные CPU содержат несколько ядер (на большинстве современных систем от 2 до 6), графический процессор изначально создавался как многоядерная структура, в которой количество ядер может достигать сотен. Разница в архитектуре обусловливает и разницу в принципах работы. Если архитектура CPU предполагает последовательную обработку информации, то GPU исторически предназначался для обработки компьютерной графики, поэтому рассчитан на массивно параллельные вычисления.
Каждая из этих двух архитектур имеет свои достоинства. CPU лучше работает с последовательными задачами. При большом объеме обрабатываемой информации очевидное преимущество имеет GPU. Условие только одно — в задаче должен наблюдаться параллелизм.
Существует несколько сложностей при определении вычислительной мощности суперкомпьютера. Во-первых, следует иметь в виду, что производительность системы может сильно зависеть от типа выполняемой задачи. В частности, отрицательно сказывается на вычислительной мощности необходимость частого обмена данных между составляющими компьютерной системы, а также частое обращение к памяти. В связи с этим выделяют пиковую вычислительную мощность — гипотетически максимально возможное количество операций над числами с плавающей запятой в секунду, которое способен произвести данный суперкомпьютер.
Важную роль играет также разрядность значений, обрабатываемых программой (обычно имеется в виду формат чисел с плавающей запятой). Так, например, у графических процессоров NVIDIA Tesla первых двух поколений максимальная производительность в режиме одинарной точности (32 бит) составляет порядка 1 терафлопса, однако при проведении вычислений с двойной точностью (64 бит) она в 10 раз ниже.
Оценка реальной вычислительной мощности производится путём прохождения специальных тестов (бенчмарков) — набора программ, специально предназначенных для проведения вычислений и измерения времени их выполнения. Обычно оценивается скорость решения системой большой системы линейных алгебраических уравнений, что обусловливается, в первую очередь, хорошей масштабируемостью этой задачи.
Наиболее популярным тестом производительности является Linpack benchmark. В частности, HPL (высокопараллельная реализация Linpack с применением MPI) используется при составлении списка TOP500 суперкомпьютеров в мире.
Другими популярными программами для проведения тестирования являются NAMD (решение задач молекулярной динамики), HPCC (HPC Challenge Benchmark), NAS Parallel Benchmarks.