小编ein*_*ica的帖子

有没有办法告诉Doxygen忽略(所有)命名空间?

几乎我文档中的所有内容都以其前面的namespace ::前缀结尾.(其中namespace是我的命名空间的名称)

有没有办法在没有命名空间部分的情况下生成文档?

例如:

my_namespace :: MyClass的::成员

变为:

MyClass的::成员

它会使一切更具可读性.

doxygen namespaces

7
推荐指数
1
解决办法
2988
查看次数

双模板方法的部分特化失败

有模板类List.

template <typename Point>
class List
{


    public:
          template <const unsigned short N>
          void load ( const char *file);
          ...
};

template <typename Point>
template <const unsigned short N>
void List <Point>::load ( const char *file)
}
Run Code Online (Sandbox Code Playgroud)

如何专门化N = 2的方法负载?此代码无效...

template <typename Point>
void List <Point> <2>::load ( const char *file)
{
}
Run Code Online (Sandbox Code Playgroud)

而且这段代码也行不通.

template <typename Point>
void List <Point> ::load <2> ( const char *file )
{ 
}

Error 3 error C2768: 'List<Point>::load' : illegal use of explicit template …
Run Code Online (Sandbox Code Playgroud)

c++ templates partial-specialization specialization

7
推荐指数
1
解决办法
2921
查看次数

CUDA代码中的常量内存使用情况

我自己无法弄明白,确保内核中使用的内存不变的最佳方法是什么.http://stackoverflow...r-pleasant-way也有类似的问题.我正在使用GTX580并仅编译2.0功能.我的内核看起来像

__global__ Foo(const int *src, float *result) {...}
Run Code Online (Sandbox Code Playgroud)

我在主机上执行以下代码:

cudaMalloc(src, size);
cudaMemcpy(src, hostSrc, size, cudaMemcpyHostToDevice);
Foo<<<...>>>(src, result);
Run Code Online (Sandbox Code Playgroud)

另一种方法是添加

__constant__ src[size];
Run Code Online (Sandbox Code Playgroud)

到.cu文件,从内核中删除src指针并执行

cudaMemcpyToSymbol("src", hostSrc, size, 0, cudaMemcpyHostToDevice);
Foo<<<...>>>(result);
Run Code Online (Sandbox Code Playgroud)

这两种方式是等效的还是第一种不保证使用常量内存而不是全局内存?大小动态变化,所以第二种方式在我的情况下不方便.

c memory-management cuda constants gpu-constant-memory

7
推荐指数
1
解决办法
7438
查看次数

OpenCL中不允许使用可变长度数组声明 - 为什么?

我想在我的OpenCL内核中创建一个本地数组,其大小取决于内核的参数.似乎不允许 - 至少在AMD APP上.

你的经历与众不同吗?也许它只是APP?或者这里有一些理由吗?

编辑:我现在建议在CPU端代码中也应该允许变长数组,这是C标准委员会的一个不幸的调用; 但问题是.

memory arrays memory-management c99 opencl

7
推荐指数
1
解决办法
4375
查看次数

独立的便携式snprintf(),独立于标准库?

我正在为目标平台编写代码NO C-runtime.No stdlib,no stdio.我需要一个字符串格式化函数,snprintf但应该是able to run without any dependencies,甚至不是C库.

最多可能取决于memory alloc functions我提供的.

我检查了Trio但它需要stdio.h header.我不能用这个.

编辑

目标平台:( PowerPC64 home made OS不是我).但是,库不应该依赖于OS特定的东西.

EDIT2

我尝试过一些第三方开源库,比如Trio(http://daniel.haxx.se/projects/trio/),snprintf和miniformat(https://bitbucket.org/jj1/miniformat/src)但是所有这些都依赖于像string.h,stdio.h或者(甚至更糟糕的)stdlib.h这样的头文件.如果已经存在,我不想编写自己的实现,因为这会耗费时间并且容易出错.

c embedded printf portability cross-platform

7
推荐指数
1
解决办法
3682
查看次数

nVidia RDMA GPUDirect是否始终仅运行物理地址(在CPU的物理地址空间中)?

我们知道:http://en.wikipedia.org/wiki/IOMMU#Advantages

IOMMU可以支持外围存储器分页.使用PCI-SIG PCIe地址转换服务(ATS)页面请求接口(PRI)扩展的外设可以检测并发出对内存管理器服务的需求.

在此输入图像描述

但是当我们使用CUDA> = 5.0的nVidia GPU时,我们可以使用RDMA GPUDirect,并且知道:

http://docs.nvidia.com/cuda/gpudirect-rdma/index.html#how-gpudirect-rdma-works

传统上,使用CPU的MMU作为内存映射I/O(MMIO)地址,将BAR窗口等资源映射到用户或内核地址空间.但是,由于当前的操作系统没有足够的机制来在驱动程序之间交换MMIO区域,因此NVIDIA内核驱动程序会导出函数以执行必要的地址转换和映射.

http://docs.nvidia.com/cuda/gpudirect-rdma/index.html#supported-systems

从PCI设备的角度来看,GPUDirect的RDMA当前依赖于所有物理地址是相同的.这使它与IOMMU不兼容,因此必须禁用它们才能使RDUD for GPUDirect正常工作.

如果我们将CPU-RAM分配并映射到UVA,如下所示:

#include <iostream>
#include "cuda_runtime.h"
#include "device_launch_parameters.h"

int main() {
    // Can Host map memory
    cudaSetDeviceFlags(cudaDeviceMapHost);  

    // Allocate memory
    unsigned char *host_src_ptr = NULL;
    cudaHostAlloc(&host_src_ptr, 1024*1024, cudaHostAllocMapped);
    std::cout << "host_src_ptr = " << (size_t)host_src_ptr << std::endl;

    // Get UVA-pointer
    unsigned int *uva_src_ptr = NULL;
    cudaHostGetDevicePointer(&uva_src_ptr, host_src_ptr, 0);
    std::cout << "uva_src_ptr  = " << (size_t)uva_src_ptr << std::endl;

    int b; …
Run Code Online (Sandbox Code Playgroud)

cuda gpgpu memory-mapping pci-e gpudirect

7
推荐指数
1
解决办法
3311
查看次数

是否有一个与Visual Studio C++编译器等效的-ffast-math标志

我正在使用带有标志/Ox(完全优化)的Visual Studio 2013附带的默认C++编译器(我猜它称为"Visual Studio C++编译器" ).由于浮点副作用,我必须-ffast-math在使用gcc编译器时禁用该标志.在Visual Studio C++编译器的配置中是否存在此标志的等效选项?

gcc compiler-optimization visual-studio-2013 fast-math

7
推荐指数
1
解决办法
3583
查看次数

可以/我应该使用std :: exception来进行常规错误处理吗?

我将用C++开始这个新项目,并且正在考虑一种不痛苦的错误处理方法.现在,我不打算开始抛出和捕获异常,并且很可能永远不会抛出异常,但我在想 - 即使是常规错误处理,为什么要自己滚动/复制粘贴一个类来描述错误/状态,当我可以使用std::exception它的子类(或者也许是一个std::optional<std::exception>)?

using Status = std::optional<std::exception>;
Status somethingThatMayFail(int x);
Run Code Online (Sandbox Code Playgroud)

有人/任何项目是这样工作的吗?这是一个荒谬的想法还是有点吱吱作响?

c++ error-handling idioms idiomatic

7
推荐指数
1
解决办法
343
查看次数

获取字符串流中的最后一个字符而不复制其整个缓冲区

如果我使用此代码:

template <typename Streamable>
/* ... */
std::stringstream ss;
ss << function_yielding_a_Streamable();
auto last_char = ss.str().back();
Run Code Online (Sandbox Code Playgroud)

然后(我相信)ss需要创建一个缓冲区中的字符串副本,只为我获取最后一个字符,然后它将被销毁.我可以做一些更好的事情吗?也许使用这种seekp()方法?

c++ string stringstream seek

7
推荐指数
1
解决办法
1618
查看次数

为什么我不能在模板化的类中内联定义非模板化的朋友?

MCVE的言辞胜于雄辩:

// int bar();
template <bool B> class Foo {
    friend int ::bar() { return 123; }
};

int main()
{
    Foo<false> f1;
    Foo<true> f2;
}
Run Code Online (Sandbox Code Playgroud)

与GCC 6 --std=c++14,这给了我:

a.cpp: In instantiation of ‘class Foo<true>’:
a.cpp:9:12:   required from here
a.cpp:3:13: error: redefinition of ‘int bar()’
  friend int ::bar() { return 123; }
             ^~
a.cpp:3:13: note: ‘int bar()’ previously defined here
Run Code Online (Sandbox Code Playgroud)

现在,我不确定标准是什么意思; 但是我知道编译器知道朋友没有模板化B,也没有使用它的定义B.那么为什么它不能应用"哦,函数的相同定义的所有内联副本是相同的"规则?

c++ templates inline friend language-lawyer

7
推荐指数
1
解决办法
146
查看次数