To solve Martin's investment problem, we need to formulate a linear programming model. The goal is to maximize the total return on investment while satisfying all given constraints.

Let's denote:
- \(x_{GPUs}\) as the amount invested in GPUs,
- \(x_{CPUs}\) as the amount invested in CPUs,
- \(x_{Software}\) as the amount invested in software,
- \(x_{MobileDevices}\) as the amount invested in mobile devices.

The objective function to maximize is the total return, given by:
\[0.04x_{GPUs} + 0.06x_{CPUs} + 0.11x_{Software} + 0.08x_{MobileDevices}\]

The constraints are:
1. The total amount invested cannot exceed $2,000,000:
\[x_{GPUs} + x_{CPUs} + x_{Software} + x_{MobileDevices} \leq 2000000\]
2. The amount invested in GPUs cannot exceed the amount invested in CPUs:
\[x_{GPUs} \leq x_{CPUs}\]
3. The amount invested in mobile devices cannot exceed the amount invested in software:
\[x_{MobileDevices} \leq x_{Software}\]
4. At most 9% of the investment can be in GPUs:
\[x_{GPUs} \leq 0.09 \times 2000000\]
\[x_{GPUs} \leq 180000\]

Now, let's write the Gurobi code to solve this problem:

```python
from gurobipy import *

# Create a new model
m = Model("Investment")

# Define variables
x_GPUs = m.addVar(lb=0, name="GPUs")
x_CPUs = m.addVar(lb=0, name="CPUs")
x_Software = m.addVar(lb=0, name="Software")
x_MobileDevices = m.addVar(lb=0, name="MobileDevices")

# Objective function: Maximize return
m.setObjective(0.04*x_GPUs + 0.06*x_CPUs + 0.11*x_Software + 0.08*x_MobileDevices, GRB.MAXIMIZE)

# Constraints
m.addConstr(x_GPUs + x_CPUs + x_Software + x_MobileDevices <= 2000000, "Total Investment")
m.addConstr(x_GPUs <= x_CPUs, "GPUs vs CPUs")
m.addConstr(x_MobileDevices <= x_Software, "Mobile Devices vs Software")
m.addConstr(x_GPUs <= 180000, "Max GPUs")

# Optimize model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"GPUs: {x_GPUs.X}")
    print(f"CPUs: {x_CPUs.X}")
    print(f"Software: {x_Software.X}")
    print(f"Mobile Devices: {x_MobileDevices.X}")
else:
    print("No optimal solution found")
```