#gpu #cpu #gpgpu #cpu-cache #xla
#графический процессор #процессор #gpgpu #cpu-кэш #xla
Вопрос:
Я понимаю, что XLA выполняет автоматическое слияние ядер для вычислительного графика, что удобно для уменьшения использования полосы пропускания памяти на графическом процессоре. Какие выгоды можно получить, используя XLA для процессора? Это тот же принцип, при объединении вычислений и не записи промежуточных результатов в кэш L1? Я был бы признателен за объяснение непрофессионалов.
Ответ №1:
Да, в основном это то, что вы сказали.
В общем, чем больше информации (или «контекста») у вас, как у компилятора, о наборе вычислений, тем лучше вы можете их оптимизировать.
Как указано на странице XLA, единственной наиболее важной особенностью XLA является fusion.
Вместо вычисления x y*z
как двух отдельных операций, его можно вычислить как единую операцию с объединенным умножением-сложением.
Это не только быстрее (как правило), но и позволяет избежать промежуточных результатов, которые могут иметь меньшую точность и должны быть где-то сохранены.
Вероятно, модель TensorFlow работает, извлекая набор данных из памяти и выполняя над ним одно из определенного набора ядер, сохраняя каждый частичный результат обратно в память, чтобы следующее ядро могло его использовать.
С помощью XLA шаблоны линейной алгебры распознаются и дополнительно оптимизируются путем объединения одного или нескольких ядер вместе, избегая ненужного перемещения из памяти в память.
Современные основные процессоры поддерживают «векторы» (на жаргоне: SIMD), а некоторые поддерживают операции LA, как это делают графические процессоры.
Так что да, это тот же принцип (хотя графические процессоры могут выполнять гораздо больше операций LA параллельно, поэтому выигрыш там больше).