# Blocking call to NetSolve

In the previous section we explained how the user can obtain information about a problem and its calling sequence. For the call itself, the function NetSolve[] is invoked with the problem name and its arguments. For example,
 ``` In[6]:= NetSolve[iqsort[{7,2,3,5,1}]] contacting server torc0.cs.utk.edu ... Out[6]= {1, 2, 3, 5, 7} ```

As stated earlier the user can pass not only numerical values, but also symbols that contain data of proper type or functions that return a result of this type. Indeed, Mathematica calculates these expressions and passes the arguments by value. For example
 ``` In[7]:= v = -Range[5] Out[7]= {-1, -2, -3, -4, -5} In[8]:= NetSolve[iqsort[v]] contacting server torc0.cs.utk.edu ... Out[8]= {-5, -4, -3, -2, -1}```
or to sort a random vector of size 7
 ``` In[9]:= NetSolve[iqsort[Table[Ceiling[10*Random[]], {7}]]] contacting server torc0.cs.utk.edu ... Out[9]= {1, 2, 2, 2, 4, 6, 7} ```

Since NetSolve[] is a function defined in Mathematica, it can be used in expressions like:
 ``` In[9]:= NetSolve[iqsort[Table[Ceiling[10*Random[]], {7}]]] contacting server torc0.cs.utk.edu ... Out[9]= {1, 2, 2, 2, 4, 6, 7} In[10]:= Print["The minimal element of v is ", NetSolve[iqsort[v]][[1]]] contacting server torc0.cs.utk.edu ... The minimal element of v is -5 ```

Let us consider a more complex problem such as the Level 3 BLAS subroutine dgemm[] which calculates where \$op(X) = X\$ or \$op(X) = X'\$.

The routine dgemm[] requires the following 7 arguments.

Let us generate three random matrices.
 ``` In[11]:= RandomMatrix[m_,n_] := Table[Ceiling[10*Random[]], {m}, {n}] In[12]:= a = RandomMatrix[2,3] Out[12]= {{9, 2, 3}, {6, 3, 9}} In[13]:= b = RandomMatrix[3,2] Out[13]= {{6, 4}, {4, 10}, {2, 9}} In[14]:= c = RandomMatrix[2,2] Out[14]= {{4, 7}, {4, 8}}```
and call dgemm[].
 ``` In[15]:= NetSolve[dgemm["N", "N", 2, a, b, 3, c]] contacting server cetus2a.cs.utk.edu ... Out[15]= {{148., 187.}, {144., 294.}} In[16]:= 2 a . b + 3 c Out[16]= {{148, 187}, {144, 294}} ```