1,模版元编程
模板元编程是一种利用 C++ 模板系统在编译时进行计算和生成代码的技术。其原理基于模板特化、递归、模板参数推导等特性,通过模板实例化和展开,在编译时生成代码,以实现在编译期间进行复杂计算和代码生成的目的。
2,模版元编程的典型示例
编译期间展开计算出斐波那契数列的具体数值:
需要特化0和1的情况,
mo.cpp
#include <iostream>
template <int N>
struct Fibonacci {
static const int value = Fibonacci<N - 1>::value + Fibonacci<N - 2>::value;
};
template <>
struct Fibonacci<0> {
static const int value = 0;
};
template <>
struct Fibonacci<1> {
static const int value = 1;
};
int main() {
const int result = Fibonacci<10>::value;
std::cout << "Fibonacci(10) = " << result << std::endl;
return 0;
}
3,CUDA kernel中实践模版元编程
示例代码
hello.cu
#include <stdio.h>
template <typename T, typename U>
struct IsSame {
static const bool value = false;
};
template <typename T>
struct IsSame<T, T> {
static const bool value = true;
};
template <typename T>
__global__ void checkTypes() {
if (IsSame<T, int8_t>::value) {
printf("t s the same type ssssss");
} else {
printf("t d not the same type dddddd\n");
}
}
int main() {
checkTypes<int><<<1, 1>>>();
cudaDeviceSynchronize();
return 0;
}
这时只会将 dddddd编译进去,类型不同;
nvcc hello.cu
故vim a.out
查找dddddd和ssssss:
dddddd找到了
ssssss没找到: