  A large proportion of jobs submitted to modern computing clusters and data
centers are parallelizable and capable of running on a flexible number of
computing cores or servers. Although allocating more servers to such a job
results in a higher speed-up in the job's execution, it reduces the number of
servers available to other jobs, which in the worst case, can result in an
incoming job not finding any available server to run immediately upon arrival.
Hence, a key question to address is: how to optimally allocate servers to jobs
such that (i) the average execution time across jobs is minimized and (ii)
almost all jobs find at least one server immediately upon arrival. To address
this question, we consider a system with $n$ servers, where jobs are
parallelizable up to $d^{(n)}$ servers and the speed-up function of jobs is
concave and increasing. Jobs not finding any available servers upon entry are
blocked and lost. We propose a simple server allocation scheme that achieves
the minimum average execution time of accepted jobs while ensuring that the
blocking probability of jobs vanishes as the system becomes large ($n \to
\infty$). This result is established for various traffic conditions as well as
for heterogeneous workloads. To prove our result, we employ Stein's method
which also yields non-asymptotic bounds on the blocking probability and the
mean execution time. Furthermore, our simulations show that the performance of
the scheme is insensitive to the distribution of job execution times.
