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没找到: