Обсуждение статьи "OpenCL: от наивного кодирования - к более осмысленному" - страница 2

 
denkir: Можно было добавить например какой-нибудь статистический расчёт.

Уже собираюсь сделать это, (скорее всего) будет как раз сбор статистики на большой истории. К мувам, правда, не имеет никакого отношения. Ненавижу мувы - имею на это право :)

Синхронизировать котировки.

Это задача скорее для CPU, а не GPU. Для GPU ведь явно не каждая задачка подходит, так ведь? А лучше выбрать такую, чтобы подходила, т.к. GPU именно для этого и нужен.

Это будет двумерный массив.

Предполагаю, что в будущей статье будет трехмерный. Заодно станет понятно, как работать с буфером GPU, отображающим массив любой размерности.

 
Mathemat:

Уже собираюсь сделать это, (скорее всего) будет как раз сбор статистики на большой истории...

Предполагаю, что в будущей статье будет трехмерный. Заодно станет понятно, как записывать в буфер GPU массив любой размерности и как с ним работать.

здОрово! Будем ждать...

 
denkir: Взять историю котировок по всем инструментам в терминале. Допустим минутную.  Синхронизировать котировки.

А что, их еще и синхронизировать надо?

P.S. Почитал справку, вижу, что надо.

 

Пересчитал результаты статьи с учетом обновления железа.

Было год назад: CPU Intel Pentium G840 (2 ядра @ 2.8 GHz) + видеокарта AMD HD4870

Стало недавно: CPU Intel Xeon E3-1230v2 (4 ядра/8 потоков @ 3.3 GHz; чуть отстает по производительности от i7-3770) + видеокарта AMD HD6870.

Результаты расчетов в OpenCL показаны на графике (по горизонтали - номер оптимизации, примененной в статье):


Время вычислений показано по вертикали в секундах. Время исполнения скрипта "в одно дуло на ЦПУ" (на одном ядре, без OpenCL) колебалось в зависимости от изменений алгоритма в пределах 95 плюс-минус 25 сек.

Как видим, все вроде понятно, но все же не очень очевидно.

Явный аутсайдер - двухъядерник G840. Ну так оно и ожидалось. Дальнейшие оптимизации не слишком изменяли время исполнения, которое колебалось в районе от 4 до 5.5 секунд. Отметим, что даже в этом случае ускорение исполнения скрипта достигало значений свыше 20 раз.

В соревновании между двумя видеокартами разных поколений - древней HD4870 и более современной HD6870 - можно почти считать, что победа за 6870. Не считая последнего этапа оптимизации, на котором древний монстр 4870 все же вырвал номинальную победу (хотя почти все время отставал). Причины, откровенно говоря, неясны: и шейдеров поменьше, и частота их тоже ниже - а все же выиграла.

Будем считать, что это капризы развития поколений видеокарт. Или ошибка в моем алгоритме :)

Откровенно порадовал Xeon, который умудрился на всех оптимизациях быть лучше древней 4870, да и с 6870 сражался практически на равных, а в конце умудрился даже победить всех. Я не говорю, что так будет всегда, на любых задачах. Но ведь и задача была вычислительно совсем непростой - все-таки это умножение двух матриц размером 2000 х 2000!

Вывод прост: если у вас уже есть приличный CPU типа i7, а вычисления на OpenCL не слишком долгие, то, может, в дополнительной мощной грелке (видеокарте) и нет особой необходимости? С другой стороны, загрузка камня на 100% в течение десятков секунд (при долгих вычислениях) - это не очень приятно, т.к. компьютер на это время "теряет отзывчивость".

Причина обращения: