Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >作为函数说明符的模板参数和编译器优化

作为函数说明符的模板参数和编译器优化
EN

Stack Overflow用户
提问于 2013-02-28 14:54:54
回答 2查看 398关注 0票数 3

我发现this非常有用的帖子,我想澄清一些关于编译器优化的事情。假设我们有这个函数(和最初的post一样):

代码语言:javascript
运行
AI代码解释
复制
template<int action>
__global__ void kernel()
{
    switch(action) {
       case 1:
       // First code
       break;

       case 2:
       // Second code
       break;
    }
}

即使我在编译时使用未知的模板变量调用函数,编译器是否会进行某种意义上的优化,以消除无法访问的代码-类似于创建两个单独的函数?例如:

代码语言:javascript
运行
AI代码解释
复制
kernel<argv[1][0]>();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-28 15:00:30

简短的回答是:不。

模板完全是在编译时实例化和生成的,所以不能使用argv中的值,因为它们在编译时是未知的。

这让我想知道为什么你不尝试一下,然后把代码扔给编译器--它会告诉你模板参数必须是编译时常量。

更新:既然你在评论中告诉我们,它主要不是关于性能的,而是关于可读性的,我建议使用开关/

代码语言:javascript
运行
AI代码解释
复制
template <char c> void kernel() {
  //...
  switch(c) { /* ... */ }
}

switch (argv[1][0]) {
  case 'a': 
    kernel<'a'>();
    break;
  case 'b': 
    kernel<'b'>();
    break;
  //...
}

由于您必须对其进行判断的值(即argv[1][0])仅在运行时才知道,因此您必须使用运行时判断机制。其中,switch/case是最快的,特别是如果不是有太多不同的case(但超过两个),特别是如果case之间没有间隙(即'a','b','c',而不是1,55,2048)。然后,编译器可以生成非常快的跳转表。

票数 4
EN

Stack Overflow用户

发布于 2013-02-28 16:47:06

作为模板的新手,我不得不研究一些基本的问题。最后,我想出了我的问题的解决方案。如果我想调用依赖于命令行参数的带有模板参数的函数,我应该这样做:

代码语言:javascript
运行
AI代码解释
复制
if(argv[1][0] == '1')
    kernel<1><<< ... >>>();

if(argv[1][0] == '2')
    kernel<2><<< ... >>>();

我还检查了这类程序的ptx文件,发现编译器在这种情况下进行了优化,在没有switch语句的情况下产生了两个不同的内核函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15138583

复制
相关文章
jQuery练习——下拉菜单
实现效果:当鼠标移到不同的一级菜单,会显示相应的二级菜单,鼠标移走,二级菜单消失。
颜颜yan_
2022/12/01
27.4K0
jQuery练习——下拉菜单
jQuery下拉菜单经典案例
jQuery下拉菜单经典案例  源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <
红目香薰
2022/11/29
11.4K0
jQuery下拉菜单经典案例
javascript下拉菜单代码(用jquery做下拉菜单)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/126047.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/01
11.8K0
javascript下拉菜单代码(用jquery做下拉菜单)
jQuery简单实现二级下拉菜单
下拉菜单原理:滑过一级的li才让第二层的li显示,利用jq简单的抓取元素,让一级下的二级li显示就能解决,使用jq比css的思路更加明确!
十月梦想
2018/08/29
4.5K0
第72天:jQuery实现下拉菜单
1、块元素居中:给块元素本身设置:margin:0 auto;,块元素必须设置宽度
半指温柔乐
2018/09/11
2K0
js_jQuery【下拉菜单联动dom操作】
下拉菜单联动dom操作案例  源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </hea
红目香薰
2022/11/29
14.5K0
js_jQuery【下拉菜单联动dom操作】
jenkins动态读取文件生成下拉菜单
其实实现这个功能是基于Jenkins的Active Choices Reactive Parameter插件和groovy脚本实现,另外还需要配合选项参数(Choice Parameter)``<br />
dogfei
2020/07/31
3K0
jQuery 动态绑定
这是在项目过程中所遇到的一个问题,给 JS 动态生成的元素绑定事件失效,代码如下所示:
Nian糕
2018/08/21
2.1K0
jQuery 动态绑定
一刻课堂——jquery_15实例_下拉菜单
用户1730674
2018/05/02
1.3K0
Excel: 设置动态的二级下拉菜单
文章背景: 在进行数据录入时,为了提高录入效率和规范用户操作,会使用数据验证功能(Data Validation),得到一级菜单和二级菜单,供用户选择输入。本文要讲述的是如何通过offset、match和counta函数,得到动态的二级下拉菜单。
Exploring
2022/09/20
5K0
Excel:  设置动态的二级下拉菜单
CSS 下拉菜单_下拉菜单html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/01
7.2K0
jquery实现表格动态添加
//点击追加触发 $(function(){ $("#button").click(function(){ var div_ = $("#sel").val(); var context = $("#context").val(); append(div_,context); //$("#tab tr:not(:first)").remove(); //$("#tab tbody").empty(); $("#tab tbody").remove(); query(); }); }); //点击查询全部触发 $(function(){ $("#but").click(function(){ $("#tab tbody").remove(); //$("#tab tr:not(:first)").remove(); //$("#tab tbody").empty(); query(); }); }); //点击模糊查询触发 $(function(){ $("#query").click(function(){ var context = $("#context").val(); alert("您输入的内容为:"+context); $("#tab tr:not(:first)").empty(); //$("table tbody").remove(); queryByContext(); }); }); //删除事件 function del(id){ var url = "testController/delModel"; $.ajax({ type: 'POST', url: url, data:{id: id}, dataType: 'json', success: function(data){ alert("数据库删除成功"); $("#tab tr:not(:first)").empty(); query(); }}); }; //编辑事件 function upd(id){ var url = ""; $.ajax({ type: 'POST', url: url, data:{id: id}, dataType: 'json', success: function(data){ alert("数据库编辑成功"); $("#tab tr:not(:first)").empty(); query(); }}); } //添加方法 function append(div_,context){ $("#"+div_).append("<tr><td>"+ div_ +"</td>"+"<td>"+context+"</td></tr>"); $.get("testController/addModel",{div_id: div_, context: context }).done(function( data ) { alert("添加到数据库成功"); }); }; //模糊查询方法 function queryByContext(){ var url = "testController/queryAllDataByContext"; $.ajax({ type: 'POST', url: url, data:{context:$("#context").val()}, dataType: 'json', success: function(data){ alert("数据库查询成功"); console.log(data); for(var i=0;i<data.length;i++){ var id = data[i].id; var divId = data[i].divId; var context = data[i].context; var dtt = data[i].dtt; //alert(id); $("#tab thead").append("<tr><td>"+id+"</td>"+"<td>"+divId+"</td>"+"<td>"+context+"</td>"+"<td>"+dtt+"</td>"+"<td><a class='del'onclick='del("+id+")'>删除</a></td></tr>"); } }, error:function(){ alert("数据库查询失败"); } }); }; //查询全部方法 function query(){ var url = "testController/queryAllData"; $.ajax({ type: 'POST', url: url, dataType: 'json', success: function(data){ alert("查询成功"); con
yaohong
2019/09/11
3.5K0
javascript动态设置select下拉菜单字体大小
本章节分享一段极其简单的代码实例,它使用javascript实现了动态设置select下拉菜单字体大小的功能。
IT工作者
2021/12/28
1.6K0
jquery validate动态添加/删除规则
项目中用到了jquery vilidate插件来校验,使用中遇到点小波折,这里跟大家分享一下,希望大家少走一些弯路。很多使用手册里面都会提到最基本的validate()方法,这个在使用时一般不会出现问题,如果有些小伙伴不想输入完成后立即校验可以通过设置下面这几个属性:
johnhuster的分享
2022/03/28
2.1K0
使用 jQuery 对下拉菜单 SELCET 进行增加、删除和修改的操作
jQuery 获取下拉菜单 SELECT 选择的 Text 和 Value: //获取Select选择的Text var checkText=jQuery("#select_id").find("option:selected").text(); //获取Select选择的option Value var checkValue=jQuery("#select_id").val(); //获取Select选择的索引值 var checkIndex=jQuery("#select_id ").get(
Denis
2023/04/15
1.4K0
jquery插件treetable 动态加载问题
在增加或修改后,动态加载html,开始就直接使用 $(“#treeTable tbody”).empty().append(data); 这个用法是错误的,
全栈程序员站长
2022/09/01
2.9K0
使用 Spring Boot 从数据库实现动态下拉菜单
动态下拉菜单(或依赖下拉菜单)的概念对于编码来说是令人兴奋且具有挑战性的。动态下拉列表意味着一个下拉列表中的值取决于前一个下拉列表中选择的值。一个简单的示例是三个下拉框,显示区、taluk 和村庄的名称,其中 taluk 中的值取决于区中选择的值,村庄中的值取决于 taluk 下拉列表中选择的值。动态下拉可以使用以下技术来实现:
用户1418987
2023/10/26
1.3K0
使用 Spring Boot 从数据库实现动态下拉菜单
bootstrap 下拉菜单
<!doctype html> <html> <head> <meta charset="utf-8"> <title>联想控股</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link href="css/bootstrap.css" rel="stylesheet" type="text/css"> <script src="http://code.jquery.com/jquery.js"></script> <script src="js/bootstrap.min.js"></script> </head> <body>  <div class="dropdown"> <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> 下拉菜单<span class="caret"></span> </button> <ul class="dropdown-menu"> <li><a href="#">菜单项1</a></li> <li><a href="#">菜单项2</a></li> <li><a href="#">菜单项3</a></li> </ul> </div> </body> </html>
用户5760343
2019/07/05
4.7K0
jquery file upload插件动态修改url
jquery file-upload是一款特别好用的文件上传插件,支持单文件以及多文件上传,下面直接看代码:
johnhuster的分享
2022/03/28
1.1K0
京东网页(动态)搭建,利用jquery实现
源代码已分享至本人云盘~~~ 链接:https://pan.baidu.com/s/1Nr5l2Smcmaevs5HHDh5y_A 提取码:blif
时间静止不是简史
2020/07/24
3.5K0
京东网页(动态)搭建,利用jquery实现

相似问题

jquery动态下拉菜单

12

Jquery动态下拉菜单

30

动态JQuery切换下拉菜单

10

jquery动态下拉菜单-附加问题

12

使用jquery的动态下拉菜单

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档