У меня есть алгоритм, который опирается на прибл. 15 разных array_views и 8 разных вызовов ядра for_each AMP. Природа алгоритма заключается в том, что все данные копируются в графический процессор, а затем набор вызовов ядра выполняется снова и снова, пока не будет достигнут некоторый порог. Примечание. Я еще не реализовал пороговую логику, которая потребовала бы возврата данных в ЦП.
Полный набор вызовов ядра называется циклом. В промежутке между циклами я не ссылаюсь ни на какие данные array_view на ЦП …. поэтому я не ожидаю никакого перемещения данных обратно на ЦП. Однако производительность циклов не является регулярной. Большую часть времени циклы занимают 10 или около того миллисекунд, но затем каждый 3-й или 4-й цикл (или иногда вплотную) цикл занимает 400 или 500 миллисекунд. Внутренняя логика вызовов ядра всегда одинакова ….. поэтому увеличенное время выполнения не связано с логикой графического процессора.
Что может быть причиной резкого увеличения времени для некоторых циклов? Смотрите пример времени ниже.
Время завершения первого цикла 503,278 (мс)
Это время включает в себя издержки инициализации AMP, компиляции ядра и данных
движение в ГПУ.
Время для завершения еще 1 цикла: 11,3105 (мс)
Время для завершения еще 2 циклов: 10,7455 (мс)
Время для завершения еще 3 циклов: 538,668 (мс)
Время для завершения еще 4 циклов: 13.3055 (мс)
Время для завершения еще 5 циклов: 14,4544 (мс)
Время для завершения еще 6 циклов: 12,353 (мс)
Время для завершения еще 7 циклов: 17,5154 (мс)
Время для завершения еще 8 циклов: 755,255 (мс)
Время для завершения еще 9 циклов: 11,7461 (мс)
Время для завершения еще 10 циклов: 14,6612 (мс)
Время для завершения еще 11 циклов: 417,788 (мс)
Время для завершения еще 12 циклов: 399,167 (мс)
Время для завершения еще 13 циклов: 12,2898 (мс)
Время для завершения еще 14 циклов: 16,9694 (мс)
Время для завершения еще 15 циклов: 151,228 (мс)
Время для завершения еще 16 циклов: 404,659 (мс)
Время для завершения еще 17 циклов: 10,4977 (мс)
Время для завершения еще 18 циклов: 15,7178 (мс)
Время для завершения еще 19 циклов: 207,768 (мс)
Время для завершения еще 20 циклов: 511,538 (мс)
Время для завершения еще 21 цикла: 14,4339 (мс)
Время для завершения еще 22 циклов: 252,77 (мс)
Время для завершения еще 23 циклов: 504,565 (мс)
Время для завершения еще 24 циклов: 12,6931 (мс)
Время для завершения еще 25 циклов: 15,5403 (мс)
Время для завершения еще 26 циклов: 303,68 (мс)
Время для завершения еще 27 циклов: 440,331 (мс)
Время для завершения еще 28 циклов: 8,63698 (мс)
Время для завершения еще 29 циклов: 13,9312 (мс)
Время для завершения еще 30 циклов: 755,637 (мс)
Выход ……
Нажмите любую клавишу для продолжения . , ,
Задача ещё не решена.
Других решений пока нет …