При разработке программ, использующих для вычислений ресурсы GPU, основной проблемой становится их оптимизация. Например, как сделать так, чтобы из 300 пиковых гигафлопс GPU Tesla C2070 хотя бы 100-200 оказались полезными. А ещё лучше — все 400-500.
Проблема усугубляется тем, что какой бы качественной и быстрой ни была бы программа, она всё равно не будет самой оптимальной. Если её перенесли на систему с немного отличным GPU, то все улучшения в плане быстродействия могут оказаться малополезными. Или даже вредными, если целевой GPU имеет другую архитектуру. Более того, даже если расчёты проводятся на той же системе, но для сильно других входных данных, то некоторые из оптимизаций опять могут оказаться бесполезными.
Решением являются подходы к автоподстройке программы под используемую систему, известные под названием autotuning. Суть их заключается в том, что программа во время работы обучается и сама себя подстраивает под полученное «железо». Тем самым повышая производительность и снимая головную боль с разработчика.
Большинство подобных подходов реализованы в инструментарии TTG Apptimizer, ключевой особенностью которого как раз является подстройка программы под связку «железо + входные данные». При этом он умеет «растаскивать» вычисления сразу по всем CPU и GPU, выбирать оптимальную версию вычислительного ядра для каждого устройства, а также производить оптимизацию в соответствии с заданным приоритетом (быстрое обучение, качественная оптимизация, поддержка широкого круга устройств). И много что ещё.
Как показало тестирование, наш инструментарий позволяет на 25-40% ускорить программу, использующую только один GPU, и на 50-200% для приложений, проводящих вычисления сразу на связке CPU+GPUs. С технической информацией можно ознакомиться в данном разделе, а для получения бесплатной Lite-версии достаточно написать письмо на адрес mail@ttgLabs.com.