2004-03-30 njk -------------- Let's do some quick calculations to figure out the effects of overclocking on thermal output of a Barton-core Athlon. In this particular case, I'm using a mobile Athlon, so the voltages for a given clock will be markedly lower than for an equivalent desktop chip. From the AMD processor documentation, a 2.2GHz/200MHz FSB Barton running at 1.65V (the XP-3200+ chip) dissipates 60.4W typical and 76.8W maximum. An imperfect, but reasonable approximation for heat at a given clock and voltage is to assume that heat is directly proportional to processor clock, and that heat is directly proportional to the square of core voltage. This assumption would yield: Ph = C(Pc * Vc^2) where Ph = Processor Heat Pc = Processor Clock Vc = Core Voltage C = a proportionality constant With the preceding model, it is then trivial to derive an equation to approximate processor heat when clock and voltage are changed. Ph = C(Pc * Vc^2) Ph' = C(Pc' * Vc'^2) Ph = PcVc^2/Pc'Vc'^2 * Ph' Ph = Pc/Pc' * Vc^2/Vc'^2 * Ph' We can then test our model. A 2100MHz 3000+ processor with 200MHz FSB has a maximum thermal output of 68.3W. We use this processor as our prime, and then use our model to predict the output of a 2200MHz processor. We get a result of 71.6W, which unfortunately does not precisely match the AMD data. Therefore, we introduce a correction term by assuming that the error is linear. We then have an equation: Ph = Pc/Pc' * Vc^2/Vc'^2 * Ph' + ((Pc - Pc') / 19.23) Now, with some confidence, we can make predictions about nonstandard processor clocks. However, we cannot be sure that our voltage approximations are correct with the AMD-provided data alone, since all Barton processors run at 1.65V. The AMD data in general is quite granular (rated thermal values are invariant for 1830MHz to 2080MHz, which is highly unlikely in practice), so these models should not be relied upon for anything critical. However, they do seem to give reasonable approximations. In order to automate the tedium, I've used ocaml to generate my data. # let powoc2 clock volt = (clock /. 2100.) *. ((volt *. volt) /. (1.65 *. 1.65)) *. 68.3 +. ((clock -. 2100.) /. 19.23) ;; val powoc2 : float -> float -> float = # let powocl volt clock = powoc2 clock volt ;; val powocl : float -> float -> float = # let mapv volt = List.map (powocl volt) [1800.;1900.;2000.;2100.;2200.;2300.;2400.;2500.;2600.;2700.] ;; val mapv : float -> float list = Now it's simple to produce lists for a given voltage. # mapv 1.45 ;; (* Corresponds to most mobile chips at stock Vcore *) - : float list = [29.6101591312767027; 37.3220773149435701; 45.0339954986104516; 52.7459136822773189; 60.4578318659441933; 68.1697500496110678; 75.8816682332779351; 83.5935864169448166; 91.3055046006116697; 99.0174227842785513] # mapv 1.575 ;; - : float list = [37.7411115122290752; 45.9047492726155326; 54.0683870330019829; 62.2320247933884261; 70.3956625537748835; 78.5593003141613195; 86.7229380745477556; 94.8865758349342343; 103.050213595320685; 111.213851355707135] # mapv 1.60 ;; - : float list = [39.447939532693475; 47.7064010719946197; 55.9648626112957572; 64.2233241505969; 72.4817856898980324; 80.74024722919917; 88.9987087685003; 97.2571703078014309; 105.515631847102583; 113.774093386403734] # mapv 1.625 ;; - : float list = [41.1816467345824861; 49.5364253406552422; 57.891203946727984; 66.24598255280074; 74.6007611588734818; 82.9555397649462378; 91.3103183710189796; 99.6650969770917357; 108.019875583164492; 116.374654189237248] # mapv 1.65 ;; (* Default Vcore on desktop processors. *) - : float list = [42.9422331178961372; 51.3948220785974286; 59.8474110392987058; 68.3; 76.7525889607012886; 85.2051779214025657; 93.6577668821038429; 102.110355842805149; 110.562944803506412; 119.015533764207717] # mapv 1.675 ;; - : float list = [44.7296986826344281; 53.2815912858211789; 61.8334838890079226; 70.3853764921946805; 78.9372690953814242; 87.4891616985681679; 96.0410543017549; 104.592946904941641; 113.144839508128399; 121.696732111315171] # mapv 1.70 ;; - : float list = [46.5440434287973588; 55.1967329623264931; 63.8494224958556202; 72.5021120293847474; 81.1548015629138888; 89.807491096443016; 98.4601806299721432; 107.11287016350127; 115.765559697030398; 124.418249230559539] # mapv 1.725 ;; - : float list = [48.3852673563849365; 57.1402471081133854; 65.8952268598418129; 74.6502066115702689; 83.4051863632987107; 92.1601661150271525; 100.91514586675558; 109.670125618484036; 118.425105370212464; 127.18008512194092] # mapv 1.75 ;; - : float list = [50.2533704653971185; 59.1121337231818131; 67.9708969809664723; 76.8296602387511456; 85.6884234965358331; 94.5471867543205; 103.405950012105151; 112.264713269889853; 121.123476527674512; 129.9822397854592] # mapv 1.80 ;; - : float list = [54.0702142276954518; 63.1410243611633604; 72.2118344946312618; 81.2826446280991917; 90.3534547615671073; 99.4242648950350087; 108.495075028502924; 117.56588516197084; 126.636695295438756; 135.707505428906671] # mapv 1.825 ;; - : float list = [56.0189548809815463; 65.1980283840764656; 74.377101887171392; 83.5561753902663; 92.7352488933612307; 101.914322396456157; 111.093395899551055; 120.272469402645982; 129.451542905740894; 138.630616408835834] # mapv 1.85 ;; - : float list = [57.9945747156923; 67.2834048762711632; 76.57223503685; 85.8610651974288572; 95.1498953580077; 104.438725518586551; 113.727555679165391; 123.01638583974426; 132.305216000323099; 141.594046160901968] (* Past here, insane voltages, thus, sample granularity increases *) # mapv 1.9 ;; - : float list = [62.026451929387683; 71.5392752685051647; 81.0520986076226393; 90.5649219467401281; 100.077745285857617; 109.590568624975091; 119.103391964092552; 128.616215303210055; 138.129038642327544; 147.641861981445] (* Supposedly the maximum voltage tolerance here. Still insane -- the voltage regulators on most modern mobos aren't actually producing a nice, constant VDC. That's why the tolerance is so high to start with... *) # mapv 2.0 ;; - : float list = [70.4127565338741164; 80.3914856843519487; 90.3702148348297811; 100.348943985307628; 110.327673135785474; 120.306402286263307; 130.285131436741153; 140.263860587218971; 150.242589737696818; 160.221318888174665] # mapv 2.1 ;; - : float list = [79.2291280411547092; 89.6976556087037; 100.166183176252673; 110.634710743801662; 121.103238311350651; 131.57176587889964; 142.040293446448601; 152.50882101399759; 162.977348581546579; 173.44587614909554] # mapv 2.2 ;; - : float list = [88.4755664512295; 99.4577850415604274; 110.440003631891329; 121.42222222222226; 132.40444081255319; 143.386659402884106; 154.368877993215; 165.35109658354591; 176.333315173876855; 187.315533764207743] I've not yet finished testing this chip, but so far, it seems that it dislikes FSB > 200MHz, yielding random rounding errors after ~3-4h in Prime95 torture test, regardless of core clock or voltage. Supposedly, connecting the L12 bridge on the processor allows FSB > 200MHz to be used, but I've not done any tests to confirm or deny this rumor. Since my RAM is not particularly capable of running at clocks > 200MHz without raising voltage, I do not plan on performing the L12 mod. Compared to the desktop 2500+ AQXEA0330 I used in the past (which maxed at 2200MHz@1.675V (78.9W) before diminishing returns kicked in), this AQYHA0346 seems capable of 2305MHz@1.575 (78.6W), a reasonable gain. It should be noted that undervolting a processor has minimal effect on thermal output compared to decreasing clock speeds. However, when overclocking a processor, rising voltages very quickly leads to massive increases in heat. Therefore, for a person seeking low thermal output for the sake of silence, it is unfortunately necessary to sacrifice performance by lowering clock speed. Also note that I've intentionally used thermal maximum values throughout this analysis; any system should be designed such that it can operate under maximum stress indefinitely, otherwise it is misdesigned. In any case, it is easy to derive average thermal output values: simply multiply maximum thermal output by 0.787 (as determined from the AMD data -- I would have expected 1/sqrt(2) [an rms mean], but it seems that the values are derived from empirical results and not a theoretical model).