次の情報を含むデータセットがあります。
- ワークロード名
- 使用した構成
- 測定されたパフォーマンス
ここに、私の問題を説明するおもちゃのデータ セットがあります (パフォーマンス データはまったく意味がありません。例を簡単に理解できるように、さまざまな整数を選択しただけです。実際には、そのデータはパフォーマンス測定から得られた浮動小数点値になります)。
workload cfg perf
1 a 1 1
2 b 1 2
3 a 2 3
4 b 2 4
5 a 3 5
6 b 3 6
7 a 4 7
8 b 4 8
次を使用して生成できます。
dframe <- data.frame(workload=rep(letters[1:2], 4),
cfg=unlist(lapply(seq_len(4),
function(x) { return(c(x, x)) })),
perf=round(seq_len(8))
)
さまざまな構成の高調波スピードアップを計算しようとしています。そのためには、基本構成が必要です (この例では cfg = 1)。次に、ハーモニック スピードアップは次のように計算されます。
num_workloads
HS(cfg_i) = num_workloads / sum (perf(cfg_base, wl_j) / perf(cfg_i, wl_j))
wl_j
たとえば、構成 2 の場合は次のようになります。
HS(cfg_2) = 2 / [perf(cfg_1, wl_1) / perf(cfg_2, wl_1) +
perf(cfg_1, wl_2) / perf_cfg_2, wl_2)]
すべてのワークロード ペアと構成の高調波スピードアップを計算したいと考えています。サンプル データ セットを使用すると、結果は次のようになります。
workload.pair cfg harmonic.speedup
1 a-b 1 2 / (1/1 + 2/2) = 1
2 a-b 2 2 / (1/3 + 2/4) = 2.4
3 a-b 3 2 / (1/5 + 2/6) = 3.75
4 a-b 4 2 / (1/7 + 2/8) = 5.09
ループを使用しない解決策を見つけるために苦労してaggregate
いddply
ますが、実用的な解決策を思いつくことができませんでした。したがって、私が直面している基本的な問題は次のとおりです。
- ワークロードと構成の間の関係を処理する方法。特定のワークロード ペア (AB) と特定の構成の結果は、一緒に処理する必要があります (ハーモニック スピードアップ式の分母の最初の 2 つのパフォーマンス測定値はワークロード A から取得され、残りの 2 つはワークロード B から取得されます)。
- ワークロードのペアと構成ごとに、構成ベース (例では cfg 1) の値を使用してパフォーマンス値を「正規化」する必要があります。
aggregate
orなどのR関数でそれを表現する方法がよくわかりませんddply
(可能であれば、まったく)。
これを解決する方法を知っている人はいますか?
編集: 1..8 as を使用perf
すると混乱が生じるのではないかと心配していました。簡単にするためにそうしましたが、値はそれらの値である必要はありません (たとえば、次のように初期化することを想像してください: dframe$perf <- runif(8)
)。ジェームズとザックの両方の回答は、私の質問のその部分が間違っていることを理解していたので、質問でこれを明確にする方がよいと思いました. とにかく、構成1のパフォーマンスが(1、2)ではない場合に対処するために、両方の答えを一般化しました