 // SM1.0 specializations(s)
 //-----------------------------------------------------------------------------
 
-
+// Large problems, 1B data
+template <
+	typename ProblemType,
+	int CUDA_ARCH,
+	TypeSizeGenre POINTER_SIZE_GENRE>
+struct AutotunedGenre <ProblemType, CUDA_ARCH, LARGE_SIZE, SM10, TINY_TYPE, POINTER_SIZE_GENRE>
+
+	: Policy<ProblemType, SM20, util::io::ld::NONE, util::io::st::NONE, false, true, false, false, true,
+		10,
+		0, 7, 2, 1, 5,
+		8, 1, 1, 5,
+		0, 6, 2, 0, 5>
+{
+	static const ProbSizeGenre PROB_SIZE_GENRE = LARGE_SIZE;
+};
+
+// Large problems, 2B data
+template <
+	typename ProblemType,
+	int CUDA_ARCH,
+	TypeSizeGenre POINTER_SIZE_GENRE>
+struct AutotunedGenre <ProblemType, CUDA_ARCH, LARGE_SIZE, SM10, SMALL_TYPE, POINTER_SIZE_GENRE>
+
+	: Policy<ProblemType, SM20, util::io::ld::NONE, util::io::st::NONE, false, true, false, false, true,
+		10,
+		0, 7, 2, 1, 5,
+		9, 1, 0, 5,
+		0, 6, 2, 0, 5>
+{
+	static const ProbSizeGenre PROB_SIZE_GENRE = LARGE_SIZE;
+};
+
+// Large problems, 4B data
+template <
+	typename ProblemType,
+	int CUDA_ARCH,
+	TypeSizeGenre POINTER_SIZE_GENRE>
+struct AutotunedGenre <ProblemType, CUDA_ARCH, LARGE_SIZE, SM10, MEDIUM_TYPE, POINTER_SIZE_GENRE>
+
+	: Policy<ProblemType, SM20, util::io::ld::NONE, util::io::st::NONE, false, true, false, false, true,
+		10,
+		0, 6, 1, 2, 5,
+		6, 2, 2, 5,
+		0, 8, 2, 0, 5>
+{
+	static const ProbSizeGenre PROB_SIZE_GENRE = LARGE_SIZE;
+};
+
+// Large problems, 8B data
+template <
+	typename ProblemType,
+	int CUDA_ARCH,
+	TypeSizeGenre POINTER_SIZE_GENRE>
+struct AutotunedGenre <ProblemType, CUDA_ARCH, LARGE_SIZE, SM10, LARGE_TYPE, POINTER_SIZE_GENRE>
+
+	: Policy<ProblemType, SM20, util::io::ld::NONE, util::io::st::NONE, false, true, false, false, true,
+		8,
+		0, 6, 1, 0, 5,
+		8, 1, 1, 5,
+		0, 6, 1, 1, 5>
+{
+	static const ProbSizeGenre PROB_SIZE_GENRE = LARGE_SIZE;
+};
+
+
+
+
+// Small problems, 1B data
+template <
+	typename ProblemType,
+	int CUDA_ARCH,
+	TypeSizeGenre POINTER_SIZE_GENRE>
+struct AutotunedGenre <ProblemType, CUDA_ARCH, SMALL_SIZE, SM10, TINY_TYPE, POINTER_SIZE_GENRE>
+
+	: Policy<ProblemType, SM20, util::io::ld::NONE, util::io::st::NONE, false, true, false, false, true,
+		11,
+		0, 9, 2, 0, 5,
+		8, 2, 0, 5,
+		0, 6, 2, 1, 5>
+{
+	static const ProbSizeGenre PROB_SIZE_GENRE = SMALL_SIZE;
+};
+
+// Small problems, 2B data
+template <
+	typename ProblemType,
+	int CUDA_ARCH,
+	TypeSizeGenre POINTER_SIZE_GENRE>
+struct AutotunedGenre <ProblemType, CUDA_ARCH, SMALL_SIZE, SM10, SMALL_TYPE, POINTER_SIZE_GENRE>
+
+	: Policy<ProblemType, SM20, util::io::ld::NONE, util::io::st::NONE, false, true, false, false, true,
+		11,
+		0, 7, 2, 2, 5,
+		5, 0, 0, 5,
+		0, 6, 2, 1, 5>
+{
+	static const ProbSizeGenre PROB_SIZE_GENRE = SMALL_SIZE;
+};
+
+// Small problems, 4B data
+template <
+	typename ProblemType,
+	int CUDA_ARCH,
+	TypeSizeGenre POINTER_SIZE_GENRE>
+struct AutotunedGenre <ProblemType, CUDA_ARCH, SMALL_SIZE, SM10, MEDIUM_TYPE, POINTER_SIZE_GENRE>
+
+	: Policy<ProblemType, SM20, util::io::ld::NONE, util::io::st::NONE, false, true, false, false, true,
+		10,
+		0, 6, 2, 2, 5,
+		7, 0, 0, 5,
+		0, 6, 2, 1, 5>
+{
+	static const ProbSizeGenre PROB_SIZE_GENRE = SMALL_SIZE;
+};
+
+// Small problems, 8B data
+template <
+	typename ProblemType,
+	int CUDA_ARCH,
+	TypeSizeGenre POINTER_SIZE_GENRE>
+struct AutotunedGenre <ProblemType, CUDA_ARCH, SMALL_SIZE, SM10, LARGE_TYPE, POINTER_SIZE_GENRE>
+
+	: Policy<ProblemType, SM20, util::io::ld::NONE, util::io::st::NONE, false, true, false, false, true,
+		9,
+		0, 6, 1, 2, 5,
+		5, 2, 0, 5,
+		0, 6, 1, 1, 5>
+{
+	static const ProbSizeGenre PROB_SIZE_GENRE = SMALL_SIZE;
+};
 
 
 

template <int CUDA_ARCH>
struct ArchClassifier
{
	static const ArchGenre GENRE 			=	// (CUDA_ARCH < SM13) ? SM10 :			// Haven't tuned for SM1.0 yet
												(CUDA_ARCH < SM20) ? SM13 : SM20;
};


//-----------------------------------------------------------------------------


// Large problems, 1B data
template <
	typename ProblemType,
	int CUDA_ARCH,
	TypeSizeGenre POINTER_SIZE_GENRE>
struct AutotunedGenre <ProblemType, CUDA_ARCH, LARGE_SIZE, SM13, TINY_TYPE, POINTER_SIZE_GENRE>

	: Policy<ProblemType, SM20, util::io::ld::NONE, util::io::st::NONE, false, true, false, false, true,
		11,
		0, 8, 2, 1, 5,
		9, 0, 2, 5,
		0, 6, 2, 1, 5>
{
	static const ProbSizeGenre PROB_SIZE_GENRE = LARGE_SIZE;
};

// Large problems, 2B data
template <
	typename ProblemType,
	int CUDA_ARCH,
	TypeSizeGenre POINTER_SIZE_GENRE>
struct AutotunedGenre <ProblemType, CUDA_ARCH, LARGE_SIZE, SM13, SMALL_TYPE, POINTER_SIZE_GENRE>

	: Policy<ProblemType, SM20, util::io::ld::NONE, util::io::st::NONE, false, true, false, false, true,
		9,
		0, 6, 2, 1, 5,
		7, 1, 2, 5,
		0, 6, 2, 1, 5>
{
	static const ProbSizeGenre PROB_SIZE_GENRE = LARGE_SIZE;
};

// Large problems, 4B data
template <
	typename ProblemType,
	int CUDA_ARCH,
	TypeSizeGenre POINTER_SIZE_GENRE>
struct AutotunedGenre <ProblemType, CUDA_ARCH, LARGE_SIZE, SM13, MEDIUM_TYPE, POINTER_SIZE_GENRE>

	: Policy<ProblemType, SM20, util::io::ld::NONE, util::io::st::NONE, false, true, false, false, true,
		9,
		0, 6, 1, 1, 5,
		5, 0, 1, 5,
		0, 6, 2, 1, 5>
{
	static const ProbSizeGenre PROB_SIZE_GENRE = LARGE_SIZE;
};

// Large problems, 8B data
template <
	typename ProblemType,
	int CUDA_ARCH,
	TypeSizeGenre POINTER_SIZE_GENRE>
struct AutotunedGenre <ProblemType, CUDA_ARCH, LARGE_SIZE, SM13, LARGE_TYPE, POINTER_SIZE_GENRE>

	: Policy<ProblemType, SM20, util::io::ld::NONE, util::io::st::NONE, false, true, false, false, true,
		8,
		0, 7, 1, 0, 5,
		5, 2, 0, 5,
		0, 6, 1, 1, 5>
{
	static const ProbSizeGenre PROB_SIZE_GENRE = LARGE_SIZE;
};




// Small problems, 1B data
template <
	typename ProblemType,
	int CUDA_ARCH,
	TypeSizeGenre POINTER_SIZE_GENRE>
struct AutotunedGenre <ProblemType, CUDA_ARCH, SMALL_SIZE, SM13, TINY_TYPE, POINTER_SIZE_GENRE>

	: Policy<ProblemType, SM20, util::io::ld::NONE, util::io::st::NONE, false, true, false, false, true,
		10,
		0, 7, 2, 1, 5,
		7, 0, 0, 5,
		0, 6, 2, 0, 5>
{
	static const ProbSizeGenre PROB_SIZE_GENRE = SMALL_SIZE;
};

// Small problems, 2B data
template <
	typename ProblemType,
	int CUDA_ARCH,
	TypeSizeGenre POINTER_SIZE_GENRE>
struct AutotunedGenre <ProblemType, CUDA_ARCH, SMALL_SIZE, SM13, SMALL_TYPE, POINTER_SIZE_GENRE>

	: Policy<ProblemType, SM20, util::io::ld::NONE, util::io::st::NONE, false, true, false, false, true,
		9,
		0, 6, 2, 1, 5,
		6, 2, 0, 5,
		0, 6, 2, 0, 5>
{
	static const ProbSizeGenre PROB_SIZE_GENRE = SMALL_SIZE;
};

// Small problems, 4B data
template <
	typename ProblemType,
	int CUDA_ARCH,
	TypeSizeGenre POINTER_SIZE_GENRE>
struct AutotunedGenre <ProblemType, CUDA_ARCH, SMALL_SIZE, SM13, MEDIUM_TYPE, POINTER_SIZE_GENRE>

	: Policy<ProblemType, SM20, util::io::ld::NONE, util::io::st::NONE, false, true, false, false, true,
		9,
		0, 7, 1, 1, 5,
		7, 0, 0, 5,
		0, 6, 2, 1, 5>
{
	static const ProbSizeGenre PROB_SIZE_GENRE = SMALL_SIZE;
};

// Small problems, 8B data
template <
	typename ProblemType,
	int CUDA_ARCH,
	TypeSizeGenre POINTER_SIZE_GENRE>
struct AutotunedGenre <ProblemType, CUDA_ARCH, SMALL_SIZE, SM13, LARGE_TYPE, POINTER_SIZE_GENRE>

	: Policy<ProblemType, SM20, util::io::ld::NONE, util::io::st::NONE, false, true, false, false, true,
		10,
		0, 8, 1, 1, 5,
		5, 0, 0, 5,
		0, 7, 1, 2, 5>
{
	static const ProbSizeGenre PROB_SIZE_GENRE = SMALL_SIZE;
};


