2016-04-25 7 views
1

私は、データ型floatのCPE(クリティカルパスによって決定される)の下限を計算する方法を見つけました。しかし、私は数字がどこから来たのか分からず、同様の境界を計算しようとする前にいくつかの明確化が必要です。関数のCPEに基づいて、下限はどのように計算されますか?

これは、私がaccrossに来たものである: (4+3)/3 = 2.33

私はそれが原因でCPE値を3で割っていると仮定し、私は(4 + 3)がどこから来るかへと混乱しています。

この関数の整数および浮動小数点データのCPEは3.00です。

void inner4(vec_ptr u, vec_ptr v, data t *dest) { 
    long i; 
    long length = vec_length(u); 
    data_t *udata = get_vec_start(u); 
    data_t *udata = get_vec_start(v); 
    data_t sum = (data_t) 0; 
    for (i = 0; i < length; i++){ 
     sum = sum + udata[i] * vdata[i]' 
    } 
    *dest = sum; 
} 

enter image description here

+1

。リンクを提供しますか? – ryyker

+1

要素あたりの@ryykerサイクルhttps://en.wikipedia.org/wiki/Cycles_per_instruction – Jaden

+0

@Pauline - リンクありがとうございます。私は読みました。 floatの下限CPE(またはCPI)を表す '(4 + 3)/ 3 = 2.33'は、比率がおそらくあなたが提供した例に示されたものと同様に導かれれば単純化されているようです。特に例2では、​​ 'float'型のものですが、あなたの投稿で参照しているユニットよりもprocessor _instruction mix_と_clock cycle count_が異なっています。 – ryyker

答えて

1

...私はそれが理由CPE値を3で割っていると仮定しますが、私は(+ 3 4)がどこから来るかのよう 混乱しています。

あなたの(4+3)/3 = 2.33は、フロートの下限CPE、(またはCPI)を表すことは、あなたが提供linkの例に示すものとして導出、(おそらくファクタリング後)比を簡略化したものであることが表示されますコメントで。即ち、タイプ毎の命令数を合計し、その各々に対応するクロックサイクルを掛けたもの全てを総命令数で割ったものである。あなたがあなたの記事で参照するユニットよりもリンクで

例2、またタイプfloatのために、異なるプロセッサを搭載した命令ミックスクロックサイクル数は、イラストを提供します。これらの値がどのように導出されたかを正確に知るためにあなたの投稿には十分な情報はありませんが、リンクに記載されている公式は比がどのように構築されているかを明確に示しています。例2に与えられた同じ形に続き

:と、以下の(不自然)命令ミックスとサイクルカウントを与え、非常に簡略化した例はあるが(つまり、2つだけの命令タイプ)、これはが導出されている可能性がどのようにあなたの比率を示しています。

Instruction type Instruction count Clock cycle count 

Floating point  6000    2 
Control transfer 3000    3 

比は次のようになります。私は、関数のCPEが何であるかを知らない

(6000*2 + 3000*3)/9000 
After factoring:  

(4 + 3)/3 - Ratio is the sum of two instruction types, each multiplied 
      by their corresponding cycle count, all divided by the total 
      instructions in the specific program, then factored to 
      lowest terms. 
関連する問題