GPU: Make runtime error test portable to HIP

Use a null source with a nonzero copy size so both CUDA and HIP report InvalidValue while preserving the error count and diagnostic checks. HIP can accept the previous pair of host pointers.

Correct the GPU guide to locate LAUNCH_GPU_KERNEL in TensorDeviceGpu.h and its gpu_launch helper in GpuRuntime.h.
diff --git a/.agents/simd-gpu.md b/.agents/simd-gpu.md
index 1b46a10..9266fff 100644
--- a/.agents/simd-gpu.md
+++ b/.agents/simd-gpu.md
@@ -69,9 +69,10 @@
 `contrib/Eigen/Tensor` evaluates expressions through an explicit device. `GpuDevice` handles CUDA/HIP and
 `SyclDevice` handles SYCL; Tensor GPU kernels remain part of the Tensor implementation. Device-resident storage is
 normally supplied through `TensorMap`, and the destination selects execution with `out.device(device) = expression`.
-Host-side runtime calls in the device go through `EIGEN_GPU_RUNTIME_CHECK` and kernel launches through
-`LAUNCH_GPU_KERNEL` (both from `Eigen/src/Core/util/GpuRuntime.h`); a result stored into a variable that only a
-`gpu_assert` inspects is unchecked in every release build.
+Host-side runtime calls in the device go through `EIGEN_GPU_RUNTIME_CHECK` in `Eigen/src/Core/util/GpuRuntime.h`.
+Kernel launches use `LAUNCH_GPU_KERNEL` in `contrib/Eigen/src/Tensor/TensorDeviceGpu.h`, which forwards to
+`internal::gpu_launch` in `GpuRuntime.h`. A result stored into a variable that only a `gpu_assert` inspects is
+unchecked in every release build.
 Consult `contrib/Eigen/src/Tensor/README.md` and the nearby device implementation before changing memory,
 synchronization, or callback semantics.
 
diff --git a/contrib/test/tensor_gpu_runtime_check.cu b/contrib/test/tensor_gpu_runtime_check.cu
index 42576aa..4a238c4 100644
--- a/contrib/test/tensor_gpu_runtime_check.cu
+++ b/contrib/test/tensor_gpu_runtime_check.cu
@@ -92,10 +92,9 @@
   Eigen::GpuDevice device(&stream);
   g_num_gpu_errors = 0;
 
-  int host_src = 0;
   int host_dst = 0;
-  // A host pointer is not a device source for a device-to-host copy.
-  device.memcpyDeviceToHost(&host_dst, &host_src, sizeof(int));
+  // HIP can accept a host source here; a null source with a nonzero size is invalid on both runtimes.
+  device.memcpyDeviceToHost(&host_dst, nullptr, sizeof(int));
   VERIFY_IS_EQUAL(g_num_gpu_errors, 1);
   VERIFY_IS_EQUAL(g_last_gpu_error.code, kInvalidValue);
   VERIFY(g_last_gpu_error.expression.find("gpuMemcpyAsync") == 0);