Инженерная методика адаптации приложения к гибридному кластеру с ускорителями на ПЛИС

11. Простейшие приемы проверки правильности работы гибридно - параллельного приложения.

С. С. Андреев, С. А. Дбар, А. О. Лацис, Е. А. Плоткина

Как уже отмечалось выше, гибридно - параллельное приложение должно выполнять строго те же вычисления, что и являющаяся его прототипом последовательная программа (даже если прототип существует только в голове у программиста). Разрабатывая гибридные приложения, за этим приходится постоянно следить, причем дважды – при разбиении работы на ветви и при переходе от программной реализации вычислительных ядер к схемной.

Критерий корректности параллельной программной реализации хорошо известен. Любой вариант программы должен на одних и тех же исходных данных давать строго идентичные (бит в бит) результаты, независимо от используемого числа ветвей параллельной программы. Для рассмотренного здесь модельного приложения в этом можно убедиться, сравнивая результирующие файлы «.dat» командой diff. Обратим внимание на то, что в нашей программе легко, то есть без изменения ее логики, могут быть реализованы 2 варианта вывода результирующего файла – в двоичном и в текстовом виде. Для проверки корректности параллельной реализации лучше использовать двоичный формат результирующих файлов.

При использовании ускорителей инвариантность результатов относительно числа ветвей параллельной программы, конечно, тоже должна иметь место, и для проверки тоже имеет смысл использовать двоичный формат результирующих файлов. Зачем же, в таком случае, кроме очевидных целей первоначальной отладки, предусмотрен еще и текстовый формат? Дело в том, что часто приходится сравнивать между собой программную и схемную реализации одного и того же расчета. Добиться в этом случае строго одинаковых режимов округления в обоих случаях можно, но это отдельная задача, которую далеко не всегда хочется решать, но абсолютно всегда хочется отделить от собственно отладки. Чтобы исключить из рассмотрения немногочисленные малые отличия в младших битах, эти отличия надо либо скрыть, либо, наоборот, предъявить пользователю явно, чтобы он мог сам решить, насколько эти отличия существенны. Такие проверки на почти полное совпадение результатов программных и схемных вычислений целесообразно проводить на минимальном, чисто символическом, числе итераций, со сравнением результатов в текстовом виде. Результаты должны либо совпасть, либо отличаться в небольшом числе значений, в младшем знаке. Обычно самого преобразования данных в текстовый вид бывает достаточно, чтобы подавить «дребезг» младших разрядов и убедиться в том, что схема работает логически правильно.

Тем не менее, систематические (например, в строке, столбце, группе строк) «не очень существенные» различия в результатах программных и схемных расчетов должны настораживать всегда. В 99.9% случаев они маскируют грубую программную ошибку.

◄ Часть 10 Приложение 1 ►
 
 
 
 
 
 
 
 
  Тел. +7(499)220-79-72; E-mail: inform@kiam.ru