在非 Doxygen 的评论中,我经常有:
/* Lorem ipsum etc.
*
* Notes:
* - A first note.
* - Some other note note.
*/
Run Code Online (Sandbox Code Playgroud)
但是对于 Doxygen,我有@note(或\note),没有@notes)。那么,我应该使用多个@notes,还是将所有注释都放在同一个 s 下@note?
我正在使用自定义分配和删除工作一些内存空间,这是使用我无法控制的类似malloc的接口(即分配n个字节或释放已分配的ptr).所以,没什么delete[].
现在,我想构建一个T的数组.我得到了空间auto space_ptr = magic_malloc(n*sizeof(T)).现在我想做一些像array-placement-new这样的内容来构建n个元素.我该怎么办?...或者我应该从1循环到n并构造单个T?
注意:
alignof(T)分歧sizeof(T)).如果你想解决对齐问题,那就更好了,但为了简单起见你可能会忽略它.我正在使用 Eclipse CDT 2020-06(但我在早期版本中也发生过这种情况。)
有时,Eclipse CDT 在解析某些文件时会卡住。百分比指标不前进;并按任务的取消按钮使其“取消请求”,但它仍然卡在这种状态。因此,我不仅不能在我的项目中使用索引,而且大多数其他“异步”任务也会排队并且无法执行。当这种情况发生时,我现在基本上放弃并重新开始;也许最终会使用过滤规则屏蔽掉行为不当的文件。
我的问题是:我可以采取更好的措施来处理索引器卡住的情况吗?
编辑:
如果我使用 -debug 运行 Eclipse 并启用索引器调试,我得到的唯一输出是:
Indexer: start PDOMFastIndexerTask
Indexer: parsing /cuda-api-wrappers/examples/other/io_compute_overlap_with_streams.cu
Run Code Online (Sandbox Code Playgroud)
这就是我陷入困境的地方。
以下代码将32数组中的每个32元素与每个元素组的第一个元素相加:
int i = threadIdx.x;
int warpid = i&31;
if(warpid < 16){
s_buf[i] += s_buf[i+16];__syncthreads();
s_buf[i] += s_buf[i+8];__syncthreads();
s_buf[i] += s_buf[i+4];__syncthreads();
s_buf[i] += s_buf[i+2];__syncthreads();
s_buf[i] += s_buf[i+1];__syncthreads();
}
Run Code Online (Sandbox Code Playgroud)
我以为我可以消除__syncthreads()代码中的所有内容,因为所有操作都是在同一个warp中完成的.但如果我消除它们,我会得到垃圾结果.它不会对性能产生太大影响,但我想知道为什么我需要__syncthreads()这里.
我快速浏览了一下CUDA编程指南,并使用了快速数学优化,尽管附录C提到要转换为内在的除法,但没有提及乘法.我问这个问题的原因是,我的内核有很多乘法.我知道NVCC会尝试融合乘法和加法(当使用常规'*'和'+'运算符时,内在函数永远不会合并到FMAD运算中).但是如果我的代码是繁重的,那么如果使用舍入SP内在函数会有什么好处__fmul_rn吗?
所以有两个问题:
-use-fast-math选项是否使用'*'运算符将乘法转换为像__fmul_rn这样的SP instrinsics?
手动编码乘法是否可以显着使用__fmul_rn?一个例子或一些数字将有助于我理解.
条件表达式,例如涉及&&和||的表达式 ,他们总是评价为0或1吗?或者对于真实情况,1以外的数字是可能的吗?我问,因为我想分配一个像这样的变量.
int a = cond1 && cond2;
Run Code Online (Sandbox Code Playgroud)
我想知道我是否应该做以下事情.
int a = (cond1 && cond2)? 1:0;
Run Code Online (Sandbox Code Playgroud) 使用 C++11/14/1z 是否可以拥有一个带有两个参数包的模板化构造,并在其中实例化一些其他带有两个参数包交错的模板化构造?即,如果第一个包是T1_1、T1_2、T1_3,第二个包是T2_1、T2_2和T2_3,则交错包将是T1_1、T2_1、T1_2、T2_2、T1_3、T2_3?我的猜测是“否”,因为省略号不应该能够应用于两个参数包元素指示符;但也许某种元组构造或递归实例化技巧可以起作用?
编辑:让我明确地假设包具有相同的长度(sizeof...值)。对于不同长度的包的解决方案会很好,只要它不会让事情变得更加复杂。
我正在观看Herb Sutter的CppCon 2014关于无锁编程的讨论.
在第7页的讲义中,我们有以下代码:
static unique_ptr<widget> widget::instance;
static std::once_flag widget::create;
widget& widget::get_instance() {
std::call_once( create, [=]{ instance = make_unique<widget>(); } );
return *instance;
}
Run Code Online (Sandbox Code Playgroud)
我的问题:为什么[=]在这里使用捕获,而不是[&](或者只是[]?)
[=]如果存在,则通过引用捕获lambda主体中使用的所有自动变量,并通过引用捕获当前对象
但我们没有任何自动变量,也不需要当前对象.
现在已经发布了 C++ 17 ,标准库现在涵盖了更多的Boost库:可选,变体,任何,ASIO(在网络TS中),协同程序(在TS中)等等.除了标准中已有的Boost东西之外,还有这个答案.我意识到一些标准化版本的设计空间选择与Boost相比略有不同,但基本上它们是相同的.
鉴于这一事实,是否有计划发布Boost的替代版本(或者只是 - 一个新的主线版本):
?
如果不是 - 这是因为Boost设计选择的重要性吗?麻烦太多了?害怕"项目分歧"?
注意:这是一个提供信息的问题,所以请不要提供您的意见或是否这是一个好主意.
我应该如何使我的 CMake 项目默认配置为发布而不是调试构建?