小编Tys*_*mer的帖子

如何禁用 Visual Studio 警告 C4244 std::vector 复制或使用隐式缩小转换进行分配

执行双精度向量到浮点数向量的缩小转换。我不希望 Visual Studio 抛出警告 C4244,“可能丢失数据”,即缩小转换范围。

请不要发表评论或回答说我不应该这样做。我知道后果。我只是想抑制警告。在此特定功能范围之外禁用警告是不可接受的,例如通过项目设置全局禁用。

我还想使用向量::复制或向量::分配。通过带有 static_cast<> 的 Transform() 或 for_each() 避免警告......对于我的口味来说太明确了。所以这个问题是如何禁用警告,而不是避免它。

我的警告抑制尝试不起作用:

vector<float> DoubleVectorToFloat( vector<double> & x ){
  #pragma warning( push )
  #pragma warning( disable : 4244 ) 
  return vector<float>( x.begin(), x.end() );
  #pragma warning( pop )  
}
Run Code Online (Sandbox Code Playgroud)

我知道禁用警告是不好的。但一种尺寸并不适合所有情况。我的库是实时的,处理速度为 10 MiB/s。我想要调用模板 _Copy_unchecked1(etc) ;我不想支付错误检查的性能损失。

c++ visual-studio c++11

6
推荐指数
2
解决办法
5940
查看次数

为什么matlab的mldivide比dgels好这么多?

解决Ax = b。真双。 A是超定的 Mx2,其中 M >> 2。 b是 Mx1。我已经针对 运行了大量数据mldivide,结果非常好。我用 MKL 写了一个 mex 例程,LAPACKE_dgels它远没有那么好。结果有大量的噪音,而潜在的信号几乎不存在。我首先根据 MKL 示例结果检查了例程。我已经搜索了mldivide文档(流程图)和 SO 问题。我发现的只是 Matlab 对超定矩形使用 QR 分解。

我接下来应该尝试什么?我是否使用了错误的 LAPACK 例程?请帮助指导我正确的方向。

更新: 在求解向量上的 E-15 浮点差异内,英特尔 MKL LAPACKE_dgels 与 Matlab mldivide 具有相同的结果,用于处理真正的双超定(矩形)问题。据我所知,这是使用的 QR 方法。

当心从这个 dgels 返回的残差。它们不等于 b - Ax。他们中的许多人接近这个值,而有些则远离它。

matlab linear-algebra lapack intel-mkl

3
推荐指数
1
解决办法
275
查看次数

带有附加参数的复制和移动赋值

我有一个管理资源的 RAII 类。问题是,复制资源需要一个与资源无关的附加参数,而是资源复制操作的参数。

因此我有一个类复制构造函数,它需要一个额外的参数。如果附加参数具有默认值,则这是允许的。我想编写复制赋值和移动赋值运算符(最好使用复制交换习惯用法),但它们不允许附加参数。我可以将这个麻烦的参数作为类成员,但用户可能会错误地使用它,因为需要在每次复制或移动分配调用之前设置它。

有什么想法如何解决这个问题吗?

struct Foo{
  void* ptr;
  Foo(size_t){/*allocate*/}
  ~Foo(){/*deallocate*/}
  Foo(const Foo& that, int x = 0 /*required additional parameter for copying*/){CopyMethod(*this,that,x);}
  Foo& operator=(Foo);// cannot implement without int x parameter 
};
Run Code Online (Sandbox Code Playgroud)

c++

3
推荐指数
1
解决办法
225
查看次数

如何从已编译的CUDA中删除所有PTX以防止知识产权泄漏

CUDA PTX类似于汇编,因此揭示了源代码.我已经阅读了在线CUDA编译器文档中的CUDA编程指南的3.1节和3.2.7节.我对-arch与-code编译器选项有基本的了解.

如果我理解正确,指定-arch compute_XX会生成PTX.而代码sm_XX 同时生成 PTX和cubin.

想要Cubin,这样在得到的图像中没有PTX.我怎样才能做到这一点?

最好通过Visual Studio设置,虽然我只在Visual Studio项目设置中找到-gencode选项.

cuda

2
推荐指数
1
解决办法
409
查看次数

CUDA tex1Dfetch 和倾斜内存

我的问题是“tex1Dfetch 函数可以与倾斜线性内存一起使用吗”?

B.8.1.1.tex1dfetch() 部分说“从线性内存区域中提取......”。

我正在优化受全局内存读取约束的内核。它使用 grid-stride 循环来加载 float4:

float4 x = XYZW[i]; // float4 const * const XYZW
float4 x = tex1Dfetch<float4<( XYZW, i ); //   cudaTextureObject_t XYZW  
float4 x = tex1D<float4<( XYZW, i ); // cudaTextureObject_t XYZW
Run Code Online (Sandbox Code Playgroud)

第一个例子,使用指针参数,工作正常。tex1Dfetch 形式返回全零。tex1D 调用返回别名/迷幻垃圾。

在所有情况下,都使用 cudaMallocPitched。纹理加载速度更快,tex1Dfetch 最快。所以我很想让它正常工作。

cuda

2
推荐指数
1
解决办法
955
查看次数

标签 统计

c++ ×2

cuda ×2

c++11 ×1

intel-mkl ×1

lapack ×1

linear-algebra ×1

matlab ×1

visual-studio ×1