У меня есть алгоритм, который опирается на ок. 15 различных представлений array_view и 8 различных вызовов ядра AMP for_each. Природа алгоритма заключается в том, что все данные копируются в GPU, а затем набор вызовов ядра выполняется снова и снова, пока не будет достигнут некоторый порог. Примечание. Я еще не реализовал пороговую логику, которая потребовала бы возврата данных обратно в ЦП.
Полный набор вызовов ядра называется циклом. В промежутках между каждым циклом я не ссылаюсь ни на какие данные 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 (мс) Выход..... Нажмите любую клавишу, чтобы продолжить . . .