public void KroneckerProduct()
        {
            Vector u = new Vector(128, 0.01);

            DeviceManager.CheckDeviceSanity();
            var _u = u.Get <float>();

            Vector v = new Vector(64, 0.02);

            DeviceManager.CheckDeviceSanity();
            var _v = v.Get <float>();

            var A = ColumnWiseMatrix.KroneckerProduct(u, v, 2.0);

            DeviceManager.CheckDeviceSanity();
            var _A = A.GetMatrix <float>();

            for (int i = 0; i < A.nRows; ++i)
            {
                for (int j = 0; j < A.nCols; ++j)
                {
                    double expected = 2.0 * _u[i] * _v[j];
                    double err      = Math.Abs(expected - _A[i, j]);
                    Assert.IsTrue(err <= 5e-4, String.Format("i({0}) j({1}) err({2})", i, j, err));
                }
            }
        }