Анализ коалесценции памяти в llvm

Я пытаюсь выполнить коалесцирующий анализ для программы, используя анализ LLVM.

По сути, мне нужно посмотреть на доступ к массиву и выяснить, можно ли объединить доступ к памяти, т. Е. Если выражение доступа монотонно относительно индукционной переменной.

Я сталкиваюсь со следующей проблемой. Доступ к массиву выражается в терминах инструкции getelementptr в LLVM IR. Как я могу восстановить выражение оттуда?

Если это невозможно с помощью статического анализа, я тоже готов выполнять динамический анализ.

Если это поможет, я пытаюсь реализовать следующий алгоритм:

procedure getCoalescingFactor(f, warpSize, reqLineSize)
x ← the variable that corresponds to the x grid coordinate
fw ← f where all variables are fixed except x grid coordinate
mono ← monotonicity(fw , x)
if mono is unknown then
culprits ← variables in fw which do not have a sign
fw ← fw where each variable in culprits is assumed positive
mono ← monotonicity(fw , x)
end if
if mono is monotonic then
if mono is increasing then
size ← f (x + warpSize) − f (x)
else
size ← f (x) − f (x + warpSize)
end if
return reqLineSize
else
offsets ← [fw (x), fw (x + 1), . . . , fw (x + warpSize)]
uniqOffsets ← removeDuplicates(offsets)
return size(uniqOffsets)
end if
end procedure

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]