Here is an outline of such a procedure.

Checking that a vertex $u$ is a top one can be done by solving a linear program, as follows:
write $p$ in baricentric coordinates, i.e. $p=p_x=\sum_{v\in V} x_v v$, $x_v\geq 0$ for any $v\in V$, and
$\sum_{v\in V} x_v=1$ (I denote by $V$ the set of vertices of the simplex).
To check $u$ is top is equivalent to checking that there exists $x=(x_{v_1},\dots,x_{v_{|V|}})$
satisfying $x\geq 0$, $\sum_{v\in V} x_v=1$, $u\geq p_x$, and $x_u<1$.

So you solve the linear program 
$$\min x_u 
\text{ subject to $x\geq 0$, $\sum_{v\in V} x_v=1$, $u\geq p_x$},$$ 
and it can be done in polynomial time. If the value of the objective is strictly less than 1 then $u$ is top.

Testing for $u$ to be bottom is essentially the same, just replace the inequalities $u\geq p_x$ by $u\leq p_x$.

Finally, do this for each vertex.