小编ein*_*ica的帖子

多子弹 Doxygen @note?

在非 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

comments idioms doxygen multiple-entries

6
推荐指数
1
解决办法
3373
查看次数

我应该如何在自定义分配API中使用placement new?

我正在使用自定义分配和删除工作一些内存空间,这是使用我无法控制的类似malloc的接口(即分配n个字节或释放已分配的ptr).所以,没什么delete[].

现在,我想构建一个T的数组.我得到了空间auto space_ptr = magic_malloc(n*sizeof(T)).现在我想做一些像array-placement-new这样的内容来构建n个元素.我该怎么办?...或者我应该从1循环到n并构造单个T?

注意:

  • 我在这里忽略对齐问题(或者更确切地说,假设是alignof(T)分歧sizeof(T)).如果你想解决对齐问题,那就更好了,但为了简单起见你可能会忽略它.
  • C++ 11代码欢迎(实际上是首选),但没有C++ 14/17.

c++ memory-management placement-new c++11

6
推荐指数
1
解决办法
562
查看次数

当 Eclipse CDT 索引器卡住时我该怎么办?

我正在使用 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)

这就是我陷入困境的地方。

workflow indexer eclipse-cdt freeze

6
推荐指数
1
解决办法
2183
查看次数

在CUDA warp-level reduction中删除__syncthreads()

以下代码将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 gpu-warp

5
推荐指数
2
解决办法
3533
查看次数

-use-fast-math选项是否将SP乘法转换为内在函数?

我快速浏览了一下CUDA编程指南,并使用了快速数学优化,尽管附录C提到要转换为内在的除法,但没有提及乘法.我问这个问题的原因是,我的内核有很多乘法.我知道NVCC会尝试融合乘法和加法(当使用常规'*'和'+'运算符时,内在函数永远不会合并到FMAD运算中).但是如果我的代码是繁重的,那么如果使用舍入SP内在函数会有什么好处__fmul_rn吗?

所以有两个问题:

  1. -use-fast-math选项是否使用'*'运算符将乘法转换为像__fmul_rn这样的SP instrinsics?

  2. 手动编码乘法是否可以显着使用__fmul_rn?一个例子或一些数字将有助于我理解.

cuda nvcc fast-math

5
推荐指数
1
解决办法
4735
查看次数

条件表达式总是在C中评估为0或1吗?

条件表达式,例如涉及&&||的表达式 ,他们总是评价为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 logical-operators semantics

5
推荐指数
1
解决办法
442
查看次数

是否可以交错参数包?

使用 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...值)。对于不同长度的包的解决方案会很好,只要它不会让事情变得更加复杂。

c++ templates variadic-templates c++11

5
推荐指数
1
解决办法
1681
查看次数

仔细检查锁定模式 - 在传递给call_once的lambda中捕获

我正在观看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)

我的问题:为什么[=]在这里使用捕获,而不是[&](或者只是[]?)

cppreference说:

[=] 如果存在,则通过引用捕获lambda主体中使用的所有自动变量,并通过引用捕获当前对象

但我们没有任何自动变量,也不需要当前对象.

c++ lambda c++11 std-call-once

5
推荐指数
1
解决办法
138
查看次数

WIll Boost有一个带有现代C++"截止"的版本吗?

现在已经发布了 C++ 17 ,标准库现在涵盖了更多的Boost库:可选,变体,任何,ASIO(在网络TS中),协同程序(在TS中)等等.除了标准中已有的Boost东西之外,还有这个答案.我意识到一些标准化版本的设计空间选择与Boost相比略有不同,但基本上它们是相同的.

鉴于这一事实,是否有计划发布Boost的替代版本(或者只是 - 一个新的主线版本):

  • 将大多数或所有这些功能作为Boost库放弃
  • 让其余的Boost代码依赖于它们在标准库中的可用性
  • 让Boost代码依赖于至少C++ 17的语言,使生活更轻松,代码对开发人员更加敏感

如果不是 - 这是因为Boost设计选择的重要性吗?麻烦太多了?害怕"项目分歧"?

注意:这是一个提供信息的问题,所以请不要提供您的意见或是否这是一个好主意.

c++ boost deprecated

5
推荐指数
1
解决办法
625
查看次数

将 CMake 项目默认为 Release 构建类型

我应该如何使我的 CMake 项目默认配置为发布而不是调试构建?

release cmake buildconfiguration

5
推荐指数
1
解决办法
6811
查看次数