Towards an efficient penalty method for convex quadratic programming ∗