- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在测试一些推力代码,发现transform_reduce给出的计算结果略有不同,这让我完全困惑。
这是一个测试示例代码:(计算 sum(exp(x)))
在VS2012 + CUDA 6.0中编译并运行
#include <iostream>
#include <cmath>
#include <thrust/device_vector.h>
using namespace std;
template <typename T>
struct exponential
{
__host__ __device__
T operator()(const T& x) const {
return exp(x);
}
};
void main() {
thrust::device_vector<double> f(7), g(7);
f[0]=0.0; f[1]=1.0; f[2]=2.0; f[3]=3.0; f[4]=5.0; f[5]=5.0; f[6]=5.0;
double d = thrust::transform_reduce(f.begin(), f.end(), exponential<double>(), 0, thrust::plus<double>());
cout<<"transform_reduce result: " d<<endl;
thrust::transform(f.begin(), f.end(), g.begin(), exponential<double>());
double e = thrust::reduce(g.begin(), g.end());
cout<<"transform+reduce result: "<<e;
}
我得到的输出是
transform_reduce result: 474
transform+reduce result: 476.432
正确的值应该是 476.432我不知道transform_reduce发生了什么。它不仅给出一个整数,而且给出一个错误的答案。难道transform_reduce不应该和transform+reduce一样吗?
请帮我解释一下发生了什么......
最佳答案
将初始化常量从整数更改为:
double d = thrust::transform_reduce(f.begin(), f.end(), exponential<double>(), 0, thrust::plus<double>());
双倍:
double d = thrust::transform_reduce(f.begin(), f.end(), exponential<double>(), 0.0, thrust::plus<double>());
^^^
transform_reduce
picks up its OutputType from the type of this parameter .
(顺便说一句,您发布的代码将无法编译。)
关于cuda - 为什么transform_reduce给出的结果与transform&reduce不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26474150/
我已经尝试使用来自 hpx 的 transform_reduce,如答案 https://stackoverflow.com/a/54481320/11008404 中给出的那样但我无法编译它。到目前
我正在研究一个优化问题,其中包含各种类似形式的数学函数,因此我将它们扭曲到 FunctionObj template struct FunctionObj { T a; Funct
我正在尝试对结构 vector 执行转换归约。该结构包含两个数字。我希望一元函数对这两个数字执行某些操作,并为我的 vector 中的每个结构返回一个值,并减少这些值的总和。如何编写仿函数来访问结构中
经常,我必须找到 Sum( f(i), 1, N ) 或 Product( f(i), 1, N ),其中 f(i) 是计算密集型的,而积分 i 来自序列范围但很大。 使用 C++20 编译器我可以编
我可以在 Fedora 和 Ubuntu 上使用 gcc 9.2.1 编译以下代码(使用 std::transform_reduce),但尝试在 clang see godbolt 上编译失败,并且我
我在具有 2.1 计算能力的 Nvidia 卡上使用 Thrust 运行蒙特卡洛模拟。如果我尝试一次 transform_reduce 整个 device_vector,我会收到以下错误。这不是耗尽设
我想计算 用于载体 和 , 其中表示 vector 的大小 .由于这涉及对两个 vector 的每个对应分量之间的差的平方和求平方根,因此它应该是一个高度可并行化的任务。我在 Windows 10 上
我是一名优秀的程序员,十分优秀!