RRZE-HPC / kerncraft

Loop Kernel Analysis and Performance Modeling Toolkit
GNU Affero General Public License v3.0
86 stars 24 forks source link

Merge likwid_bench_auto and machinemodel #45

Open cod3monk opened 7 years ago

cod3monk commented 7 years ago

Allow loading of machine model from current machine, as well as from file.

cod3monk commented 5 years ago

The problem lies with the symbolic comparison of expressions. We will need a comparison function capable of comparing two sympy expressions, assuming that any non-loop-counter variables are of same size, larger than indices and positive:

imprt sympy
M = sympy.Symbol(name='M', positive=True, integer=True)
N = sympy.Symbol(name='N', positive=True, integer=True)
k = sympy.Symbol(name='k', positive=True, integer=True)
i = sympy.Symbol(name='i', positive=True, integer=True)
assert compare(M*M, M) > 0, "M*M > M"
assert compare(2*M, M) > 0, "2*M > M"
assert compare(N*M, M) > 0, "N*M > M"
assert compare(N*(k-1), N*k) < 0, "N*(k-1) < N*k"
assert compare(N*M*i+N*(k-1), N*M*i+N*k) < 0, "N*M*i+N*(k-1), N*M*i+N*k"
assert compare(N*M*(i+1) + N*(k-1), N*M*i+N*k) > 0, "N*M*(i+1)+N*(k-1) > N*M*i+N*k"
try:
    compare(N*(i-1), N*k) > 0
    assert False, "N*(i-1) uncomparable with N*k"
except ValueError:
    pass
try:
    compare(M*k, N*(k+1))
    assert False, "M*k uncomparable with N*(k+1)"
except ValueError:
    pass