C++ C++;有没有办法做Cuda风格的内核模板,参数会产生单独的编译?
在Cuda中,您可以指定用于自动创建完全不同版本内核的模板参数。问题在于,您只能将const值传递给函数,以便编译器提前准确地知道需要创建哪些版本的内核。例如,您可以使用一个模板参数intx,然后使用if(X==4){this}else{that},您将创建两个独立的函数,这两个函数的开销都不超过'if'语句 我发现这在允许极大的灵活性和代码可重用性而不牺牲性能方面是非常宝贵的 如果你能指出分支机构没有那么多的开销,那么你就可以获得额外的积分,我从来不知道!) 像这样的C++ C++;有没有办法做Cuda风格的内核模板,参数会产生单独的编译?,c++,cuda,c++17,C++,Cuda,C++17,在Cuda中,您可以指定用于自动创建完全不同版本内核的模板参数。问题在于,您只能将const值传递给函数,以便编译器提前准确地知道需要创建哪些版本的内核。例如,您可以使用一个模板参数intx,然后使用if(X==4){this}else{that},您将创建两个独立的函数,这两个函数的开销都不超过'if'语句 我发现这在允许极大的灵活性和代码可重用性而不牺牲性能方面是非常宝贵的 如果你能指出分支机构没有那么多的开销,那么你就可以获得额外的积分,我从来不知道!) 像这样的 #include <
#include <iostream>
template <int x>
void function() {
if constexpr (x == 1) {
std::cout << "hello\n";
} else {
std::cout << "world\n";
}
}
int main() {
function<3>();
}
#包括
模板
空函数(){
如果constexpr(x==1){
std::能不能像这样
#include <iostream>
template <int x>
void function() {
if constexpr (x == 1) {
std::cout << "hello\n";
} else {
std::cout << "world\n";
}
}
int main() {
function<3>();
}
#包括
模板
空函数(){
如果constexpr(x==1){
STD:你的意思是?好像不清楚你在说什么。C++中的模板总是产生“单独编译”。。当一个模板被实例化时,编译器会有效地编译现有的代码,并使用中替换的模板参数,从而生成一个不同于任何其他实例化的实体。vector
的类型与vector
的类型不同,就像int
的类型来自float
一样。或者,原因是CUDA(C++)这种能力是因为C++有这种能力,而不是相反。CUDA(C++)尝试用C++实现C++的各种限制和添加。你不需要C++ 11或其他特殊的东西。这能回答你的问题吗?你的意思是?不清楚你在这里的意思。C++中的模板总是产生“单独编译”。。当一个模板被实例化时,编译器会有效地编译现有的代码,并使用中替换的模板参数,从而生成一个不同于任何其他实例化的实体。vector
的类型与vector
的类型不同,就像int
的类型来自float
一样。或者,原因是CUDA(C++)这种能力是因为C++有这种能力,而不是相反。CUDA(C++)尝试用C++实现11种不同的限制和添加。你不需要C++ +或其他特殊的东西。这能回答你的问题吗?即使是CistExpR< /Cord>位,你甚至不需要<代码>;大多数编译器会理所当然地优化出那些显而易见的条件。你甚至不需要<代码>constexpr
bit;大多数编译器都会将这样明显的条件优化掉,这是理所当然的。