«Простой» способ применения GCD в случае вложенных циклов состоит в том, чтобы применять его только в тех случаях, когда сами массивы являются многомерными;исходный код использует несколько индексов, а не уже линеаризованные выражения.Конечно, если вы можете «обратно преобразовать» эти линеаризованные индексы, у вас будет эквивалент.
После того, как вы поставили задачу как проблему с множеством множителей, вы можете просто применить тест GCD «измерение за измерением».,Если какое-либо измерение не показывает никакой зависимости, то вы можете остановиться и объявить, что для всей последовательности многополюсной подписки не существует никакой зависимости.
Ключ, конечно, заключается в том, что приведение к задаче многомерного индексирования дает вам приятное свойство:сопоставление между отдельными значениями индекса и соответствующими кортежами выражений индекса.Без этого проблема сложнее.
Это подход, который я использовал в векторизованном компиляторе ASC Fortran еще в 70-х годах, и он работал довольно хорошо, особенно в сочетании с направленным анализом индексов для непересекающегося случая.Сам по себе GCD-тест действительно недостаточен, но он дает вам относительно недорогой способ раннего принятия решения в анализе в тех случаях, когда вы можете избежать более дорогостоящего анализа зависимостей.