我的目标是针对某些特殊情况开发和实施绿色算法。我为此开发了两种算法。
一是没有大号。内存访问(加载和存储)。该模式有时是合并的,有时是非合并的。我假设最坏的情况是大多数访问都会导致缓存失败。请参阅示例代码片段 a)。
另一个是大号。的计算,大致相当于下面的代码片段 b)。
我如何估计每种情况下的功耗。哪一个更节能,为什么?
平台:我将在 Intel I3 处理器、Windows 7、4 GB DRAM、3 MB 缓存上运行这些代码。
注意:我不想使用任何外部功率计。如果您发现代码没有做任何建设性的工作,也请忽略。这是因为它只是完整算法的一小部分。
更新:
这很困难,但并非不可能。人们可以很好地计算出读取 DRAM 和 CPU 的 ALU 进行乘法的成本。唯一的问题是必须具备 DRAMS 和 CPU 的电子知识,而我目前还缺乏这些知识。至少在最坏的情况下,我认为这可以很好地成立。最坏的情况意味着没有合并访问,没有编译器优化。
如果您可以估计访问 DRAM 和进行浮点乘法的成本,那么为什么无法估计电流,因此对这些操作期间的功率有一个粗略的了解?另请参阅我的帖子,我不是在问有多少功耗,而是在问哪个代码消耗更少/更多的功率,或者哪个代码更节能?
a) for(i=0; i<1000000; i++)
{
a[i]= b[i]; //a, b floats in RAM.
{
b) for(i=1; i<1000000; i++)
{
float j= j * i; //j has some value. which is used later in the program , not
// shown here
{