ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 марта
740101 Топик полностью
Ксения (28.02.2017 12:12, просмотров: 837) ответил =AlexD= на Загрузить ресурсы на 100% очень сложно. Может быть в каких-то синтетических тестах. В реальной жизни префетч срабатывает не со 100% точностью, и как минимум приходится ждать данные из памяти. И вероятность того, что пока один поток ждёт память,
А у меня впечатление, что ресурсы исчерпываются очень быстро. Помните наш разговор, где я про число тактов и латентность спрашивала? Так вот я последовала вашему совету, перейти от теоретических расчетов к практическому измерению скорости выполнения. Результат оказался весьма неожиданным - цикл, состоящий из 3-х FPU операций и 2-х целочисленных операций зацикливания (декремент счетчика + условный переход) занял всего 3 такта! Т.е. сам цикл на ассемблере совершал 500 оборотов, а снаружи эту функцию крутил цикл for на С++ один миллион раз. Тем самым, внутренний цикл выполнялся за время теста пол миллиарда раз, затем я это время делила на пол миллиарда и умножала на частоту процессора. Результат 3 такта на оборот позволяет думать, что именно эти 3 FPU-операции и потребляют основное время, тогда как остальные издержки заметного влияния на результат не оказывают, поскольку повторяются гораздо меньшее число раз. А если так, то именно эти 3 FPU-операции занимают основное время теста, фактически не позволяя FPU ни простаивать, ни совмещать работу на стороне. Обращаю внимание, что мой тест не произволен, т.к. в практическом плане все алгебраические вычисления на матрицах повисают на на одной и той же паре операций. Это dot (скалярное произведение двух векторов - умножение со сложением в цикле) и axpy (вычитание из одного вектора второго, умноженного на коэффициент - умножение с вычитанием в цикле). В вычислительном плане dot и axpy эквивалентны - состоят из одного и того же числа операций. А мой тест - это реализация функции dot. Отсюда и мое столь пристальное внимание к ассемблеру, т.к. вычислительная производительность в основном зависит только от того, насколько аккуратно будут написаны эти две функции.