Оптимизаторы, сэр
От: Codealot Земля  
Дата: 29.09.20 17:16
Оценка: :)
Попался мне на глаза студенческий курсач, в котором нужно было перемалывать числа. Чтобы работало быстрее — на GPGPU.
Что-то показалось мне в коде подозрительным, я немного его поковырял, и выяснилось, что эта "оптимизированная" версия работает в 10 (!) раз медленнее, чем самая примитивная однопоточная версия на CPU практически без оптимизаций.

А потом эти студенты идут интернами в Майкрософт и Гугл...
Ад пуст, все бесы здесь.
Отредактировано 29.09.2020 18:02 Codealot . Предыдущая версия .
Re: Оптимизаторы, сэр
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 29.09.20 18:21
Оценка:
Здравствуйте, Codealot, Вы писали:

C>Попался мне на глаза студенческий курсач, в котором нужно было перемалывать числа...


Пруфы?
Re[2]: Оптимизаторы, сэр
От: Codealot Земля  
Дата: 29.09.20 18:41
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Пруфы?


В смысле, хочешь на код посмотреть?
Ад пуст, все бесы здесь.
Re: Оптимизаторы, сэр
От: yenik  
Дата: 29.09.20 19:09
Оценка: +5
Курсовые не для того пишутся, чтобы прямо сразу пользу человечеству принести, а для того, чтобы студент знания приобрел.
Так и иные проектики мутятся не для того, чтобы пользу работодателю принести...
Re[2]: Оптимизаторы, сэр
От: Codealot Земля  
Дата: 29.09.20 19:17
Оценка: +1
Здравствуйте, yenik, Вы писали:

Y>а для того, чтобы студент знания приобрел.


Ага. Вот такие и знания.
Ад пуст, все бесы здесь.
Re[3]: Оптимизаторы, сэр
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 29.09.20 21:28
Оценка:
Здравствуйте, Codealot, Вы писали:

N>>Пруфы?

C>В смысле, хочешь на код посмотреть?

Да
Re[4]: Оптимизаторы, сэр
От: Codealot Земля  
Дата: 29.09.20 23:54
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Да


Ты разбираешься в OpenCL?
Ад пуст, все бесы здесь.
Re[5]: Оптимизаторы, сэр
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 30.09.20 03:10
Оценка:
Здравствуйте, Codealot, Вы писали:

N>>Да

C>Ты разбираешься в OpenCL?

Да, я даже работал когда-то программистом на OpenCL
Re[6]: Оптимизаторы, сэр
От: Codealot Земля  
Дата: 30.09.20 04:19
Оценка:
Здравствуйте, Nuzhny, Вы писали:

N>Да, я даже работал когда-то программистом на OpenCL


Ну тогда жду твоего веского мнения. Видеокарта — RX 580, если от этого что-то зависит.

http://files.rsdn.org/138247/mult.c
Ад пуст, все бесы здесь.
Re[3]: Оптимизаторы, сэр
От: yenik  
Дата: 30.09.20 06:58
Оценка: +1
Y>>а для того, чтобы студент знания приобрел.

C>Ага. Вот такие и знания.


Настоящее знание не сразу приходит. Был бы ум пытливый.
Re: Оптимизаторы, сэр
От: Michael7 Россия  
Дата: 30.09.20 07:24
Оценка: 1 (1)
Здравствуйте, Codealot, Вы писали:

C>Попался мне на глаза студенческий курсач, в котором нужно было перемалывать числа. Чтобы работало быстрее — на GPGPU.

C>Что-то показалось мне в коде подозрительным, я немного его поковырял, и выяснилось, что эта "оптимизированная" версия работает в 10 (!) раз медленнее, чем самая примитивная однопоточная версия на CPU практически без оптимизаций.

Интересно, читают ли сейчас студенты книги вроде Б.Керниган, Р.Пайк. Практика программирования. Там немало времени уделено показу того, как можно оптимизацией алгоритма ускорить работу программы в десятки и более раз.
Re: Оптимизаторы, сэр
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 30.09.20 07:48
Оценка: +6 :)))
Здравствуйте, Codealot, Вы писали:

C>Попался мне на глаза студенческий курсач, в котором нужно было перемалывать числа. Чтобы работало быстрее — на GPGPU.

C>Что-то показалось мне в коде подозрительным, я немного его поковырял, и выяснилось, что эта "оптимизированная" версия работает в 10 (!) раз медленнее, чем самая примитивная однопоточная версия на CPU практически без оптимизаций.

C>А потом эти студенты идут интернами в Майкрософт и Гугл...



А ты, конечно, будучи студентом всё сходу в 10 раз ускорял... а тут, молодежь не такая пошла. Я угадал?
Отредактировано 30.09.2020 14:35 kaa.python . Предыдущая версия .
Re[7]: Оптимизаторы, сэр
От: itmanager85  
Дата: 30.09.20 08:01
Оценка: 2 (1)
Здравствуйте, Codealot, Вы писали:

N>>Да, я даже работал когда-то программистом на OpenCL


C>Ну тогда жду твоего веского мнения. Видеокарта — RX 580, если от этого что-то зависит.


C>http://files.rsdn.org/138247/mult.c


MAX_BATCH_SIZE слишком маленький, должен быть в данном конкретном случае равен DATA_SIZE .. (т.е. за один проход видяха должна вычислять, ибо в данном случае 4 GB VRAM — для этого более, чем достаточно — массивы займут 768 MB VRAM)

да и возможно с учётом перегонки туда сюда (RAM->VRAM->RAM) вообще на таких простейших вычислениях особо и не ускоришь — по сравнению с CPU .. (т.е. даже для оптимального GPGPU варианта)
Отредактировано 30.09.2020 8:03 itmanager85 . Предыдущая версия . Еще …
Отредактировано 30.09.2020 8:02 itmanager85 . Предыдущая версия .
Re[7]: Оптимизаторы, сэр
От: Muxa  
Дата: 30.09.20 08:03
Оценка: 1 (1)
N>>Да, я даже работал когда-то программистом на OpenCL
C>Ну тогда жду твоего веского мнения. Видеокарта — RX 580, если от этого что-то зависит.
C>http://files.rsdn.org/138247/mult.c

Я за него:
1.
#define DATA_SIZE (64 * 1024 * 1024)
#define MAX_BATCH_SIZE (16 * 1024)

не нужно в данном случае — тормоза на ровном месте

2. в замер времени также попало
а. выделение памяти на GPU (неявно)
б. копирование массивов туда-сюда (явно)
в. отложенная инициализация кернела (неявно)

а так — да, ради одного поэлементного перемножения двух массивов использовать GPU явно перебор.
Re[8]: Оптимизаторы, сэр
От: itmanager85  
Дата: 30.09.20 08:15
Оценка:
Здравствуйте, Muxa, Вы писали:

M>2. в замер времени также попало

M>а. выделение памяти на GPU (неявно)

выделение VRAM буфферов — до засечки таймера

M>б. копирование массивов туда-сюда (явно)


а без этого никак по сравнению с CPU — это время должно считаться, ибо на CPU — нет необходимости перекопировать массивы

M>в. отложенная инициализация кернела (неявно)


ну это да, опционально — хотя и вряд ли много жрёт, но по сравнению с батчем (MAX_BATCH_SIZE) и его тормозами, так и ваще ерунда

M>а так — да, ради одного поэлементного перемножения двух массивов использовать GPU явно перебор.


слыхал в AI матрицы много перемножпются, вот там да — прирост так прирост (особенно на тензорах) на новых видяшках
Re[9]: Оптимизаторы, сэр
От: Muxa  
Дата: 30.09.20 08:20
Оценка:
M>>2. в замер времени также попало
M>>а. выделение памяти на GPU (неявно)
I>выделение VRAM буфферов — до засечки таймера
До засечки создаются пустые объекты буферов, фактическое выделение откладывается к моменту первого использования.

M>>б. копирование массивов туда-сюда (явно)

I>а без этого никак по сравнению с CPU — это время должно считаться, ибо на CPU — нет необходимости перекопировать массивы
Зато на CPU есть необходимость, к примеру, прочитать входные данные с диска, а потом сохранить обратно. Не в этом случае, а вообще.
Тоже будем это время учитывать? И если нет, то почему?
Отредактировано 30.09.2020 8:23 Muxa . Предыдущая версия . Еще …
Отредактировано 30.09.2020 8:23 Muxa . Предыдущая версия .
Re[7]: Оптимизаторы, сэр
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 30.09.20 08:24
Оценка:
Здравствуйте, Codealot, Вы писали:

N>>Да, я даже работал когда-то программистом на OpenCL

C>Ну тогда жду твоего веского мнения. Видеокарта — RX 580, если от этого что-то зависит.
C>http://files.rsdn.org/138247/mult.c

Ха-ха-ха!
Это даже на лабораторную не тянет, просто минимальный пример. В OpenCL надо писать кучу кода, чтобы его просто запустить. Но этот пример — пустышка, на его примере глупо делать какие-то выводы.
Re[7]: Оптимизаторы, сэр
От: CreatorCray  
Дата: 30.09.20 08:25
Оценка:
Здравствуйте, Codealot, Вы писали:

C>http://files.rsdn.org/138247/mult.c

Гы, классика! Там одна тока передача данных в видюху займёт больше чем всё на CPU посчитать.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[10]: Оптимизаторы, сэр
От: itmanager85  
Дата: 30.09.20 08:33
Оценка: +1
Здравствуйте, Muxa, Вы писали:

I>>выделение VRAM буфферов — до засечки таймера

M>До засечки создаются пустые объекты буферов, фактическое выделение откладывается к моменту первого использования.

откуда инфа ? если что, не оспариваю — но не слыхал о таком ..

I>>а без этого никак по сравнению с CPU — это время должно считаться, ибо на CPU — нет необходимости перекопировать массивы

M>Зато на CPU есть необходимость, к примеру, прочитать входные данные с диска, а потом сохранить обратно. Не в этом случае, а вообще.

а в случае GPU — нет такой необходимости или что ?

M>Тоже будем это время учитывать? И если нет, то почему?


обычно GPGPU вычисления применяются к тем данным и вычислениям, где упора в диск нет ..
Re[11]: Оптимизаторы, сэр
От: Muxa  
Дата: 30.09.20 08:42
Оценка:
I>>>выделение VRAM буфферов — до засечки таймера
M>>До засечки создаются пустые объекты буферов, фактическое выделение откладывается к моменту первого использования.
I>откуда инфа ? если что, не оспариваю — но не слыхал о таком ..
Официально — ниоткуда.
Косвенно — из личного опыта и, например, отсюда https://www.khronos.org/registry/OpenCL/sdk/2.2/docs/man/html/clEnqueueNDRangeKernel.html
clEnqueueNDRangeKernel returns one of the following errors:
CL_​MEM_​OBJECT_​ALLOCATION_​FAILURE if there is a failure to allocate memory for data store associated with image or buffer objects specified as arguments to kernel.

тоже самое для
clEnqueueReadBuffer and clEnqueueWriteBuffer return one of the following errors:
CL_​MEM_​OBJECT_​ALLOCATION_​FAILURE if there is a failure to allocate memory for data store associated with buffer.

I>>>а без этого никак по сравнению с CPU — это время должно считаться, ибо на CPU — нет необходимости перекопировать массивы
M>>Зато на CPU есть необходимость, к примеру, прочитать входные данные с диска, а потом сохранить обратно. Не в этом случае, а вообще.
I>а в случае GPU — нет такой необходимости или что ?
Иногда есть. Учитывать или нет?

M>>Тоже будем это время учитывать? И если нет, то почему?

I>обычно GPGPU вычисления применяются к тем данным и вычислениям, где упора в диск нет ..
Часто просчитанные данные нужно просто отобразить на мониторе.
Учитывать ли в данном случае это копирование в расчетах на СPU?
Отредактировано 30.09.2020 8:47 Muxa . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.