On your opinion the general prblem on the way if usage of ICT in
education- are:
Жоғары оқу орындарында ақпараттық технологияларды оқыту сапасын жақсарту:
жолдары мен мүмкіндіктері
201
Lack of financing
84
Weak of technical bases
55
Quality of educational resources
23
Level of ICT competency of teachers
115
Teachers motivation
108
other
15
Total amount of answers: 400
Besides of the common internal policy of university it should be in agenda
qualification of faculty members in ICT area in the field.
What do you thik the most important to rise effectiveness of ICT usage in
schools:
Improvement
of
technical
support
and
admittance to Internet
21
Rising ofteachers’ qualification in ICT area
26
Information on available resources and services
2
Development of new methods of teaching
8
Rising of teachers motivation and stimulation
22
Total amount of answers: 79
To solve these problems in our university it is supposed an indicative approach
of administration in development of new educational products with usage of
computer’s programs. Among such indicators it might be case studies, research
projects based on real situations, data, etc.
Here there are answers of our department professors which were getting during
scientific-methodological seminar.
A question «In what the basic problem on ways of wide introduction ICT to an
education sphere» have answered: (it was possible to mark some variants)
- A weak hardware – 15 (38,5 %)
- Insufficient financing – 12 (30,7 %)
- Quality of educational resources – 9 (23,1 %)
- Level of ICT -COMPETENCE of teachers – 8 (20,5 %)
- Absence of motivation at teachers – 6 (15,4 %)
- Shortage of IT experts – 1 (2,6 %)
On the relation to use of electronic educational resources at university
following answers are received:
Жоғары оқу орындарында ақпараттық технологияларды оқыту сапасын жақсарту:
жолдары мен мүмкіндіктері
202
- Essentially raises quality of educational process – 30 (76,9 %)
- It is useful, but does not give qualitatively new results – 13 (33,3 %)
- Waste of forces and means – 2 (5,1 %)
- Does not become mass (resources for enthusiasts) – 1 (2,6 %)
- I have other relation – 1 (2,6 %)
- Conveniently, I am useful also I expect growth ICT in the future – 1 (2,6 %)
- Saves time – 1 (2,6 %)
Concerning a question on how respondents raise the level in the field of ICT,
thanks to:
- To Internet resources – 30 (76,9 %)
- To participation in seminars, trainings etc. – 6 (15,4 %)
- To books, managements – 5 (12,8 %)
- To dialogue with colleagues – 5 (12,8 %)
- To the printing periodical press – 1 (2,6 %)
And that respondents consider important for increase of efficiency of use of
ICT at university:
- Improvement of professional skill of teachers in the field of ICT – 18 (46,2 %)
- Improvement technical equipment and access to the Internet – 17 (43,6 %)
- Increase of motivation and stimulation of teachers – 9 (23,1 %)
- Working out of new techniques of teaching – 3 (7,7 %)
- Informing on accessible resources and services – 2 (5,1 %)
Thus, it is possible to notice that all presented at a seminar prove the fact that
use of ICT essentially raises quality of educational process, and that they are
necessary for introducing. Basically, respondents raise the level thanks to Internet
resources.
And as the most important thing for increase of efficiency of use of ICT at our
university consider improvement of professional skill of teachers and improvement
technical equipment and access to the Internet. But, now it is interfered by a weak
hardware and insufficient financing.
НЕГРАФИЧЕСКИЕ ВЫЧИСЛЕНИЯ НА ГРАФИЧЕСКИХ
ПРОЦЕССОРАХ
Бокатюк О.Г.
В течение долгих лет видеокарты служили только для прорисовки
графики. Они использовались в таких приложениях как компьютерные игры,
компьютерная обработка изображений, монтаж видео. Однако именно за счет
высоких потребностей, предъявляемыми данными типами приложений,
требования к видеокартам очень быстро росли. Теперь видеокарта – это
текстолитовая плата на которой может располагаться несколько гигабайт своей
оперативной памяти и мультиядерные графические процессоры. Компания
Жоғары оқу орындарында ақпараттық технологияларды оқыту сапасын жақсарту:
жолдары мен мүмкіндіктері
203
nVidia предлагает возможность использовать всю мощь своих видеокарт с
помощью ее открытой технологии CUDA как кластер для конвейерных
вычислений.
В ноябре 2006 года, nVidia анонсировала технологию параллельных
вычислений CUDA с новой моделью параллельного программирования и новой
архитектурой команд, которая позволяет с помощью процессоров в
графических картах nVidia решать многие сложные вычислительные задачи
более эффективно, чем на обычном процессоре.
В этой статье проводится исследование этой технологии на примере
простейшей программы, которая будет искать один элемент в массиве двумя
разными способами: без этой технологии, когда алгоритм работает на ЦПУ и с
помощью технологии nVidia CUDA, когда он будет распараллелен и работать
на ГПУ и составления сравнительной характеристики этих программ.
Перспективы
Направление параллельных вычислений является в данное время одним
из перспективнейших в данное время, но если раньше необходимо было
проектировать дорогостоящий кластер, состоящий из нескольких сот, а то и
тысяч компьютеров, то сейчас достаточно одного компьютера с двумя или
четырьмя мощными видеокартами стоимостью 10 000 – 20 000 долларов.
Кроме того, кластеры обладают такими недостатками: а)высокая
стоимость; б)сложность администрирования; в)проектирование оптимальной
топологии линий связи;
г)большой персонал по обслуживанию.
Среди недостатков же технологии CUDA, которые есть у каждой
технологии, является только ограниченность вычислительной мощности по
сравнению с суперЭВМ или кластерами по стоимости несколько миллионов
долларов. Самым же главным достоинством является то, что там, где не
требуются эти мощности, но и мощности обычной рабочей станции не
достаточно, эта технология является примиряющим компромиссом между
стоимостью и производительностью. Скорость же GPU разительно отличается
от скорости CPU.
Преимущества CUDA перед традиционным подходом к GPGPU
вычислениям:
- интерфейс программирования приложений CUDA основан на
стандартном языке программирования Си с расширениями, что упрощает
процесс изучения и внедрения архитектуры CUDA;
- CUDA обеспечивает доступ к разделяемой между потоками памяти
размером в 16 Кб на мультипроцессор, которая может быть использована для
организации кэша с широкой полосой пропускания, по сравнению с
текстурными выборками;
- более эффективная передача данных между системной и видеопамятью
- отсутствие необходимости в графических API с избыточностью и
накладными расходами;
Жоғары оқу орындарында ақпараттық технологияларды оқыту сапасын жақсарту:
жолдары мен мүмкіндіктері
204
- линейная адресация памяти, и gather и scatter, возможность записи по
произвольным адресам;
- аппаратная поддержка целочисленных и битовых операций.
Основные ограничения CUDA:
- отсутствие поддержки рекурсии для выполняемых функций;
- минимальная ширина блока в 32 потока;
- закрытая архитектура CUDA, принадлежащая NVIDIA.
NVIDIA V&S AMD?
Вычисления на GPU развивались и развиваются очень быстро. И в
дальнейшем, два основных производителя видеочипов, NVIDIA и AMD,
разработали и анонсировали соответствующие платформы под названием
CUDA (Compute Unified Device Architecture) и CTM (Close To Metal или AMD
Stream Computing), соответственно. В отличие от предыдущих моделей
программирования GPU, эти были выполнены с учётом прямого доступа к
аппаратным возможностям видеокарт. Платформы не совместимы между
собой, CUDA — это расширение языка программирования C, а CTM —
виртуальная машина, исполняющая ассемблерный код. Зато обе платформы
ликвидировали некоторые из важных ограничений предыдущих моделей
GPGPU,
использующих
традиционный
графический
конвейер
и
соответствующие интерфейсы Direct3D или OpenGL.
Конечно же, открытые стандарты, использующие OpenGL, кажутся
наиболее портируемыми и универсальными, они позволяют использовать один
и тот же код для видеочипов разных производителей. Но у таких методов есть
масса недостатков, они значительно менее гибкие и не такие удобные в
использовании. Кроме того, они не дают использовать специфические
возможности определённых видеокарт, такие, как быстрая разделяемая (общая)
память, присутствующая в современных вычислительных процессорах.
Именно поэтому компания NVIDIA выпустила платформу CUDA — C-
подобный язык программирования со своим компилятором и библиотеками для
вычислений на GPU. Конечно же, написание оптимального кода для
видеочипов совсем не такое простое и эта задача нуждается в длительной
ручной работе, но CUDA как раз и раскрывает все возможности и даёт
программисту больший контроль над аппаратными возможностями GPU.
Важно, что поддержка NVIDIA CUDA есть у чипов G8x, G9x и GT2xx,
применяемых в видеокартах GeForce серий 8, 9 и 200, которые очень широко
распространены. В настоящее время выпущена финальная версия CUDA 2.0, в
которой появились некоторые новые возможности, например, поддержка
расчётов с двойной точностью. CUDA доступна на 32-битных и 64-битных
операционных системах Linux, Windows и MacOS X.
В сети можно найти достаточно много информации по технологии
CUDA. Последний, на момент написание статьи, релиз SDK (v 2.3) имеет
возможность интеграции с Visual Studio 2008, имеет так же хорошую
документацию. В то время как по технологии AMD очень мало информации, и
Жоғары оқу орындарында ақпараттық технологияларды оқыту сапасын жақсарту:
жолдары мен мүмкіндіктері
205
лишь бета версия SDK. Исходя из этого можно сделать вывод что технология
CUDA несколько преуспевает в области технологии неграфических
вычислений.
CPU V&S GPU
Рост частот универсальных процессоров упёрся в физические
ограничения
и
высокое
энергопотребление,
и
увеличение
их
производительности всё чаще происходит за счёт размещения нескольких ядер
в одном чипе. Продаваемые сейчас процессоры содержат лишь до четырёх ядер
(дальнейший рост не будет быстрым) и они предназначены для обычных
приложений, используют MIMD — множественный поток команд и данных.
Каждое ядро работает отдельно от остальных, исполняя разные инструкции для
разных процессов.
Специализированные
векторные
возможности
появились
в
универсальных процессорах из-за возросших требований графических
приложений. Именно поэтому для определённых задач применение GPU
выгоднее, ведь они изначально сделаны для них.
Например, в видеочипах NVIDIA основной блок — это мультипроцессор
с восемью-десятью ядрами и сотнями ALU в целом, несколькими тысячами
регистров и небольшим количеством разделяемой общей памяти. Кроме того,
видеокарта содержит быструю глобальную память с доступом к ней всех
мультипроцессоров, локальную память в каждом мультипроцессоре, а также
специальную память для констант.
Самое главное — эти несколько ядер мультипроцессора в GPU являются
SIMD (одиночный поток команд, множество потоков данных) ядрами. И эти
ядра исполняют одни и те же инструкции одновременно, такой стиль
программирования является обычным для графических алгоритмов и многих
научных задач, но требует специфического программирования. Зато такой
подход позволяет увеличить количество исполнительных блоков за счёт их
упрощения.
Итак, перечислим основные различия между архитектурами CPU и GPU.
Ядра CPU созданы для исполнения одного потока последовательных
инструкций с максимальной производительностью, а GPU проектируются для
быстрого исполнения большого числа параллельно выполняемых потоков
инструкций. Универсальные процессоры оптимизированы для достижения
высокой производительности единственного потока команд, обрабатывающего
и целые числа и числа с плавающей точкой. При этом доступ к памяти
случайный. Из-за изначально параллельной организации работы в GPU
используется большое количество исполнительных блоков, которые легко
загрузить, в отличие от последовательного потока инструкций для CPU.
В универсальных процессорах большие количества транзисторов и
площадь чипа идут на буферы команд, аппаратное предсказание ветвления и
огромные объёмы начиповой кэш-памяти. Все эти аппаратные блоки нужны
для ускорения исполнения немногочисленных потоков команд. Видеочипы
Жоғары оқу орындарында ақпараттық технологияларды оқыту сапасын жақсарту:
жолдары мен мүмкіндіктері
206
тратят транзисторы на массивы исполнительных блоков, управляющие
потоками блоки, разделяемую память небольшого объёма и контроллеры
памяти на несколько каналов. Вышеперечисленное не ускоряет выполнение
отдельных потоков, оно позволяет чипу обрабатывать нескольких тысяч
потоков, одновременно исполняющихся чипом и требующих высокой
пропускной способности памяти.
Универсальные центральные процессоры используют кэш-память для
увеличения производительности за счёт снижения задержек доступа к памяти, а
GPU используют кэш или общую память для увеличения полосы пропускания.
CPU снижают задержки доступа к памяти при помощи кэш-памяти большого
размера, а также предсказания ветвлений кода. Эти аппаратные части занимают
большую часть площади чипа и потребляют много энергии. Видеочипы
обходят проблему задержек доступа к памяти при помощи одновременного
исполнения тысяч потоков — в то время, когда один из потоков ожидает
данных из памяти, видеочип может выполнять вычисления другого потока без
ожидания и задержек.
CPU исполняет 1-2 потока вычислений на одно процессорное ядро, а
видеочипы могут поддерживать до 1024 потоков на каждый мультипроцессор,
которых в чипе несколько штук. И если переключение с одного потока на
другой для CPU стоит сотни тактов, то GPU переключает несколько потоков за
один такт.
Вкратце можно сказать, что в отличие от современных универсальных
CPU, видеочипы предназначены для параллельных вычислений с большим
количеством арифметических операций. И значительно большее число
транзисторов GPU работает по прямому назначению — обработке массивов
данных, а не управляет исполнением (flow control) немногочисленных
последовательных вычислительных потоков. Это схема того, сколько места в
CPU и GPU занимает разнообразная логика:
В итоге, основой для эффективного использования мощи GPU в научных
и иных неграфических расчётах является распараллеливание алгоритмов на
сотни исполнительных блоков, имеющихся в видеочипах. Выполнение расчётов
на GPU показывает отличные результаты в алгоритмах, использующих
параллельную обработку данных. То есть, когда одну и ту же
последовательность математических операций применяют к большому объёму
данных. При этом лучшие результаты достигаются, если отношение числа
арифметических инструкций к числу обращений к памяти достаточно велико.
Это предъявляет меньшие требования к управлению исполнением (flow
control), а высокая плотность математики и большой объём данных отменяет
необходимость в больших кэшах, как на CPU.
В
результате
всех
описанных
выше
отличий,
теоретическая
производительность видеочипов значительно превосходит производительность CPU.
Жоғары оқу орындарында ақпараттық технологияларды оқыту сапасын жақсарту:
жолдары мен мүмкіндіктері
207
Что бы проверить наглядно возможность GPU напишем простейшую
программу поиска элемента в массиве. Рассмотрим худший случай, когда
искомый элемент находиться в конце массива.
При создании программы использовались следующие средства и
инструменты:
1. Видеокарта из серии nVidia GeForce 8xxx/9xxx или более современная.
2. CUDA Toolkit v.2.3 (скачать можно здесь: www. nvidia. ru
/object/cuda_get_ru.html)
3. CUDA SDK v.2.3 (скачать можно там же где Toolkit)
4. Visual Studio 2008
5. CUDA Visual Studio Wizard (скачать можно здесь: sourceforge.
net/projects/cudavswizard/)
Текст программы
#include
#include
#define CPU 1
#define GPU 2
//
функция
выполняемая
на
центральном процессоре
__host__ void searchCPU ( float *
data, int * result )
{
int len = 16 * 1024 * 1024;
for ( int j = 0; j < len; j++ )
{
if (data[j] == 2.0f )
{
result[0] = data[j];
result[1] = j;
}
}
}
//
функция
выполняемая
на
графическои процессоре
__global__ void searchGPU ( float *
data, int * result )
{
int idx = blockIdx.x * blockDim.x +
threadIdx.x;
//data [idx] = data [idx] + 1.0f;
if ( data [idx] == 2.0f )
{
result[0] = data [idx];
result[1] = idx;
}
}
int main ( int argc, char * argv [] )
{
int n = 16 * 1024 * 1024;
int numBytes = n * sizeof ( float );
int size_int = 2 * sizeof ( int );
//timer for host
clock_t start, finish;
double duration;
// allocate host memory
float * a = new float [n];
int * host_res = new int[2];
//init host variables
for ( int i = 0; i < n-1; i++ )
a [i] = 0.0f;
a [n-1] = 2.0f;
host_res [0] = 0;
host_res [1] = 0;
//Выбираем способ расчета
printf("Select compute mode: 1 -
CPU, 2 - GPU\n");
int mode;
scanf("%i", &mode);
if ( mode == CPU )
Жоғары оқу орындарында ақпараттық технологияларды оқыту сапасын жақсарту:
жолдары мен мүмкіндіктері
208
{
start = clock(); //start timer
searchCPU (a, host_res);
finish = clock(); //stop timer
duration = (double)(finish - start)
/
CLOCKS_PER_SEC;
//time
in
seconds
printf( "time spent executing by
the CPU: %.5f seconds\n", duration );
} else
if ( mode == GPU )
{ // allocate device memory
float * dev = NULL;
int * res = NULL;
cudaMalloc
(
(void**)&dev,
numBytes );
cudaMalloc ( (void**)&res, size_int );
//
set
kernel
launch
configuration
dim3 threads = dim3(512, 1);
dim3 blocks = dim3(n / threads.x, 1);
// create cuda event handles
cudaEvent_t start, stop;
float gpuTime = 0.0f;
cudaEventCreate ( &start );
cudaEventCreate ( &stop );
// asynchronously issue work
to the GPU (all to stream 0)
cudaEventRecord ( start, 0 );
//copy data to device
cudaMemcpy ( dev, a, numBytes,
cudaMemcpyHostToDevice );
cudaMemcpy ( res, host_res,
size_int, cudaMemcpyHostToDevice );
//call device function
searchGPU<<
threads>>>(dev,res);
//copy data to host
cudaMemcpy ( host_res, res,
size_int, cudaMemcpyDeviceToHost );
cudaEventRecord ( stop, 0 ); // stop
timer for device
cudaEventSynchronize ( stop );
cudaEventElapsedTime
(
&gpuTime, start, stop ); //gpuTime -
time in miliseconds
// print the gpu times
printf("time spent executing by the
GPU: %.5f seconds\n", gpuTime/1000 );
// release resources (device)
cudaEventDestroy ( start );
cudaEventDestroy ( stop );
cudaFree ( dev );
}
else
{ printf("not correct input"); return
1; }
//print result
printf
(
"value
%i,
index
%i",host_res[0], host_res[1]);
// release resources (host)
delete a;
delete host_res;
return 0;
}
Результаты выполнения программы
Результаты выполнения прог-
рамммы приведены на рисунке 1.
Как видим из рисунка, при первом
запуске программы выбран режим
«CPU»,
т.е.
выполнение
на
центральном процессоре. Время
выполнения программы в этом
случае составило 78 миллисекунд.
При втором запуске был выбран
режим «GPU» - выполнение на
графическом процессоре. При этом,
время выполнения программы
Жоғары оқу орындарында ақпараттық технологияларды оқыту сапасын жақсарту:
жолдары мен мүмкіндіктері
209
Рис. 1 – результат выполнения программы
составило 47 миллисекунд. Как
видим прирост производительности
порядка 40%. Не так уж много.
Однако
время
измерения
выполнения
на
графическом
процессоре измерялось с учетом
копирования исходных данных в
память видеокарты и результата
обратно в ОЗУ. А что если измерить
скорость выполнения без учета
копирования
данных
т.е.
фактическую
скорость
самого
алгоритма? Результат приведен на
рисунке 2.
Как видим из рисунка 2,
результат выполнения программы на
GPU без учета копирования данных
составил около 9 миллисекунд.
Таким образом, «львиная» доля
времени
используется
на
копирование данных в память GPU и
обратно. Но, несмотря на это, все же
достигается
неплохой
прирост
производительности.
Жоғары оқу орындарында ақпараттық технологияларды оқыту сапасын жақсарту:
жолдары мен мүмкіндіктері
210
Рис. 2 – измерение времени выполнения
программы без учета копирования данных
Выводы
Для эффективного использования возможностей CUDA нужно забыть про
обычные методы написания программ для CPU, и использовать те алгоритмы,
которые хорошо распараллеливаются на тысячи потоков, и что очень важно,
если это распараллеливание действительно необходимо. Также важно найти
оптимальное место для хранения данных (регистры, разделяемая память и т.п.),
минимизировать передачу данных между CPU и GPU, использовать
буферизацию.
СПИСОК СОКРАЩЕНИЙ
CUDA
Compute Unified Device Architecture
GPGPU
General-Purpose computing on Graphics Processing Units
GPU
Graphic Processor Unit
CPU
Central Processor Unit
Список литературы
1.
http://www.ixbt.com/video3/cuda-1.shtml
2.
http://www.nvidia.ru
3.
http://www.nvidia.com
Достарыңызбен бөлісу: |