/// <summary>
		/// Create new sparse solve instance
		/// </summary>
		public CudaSolveSparse()
		{
			_handle = new cusolverSpHandle();
			res = CudaSolveNativeMethods.Sparse.cusolverSpCreate(ref _handle);
			Debug.WriteLine(String.Format("{0:G}, {1}: {2}", DateTime.Now, "cusolverSpDestroy", res));
			if (res != cusolverStatus.Success) throw new CudaSolveException(res);
		}
			public static extern cusolverStatus cusolverSpZcsreigvsi(cusolverSpHandle handle, int m, int nnz, cusparseMatDescr descrA, CUdeviceptr csrValA, CUdeviceptr csrRowPtrA, CUdeviceptr csrColIndA, cuDoubleComplex mu0, CUdeviceptr x0, int maxite, double tol, ref cuDoubleComplex mu, CUdeviceptr x);
			public static extern cusolverStatus cusolverSpScsreigvsi(cusolverSpHandle handle, int m, int nnz, cusparseMatDescr descrA, CUdeviceptr csrValA, CUdeviceptr csrRowPtrA, CUdeviceptr csrColIndA, float mu0, CUdeviceptr x0, int maxite, float tol, ref float mu, CUdeviceptr x);
			public static extern cusolverStatus cusolverSpZcsreigvsiHost(cusolverSpHandle handle, int m, int nnz, cusparseMatDescr descrA, cuDoubleComplex[] csrValA, int[] csrRowPtrA, int[] csrColIndA, cuDoubleComplex mu0, cuDoubleComplex[] x0, int maxite, double tol, ref cuDoubleComplex mu, cuDoubleComplex[] x);
			public static extern cusolverStatus cusolverSpDestroy(cusolverSpHandle handle);
			public static extern cusolverStatus cusolverSpZcsrqrsvBatched(cusolverSpHandle handle, int m, int n, int nnz, cusparseMatDescr descrA, CUdeviceptr csrValA, CUdeviceptr csrRowPtrA, CUdeviceptr csrColIndA, CUdeviceptr b, CUdeviceptr x, int batchSize, csrqrInfo info, CUdeviceptr pBuffer);
			public static extern cusolverStatus cusolverSpXcsrqrAnalysisBatched(cusolverSpHandle handle, int m, int n, int nnzA, cusparseMatDescr descrA, CUdeviceptr csrRowPtrA, CUdeviceptr csrColIndA, csrqrInfo info);
			public static extern cusolverStatus cusolverSpXcsrperm_bufferSizeHost(cusolverSpHandle handle, int m, int n, int nnzA, cusparseMatDescr descrA, int[] csrRowPtrA, int[] csrColIndA, int[] p, int[] q, ref SizeT bufferSizeInBytes);
			public static extern cusolverStatus cusolverSpZcsrlsvcholHost(cusolverSpHandle handle, int m, int nnz, cusparseMatDescr descrA, cuDoubleComplex[] csrVal, int[] csrRowPtr, int[] csrColInd, cuDoubleComplex[] b, double tol, int reorder, cuDoubleComplex[] x, ref int singularity);
			public static extern cusolverStatus cusolverSpScsrlsvcholHost(cusolverSpHandle handle, int m, int nnz, cusparseMatDescr descrA, float[] csrVal, int[] csrRowPtr, int[] csrColInd, float[] b, float tol, int reorder, float[] x, ref int singularity);
			public static extern cusolverStatus cusolverSpCcsrlsvqrHost(cusolverSpHandle handle, int m, int nnz, cusparseMatDescr descrA, cuFloatComplex[] csrValA, int[] csrRowPtrA, int[] csrColIndA, cuFloatComplex[] b, float tol, int reorder, cuFloatComplex[] x, ref int singularity);
			public static extern cusolverStatus cusolverSpDcsrlsvqrHost(cusolverSpHandle handle, int m, int nnz, cusparseMatDescr descrA, double[] csrValA, int[] csrRowPtrA, int[] csrColIndA, double[] b, double tol, int reorder, double[] x, ref int singularity);
			public static extern cusolverStatus cusolverSpCcsrlsvqr(cusolverSpHandle handle, int m, int nnz, cusparseMatDescr descrA, CUdeviceptr csrValA, CUdeviceptr csrRowPtrA, CUdeviceptr csrColIndA, CUdeviceptr b, float tol, int reorder, CUdeviceptr x, ref int singularity);
			public static extern cusolverStatus cusolverSpXcsrissymHost(cusolverSpHandle handle, int m, int nnzA, cusparseMatDescr descrA, int[] csrRowPtrA, int[] csrEndPtrA, int[] csrColIndA, ref int issym);
			public static extern cusolverStatus cusolverSpGetStream(cusolverSpHandle handle, ref CUstream streamId);
			public static extern cusolverStatus cusolverSpZcsreigsHost(cusolverSpHandle handle, int m, int nnz, cusparseMatDescr descrA, cuDoubleComplex[] csrValA, int[] csrRowPtrA, int[] csrColIndA, cuDoubleComplex left_bottom_corner, cuDoubleComplex right_upper_corner, ref int num_eigs);
			public static extern cusolverStatus cusolverSpXcsrsymamdHost(
				cusolverSpHandle handle,
				int n,
				int nnzA,
				cusparseMatDescr descrA,
				int[] csrRowPtrA,
				int[] csrColIndA,
				int[] p);
			public static extern cusolverStatus cusolverSpZcsrlsvchol(cusolverSpHandle handle, int m, int nnz, cusparseMatDescr descrA, CUdeviceptr csrVal, CUdeviceptr csrRowPtr, CUdeviceptr csrColInd, CUdeviceptr b, double tol, int reorder, CUdeviceptr x, ref int singularity);
			public static extern cusolverStatus cusolverSpXcsrpermHost(cusolverSpHandle handle, int m, int n, int nnzA, cusparseMatDescr descrA, int[] csrRowPtrA, int[] csrColIndA, int[] p, int[] q, int[] map, byte[] pBuffer);
			public static extern cusolverStatus cusolverSpCcsrlsqvqrHost(cusolverSpHandle handle, int m, int n, int nnz, cusparseMatDescr descrA, cuFloatComplex[] csrValA, int[] csrRowPtrA, int[] csrColIndA, cuFloatComplex[] b, float tol, ref int rankA, cuFloatComplex[] x, int[] p, ref float min_norm);
			public static extern cusolverStatus cusolverSpZcsrqrBufferInfoBatched(cusolverSpHandle handle, int m, int n, int nnz, cusparseMatDescr descrA, CUdeviceptr csrVal, CUdeviceptr csrRowPtr, CUdeviceptr csrColInd, int batchSize, csrqrInfo info, ref SizeT internalDataInBytes, ref SizeT workspaceInBytes);
			public static extern cusolverStatus cusolverSpZcsrlsqvqrHost(cusolverSpHandle handle, int m, int n, int nnz, cusparseMatDescr descrA, cuDoubleComplex[] csrValA, int[] csrRowPtrA, int[] csrColIndA, cuDoubleComplex[] b, double tol, ref int rankA, cuDoubleComplex[] x, int[] p, ref double min_norm);
			public static extern cusolverStatus cusolverSpScsreigvsiHost(cusolverSpHandle handle, int m, int nnz, cusparseMatDescr descrA, float[] csrValA, int[] csrRowPtrA, int[] csrColIndA, float mu0, float[] x0, int maxite, float tol, ref float mu, float[] x);
			public static extern cusolverStatus cusolverSpCreate(ref cusolverSpHandle handle);