我想执行双精度向量到浮点数向量的缩小转换。我不希望 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) ;我不想支付错误检查的性能损失。
解决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。他们中的许多人接近这个值,而有些则远离它。
我有一个管理资源的 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) 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选项.
我的问题是“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 最快。所以我很想让它正常工作。