Ответы пользователя по тегу GPGPU
  • Почему процессоры gpu не любят разветвлений в программе?

    @vadimr
    Процессор GPU выполняет так называемую векторно-конвейерную обработку. Это означает, что у него имеется набор конвейеров для векторов, то есть связанных между собой функциональных узлов, которые по очереди совершают однотипные операции над элементами массивов. Представьте себе конвейер на автомобильном заводе – на первом рабочем месте на шасси привинтили двигатель, потом конвейер подвинулся, стали там же прикручивать двигатель на следующее шасси, а на первое шасси в это время на втором рабочем месте устанавливают коробку передач, и т.д. Так же и в векторно-конвейерном процессоре. Он построен на том, что на каждом этапе конвейера выполняются одинаковые операции над разными элементами вектора. Компилятор разворачивает операции с массивами или простой цикл в такую конвейерную обработку. А если там будут условные операторы, всё сломается. Получится, что рабочий иногда должен монтировать двигатель, а иногда клетку с хомячком вместо него. Разброд и шатания, тем более, что эти операции могут быть разными по продолжительности. Конвейер так не работает. Поэтому условная операция будет вызывать очень длительную перенастройку контейнера на новую последовательность операций обработки.
    Ответ написан
    4 комментария