多指数执行
回答
这有多快?根据算法的大小,幂函数不应该是太多的瓶颈。
你会写一个简单的函数,如以下几点:
Vector VectorPower(Vector vec1, Vector vec2)
{
assert(vec1.length() == vec2.length());
Vector vecAns(vec1.length());
for(unsigned int i = 0; i < vec1.length(); i++)
{
vecAns[i] = pow(vec1[i], vec2[i]);
}
return vecAns;
}
大部分的时间,这将是为你的应用足够有效。如果你正在实现一个平方根或其他超越函数,那么你也应该看看优化。另外,一些处理器针对任意积分功率进行了优化,而GPU当然是(尽管除非这是一个图形相关的帖子,并且没有标记为这样),GPU没有多大帮助。
希望这回答你的问题:)
'if'语句在很多方面都不好:)不仅它检查一些错误的条件(可能是size的意思),它试图返回而不是抛出,并且当函数具有非void返回类型时,它会尝试返回任何内容。考虑只是删除它,这只是一个示例代码。 – unkulunkulu
哎呀是的,我的意思是vec1.length()!= vec2.length(),谢谢:)把它改成断言,:) –
@Shaktal:即使断言也需要分号。 – TonyK
你试过tommath(不知道它满足你的性能要求)?它的多精度整数arith库!
以下内容假定您的数据是浮点数。如果您使用多精度整数,请指定您的要求。
干净的数字方式当然是先取得日志。事实上,即使结果是有限的,部分产品也容易出现溢出/溢出。
惯用相应的C++程序是:
#include <cmath>
#include <functional>
#include <numeric>
double f(double x, double y)
{
return y * std::log(x);
}
template <typename I, typename J>
double multi_exponentiation(I a0, I an, J b0)
{
return std::exp(std::inner_product(a0, an, b0, 0., std::plus<double>(), f));
}
// Example program
int main()
{
std::vector<double> a, b;
...
double e = multi_exponentiation(a.begin(), a.end(), b.begin());
}
使用inner_product
,而不是写在循环自己有一旦你知道,性能是一个问题的优势,你可以用parallel_inner_product
更换inner_product
算法算法由第三方库提供(或自己写一个)。
- 1. 执行时的指令数是多少?
- 2. 如何执行更多的指令加速执行
- 3. 活动指示器多线程执行
- 4. 指数在Django运行执行syncdb
- 5. 为指定的多个参数执行相同的SQL选择
- 6. 在多指标大熊猫数据框上执行T检验
- 7. 指定要在许多函数结束时执行的动作
- 8. IOS指纹执行
- 9. 推出执行人比执行人数指明
- 10. 每X秒执行指定的函数
- 11. 在指针数组上执行MergeSort
- 12. 的Java DecimalFormat的执行指数符号
- 13. 在很多行上执行函数
- 14. 在多行上执行表值函数?
- 15. 指定Listener执行顺序?
- 16. 指针和执行速度
- 17. 尝试执行非指令
- 18. 继续执行指令
- 19. 执行特权指令
- 20. 执行一条指令后
- 21. 尝试执行非指令
- 22. mSimpleFacebook.login(mOnLoginListener); null指针执行
- 23. AsTableServiceQuery使用执行指南
- 24. 汇编指令执行指令的数量
- 25. 用多个罐子执行执行
- 26. 多次执行WorkflowInstance
- 27. CTE执行多次
- 28. OnMetadataCreated多次执行
- 29. PHP执行多次
- 30. 执行多行SQLite查询
这看起来并不差 - 如果可能的话,如果它是基于图形的话,可以通过GPU更快地完成。 –
请指定您拥有的数据类型:浮点数或大整数。计算prod(a_i^b_i)的方法在两种情况下都非常不同。 –