Skip to content

Commit 2819b63

Browse files
authored
Merge pull request #24 from porterchild/cleanup
Cleanup, parameterize simulation timesteps
2 parents aac5bb1 + cc2558b commit 2819b63

File tree

4 files changed

+41
-41
lines changed

4 files changed

+41
-41
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,5 @@ DerivedData
88
.swiftpm/
99
.build/
1010
.swift-version
11+
*.swp
12+
main

Benchmarks/BuildingSimulation/PyTorch/PyTorchSimulator.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ def simulate(simParams):
140140
startingTemp = simParams[SimParamsIndices.istartingTemp][0]
141141
slab = slab * torch.Tensor([0.0, 1, 1, 1, 1]) + startingTemp * torch.Tensor([1.0, 0, 0, 0, 0])
142142

143-
for i in range(1, 21):
143+
for i in range(0, timesteps):
144144
tankAndQuanta = updateSourceTank(tank, quanta)
145145
tank = tankAndQuanta[0]
146146
quanta = tankAndQuanta[1]
@@ -170,18 +170,19 @@ def fullPipe(simParams):
170170
loss = lossCalc(pred, 27.344767)
171171
return loss
172172

173-
learningRate = 0.1
174173

175174
totalForwardTime = 0
176175
totalGradientTime = 0
177176

177+
timesteps = 20
178178
trials = 30
179179
warmup = 3
180+
printGradToCompare = False
180181

181182
for i in range(trials):
182183

183184
inputs = SimParamsConstant
184-
forwardOnlyTime, forwardOutput = measure(fullPipe, inputs)
185+
forwardTime, forwardOutput = measure(fullPipe, inputs)
185186

186187
simParams = SimParamsConstant
187188
def getGradient(simParams):
@@ -190,13 +191,18 @@ def getGradient(simParams):
190191

191192

192193
gradientTime, gradient = measure(getGradient, simParams)
194+
195+
if printGradToCompare:
196+
print(gradient)
193197

194198
if i >= warmup:
195-
totalForwardTime += forwardOnlyTime
199+
totalForwardTime += forwardTime
196200
totalGradientTime += gradientTime
197201

198202

199203
averageForwardTime = totalForwardTime / (trials - warmup)
200204
averageGradientTime = totalGradientTime / (trials - warmup)
205+
206+
print("timesteps:", timesteps)
201207
print("trials:", trials)
202208
print("average forward and backwards pass (gradient) time", averageGradientTime)

Benchmarks/BuildingSimulation/Swift/main.swift

Lines changed: 16 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -65,25 +65,6 @@ struct QuantaAndPower: Differentiable {
6565
var power: Float
6666
}
6767

68-
func QuantaAndPowerTangentOnes() -> QuantaAndPower.TangentVector {
69-
return QuantaAndPower.TangentVector(quanta: QuantaTypeTangentOnes(), power: 1)
70-
}
71-
72-
func QuantaTypeTangentOnes() -> QuantaType.TangentVector {
73-
return QuantaType.TangentVector(power: 1, temp: 1, flow: 1, density: 1, Cp: 1)
74-
}
75-
76-
func SlabTypeTangentOnes() -> SlabType.TangentVector {
77-
return SlabType.TangentVector(temp: 1, area: 1, Cp: 1, density: 1, thickness: 1)
78-
}
79-
80-
func TankTangentOnes() -> TankType.TangentVector {
81-
return TankType.TangentVector(temp: 1, volume: 1, Cp: 1, density: 1, mass: 1)
82-
}
83-
84-
func TankAndQuantaOnes() -> TankAndQuanta.TangentVector {
85-
return TankAndQuanta.TangentVector(tank: TankTangentOnes(), quanta: QuantaTypeTangentOnes())
86-
}
8768

8869
extension Differentiable {
8970
/// Applies the given closure to the derivative of `self`.
@@ -197,7 +178,7 @@ func simulate(simParams: SimParams) -> Float {
197178
var quanta = simParams.quanta
198179

199180
slab.temp = simParams.startingTemp
200-
for i in 1 ... 20 {
181+
for _ in 0 ..< timesteps {
201182
let tankAndQuanta = updateSourceTank(store: tank, quanta: quanta)
202183
tank = tankAndQuanta.tank
203184
quanta = tankAndQuanta.quanta
@@ -220,12 +201,12 @@ func dontLetTheCompilerOptimizeThisAway<T>(_ x: T) {
220201
blackHole = x
221202
}
222203

223-
func measure(_ block: () throws -> Void) -> Double {
204+
func measure<T>(_ block: () throws -> T) throws -> (time: Double, result: T) {
224205
let t0 = DispatchTime.now()
225-
try! block()
206+
let result = try block()
226207
let t1 = DispatchTime.now()
227208
let elapsed = Double(t1.uptimeNanoseconds - t0.uptimeNanoseconds) / 1E9
228-
return elapsed
209+
return (elapsed, result)
229210
}
230211

231212
@differentiable(reverse)
@@ -235,21 +216,25 @@ func fullPipe(simParams: SimParams) -> Float {
235216
return loss
236217
}
237218

238-
var learningRate: Float = 0.1
239219
var trials = 30
220+
var timesteps = 20
240221
var totalPureForwardTime: Double = 0
241222
var totalGradientTime: Double = 0
223+
let printGradToCompare = false
242224

243225
for _ in 0 ..< trials {
244-
let forwardOnly = measure {
245-
let output = fullPipe(simParams: simParams)
246-
dontLetTheCompilerOptimizeThisAway(output)
226+
let (forwardOnly, _) = try measure {
227+
return fullPipe(simParams: simParams)
247228
}
229+
dontLetTheCompilerOptimizeThisAway(forwardOnly)
248230

249-
var grad: SimParams.TangentVector?
231+
let (gradientTime, grad) = try measure {
232+
return gradient(at: simParams, of: fullPipe)
233+
}
234+
dontLetTheCompilerOptimizeThisAway(grad)
250235

251-
let gradientTime = measure {
252-
grad = gradient(at: simParams, of: fullPipe)
236+
if printGradToCompare {
237+
print(grad)
253238
}
254239

255240
totalPureForwardTime += forwardOnly
@@ -259,5 +244,6 @@ for _ in 0 ..< trials {
259244
let averagePureForward = totalPureForwardTime / Double(trials)
260245
let averageGradient = totalGradientTime / Double(trials)
261246

247+
print("timesteps:", timesteps)
262248
print("trials:", trials)
263249
print("average forward and back (gradient) time:", averageGradient)

Benchmarks/BuildingSimulation/TensorFlow/TensorFlowSimulator.py

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ def simulate(simParams):
187187
startingTemp = simParams[SimParamsIndices.istartingTemp][0]
188188
slab = slab * tf.constant([0.0, 1, 1, 1, 1]) + startingTemp * tf.constant([1.0, 0, 0, 0, 0])
189189

190-
for i in range(1, 21):
190+
for i in range(0, timesteps):
191191
tankAndQuanta = updateSourceTank(tank, quanta)
192192
tank = tankAndQuanta[0]
193193
quanta = tankAndQuanta[1]
@@ -211,7 +211,7 @@ def measure(function, arguments):
211211
start = time.time()
212212
result = function(arguments)
213213
end = time.time()
214-
return end - start
214+
return (end - start, result)
215215

216216

217217
@tf.function
@@ -220,17 +220,18 @@ def fullPipe(simParams):
220220
loss = lossCalc(pred, 27.344767)
221221
return loss
222222

223-
learningRate = 0.1
224223

225224
totalForwardTime = 0
226225
totalGradientTime = 0
227226

227+
timesteps = 20
228228
trials = 30
229229
warmup = 3
230+
printGradToCompare = False
230231

231232
for i in range(trials + warmup):
232233

233-
forwardOnly = measure(fullPipe, SimParamsConstant)
234+
forwardTime, forwardOutput = measure(fullPipe, SimParamsConstant)
234235

235236
simParams = tf.Variable(SimParamsConstant)
236237
def getGradient(simParams):
@@ -241,14 +242,19 @@ def getGradient(simParams):
241242
return gradient
242243

243244

244-
gradientTime = measure(getGradient, simParams)
245-
245+
gradientTime, gradient = measure(getGradient, simParams)
246+
247+
if printGradToCompare:
248+
print(gradient)
249+
246250
if i >= warmup:
247-
totalForwardTime += forwardOnly
251+
totalForwardTime += forwardTime
248252
totalGradientTime += gradientTime
249253

250254

251255
averageForwardTime = totalForwardTime / (trials - warmup)
252256
averageGradientTime = totalGradientTime / (trials - warmup)
257+
258+
print("timesteps:", timesteps)
253259
print("trials:", trials)
254260
print("average forward and backwards pass (gradient) time", averageGradientTime)

0 commit comments

Comments
 (0)