  Motivated by the need for adaptive, secure and responsive scheduling in a
great range of computing applications, including human-centered and
time-critical applications, this paper proposes a scheduling framework that
seamlessly adds resource-awareness to any parallel application. In particular,
we introduce a learning-based framework for dynamic placement of parallel
threads to Non-Uniform Memory Access (NUMA) architectures. Decisions are taken
independently by each thread in a decentralized fashion that significantly
reduces computational complexity. The advantage of the proposed learning scheme
is the ability to easily incorporate any multi-objective criterion and easily
adapt to performance variations during runtime. Under the multi-objective
criterion of maximizing total completed instructions per second (i.e., both
computational and memory-access instructions), we provide analytical guarantees
with respect to the expected performance of the parallel application. We also
compare the performance of the proposed scheme with the Linux operating system
scheduler in an extensive set of applications, including both computationally
and memory intensive ones. We have observed that performance improvement could
be significant especially under limited availability of resources and under
irregular memory-access patterns.
