iPhone 7
Core 1: 2242 MHz
Core 2: 2239 MHz
Core 3: 2240 MHz
Core 4: 2242 MHz
Thanks.

But iPhone7 can't run 4 threads simultaneously.
Two DispatchQueue jobs were just executed sequentially.

I'll fix it tomorrow to use threads.
Tried to keep things simple and it worked pretty well for my devices.

Probably it is too small workload to launch big cores.
It could be increased with little fix:
Value in cpufreq.c line 10 (WORKLOAD_REPEAT) could be increased 5-10 times.

On the iPhone 7 you only have 2 logical CPUs so again with 4 threads we should be seeing about 1100MHz for the two cores (due to time-slicing), so somethings broken with the measurement.
No. Actual measurement loop is small and it will likely work correctly even if broken by a contextswitch.
 
Last edited:
I’m not home until Wednesday so can’t test it before.

Someone else may have an iPhone 8 :)

Totally unrelated to A11 but the TrueTone display is really nice next to the iPhone 7.
 
I did some changes in the app. It uses threads now. I tried to set affinity, but it is not guaranteed in xnu.
Result is shown after the Stop button is pressed.
My results with 15 second processing time:

model 1-core / 2-cores
A7(Air)..1390/1390 (1400? expected - the only figure is from Anandtech article)
A9.......1847/1800 (1850/1800 expected)
A9X......2254/2160 (2260/2160 expected)


So frequency detection is at least 99+% accurate for single thread and 100% accurate for dual thread.
 
That should work perfectly! Thread affinity shouldn't matter too much, as long as threads are identical they shouldn't bounce around cores too much.

Any A11 test subjects with 1/2/3/4 core results?
 
Ok, compiled the new version.

iPhone 8 (A11)
Core 1: 2064 Mhz (2062 - 2304)
Core 2: 2376 Mhz (1571 - 2376)
Core 3: 2063 Mhz (2027 - 2304)
Core 4: 2262 Mhz (1911 - 2304)
Core 5: 2303 Mhz (2063 - 2304)
Core 6: 2064 Mhz (1900 - 2304)

iPhone 7 (A10)
Core 1: 2242 Mhz (2238 - 2244)
Core 2: 2240 Mhz (2238 - 2244)
 
iPhone 8 (run time around 30 secs).
1st run / 2nd run / 3rd run
1 thread
Core 1: 2373 MHz (2373 - 2376) / 2373 MHz (2373 - 2376) / 2384 MHz (2372 - 2376)
2 threads
Core 1: 2304 MHz (2299 - 2304) / 2376 MHz (2302 - 2376) / 2304 MHz (2304 - 2304)
Core 2: 2376 MHz (2302 - 2376) / 2301 MHz (2300 - 2304) / 2376 MHz (2292 - 2376)
3 threads
Core 1: 2304 MHz (2064 - 2304) / 2304 MHz (2304 - 2304) / 2304 MHz (2064 - 2304)
Core 2: 2374 MHz (2303 - 2374) / 2304 MHz (2256 - 2304) / 2362 MHz (2064 - 2362)
Core 3: 2304 MHz (2285 - 2304) / 2371 MHz (2213 - 2371) / 2304 MHz (2152 - 2304)
4 threads
Core 1: 2063 MHz (2004 - 2304) / 2304 MHz (2063 - 2304) / 2303 MHz (2064 - 2304)
Core 2: 2064 MHz (2064 - 2304) / 2376 MHz (2200 - 2376) / 2213 MHz (2064 - 2304)
Core 3: 2064 MHz (2064 - 2304) / 2250 MHz (2063 - 2304) / 2376 MHz (2062 - 2376)
Core 4: 2064 MHz (2064 - 2304) / 2171 MHz (1571 - 2304) / 2304 MHz (2212 - 2304)
5 threads
Core 1: 2064 MHz (2063 - 2304)
Core 2: 2063 MHz (1998 - 2304)
Core 3: 2172 MHz (1571 - 2304)
Core 4: 2064 MHz (2063 - 2304)
Core 5: 2064 MHz (2063 - 2304)
6 threads
Core 1: 2063 MHz (2063 - 2304)
Core 2: 2063 MHz (2063 - 2304)
Core 3: 2303 MHz (1885 - 2304)
Core 4: 2376 MHz (2063 - 2376)
Core 5: 2064 MHz (2063 - 2304)
Core 6: 2304 MHz (2063 - 2304)

iPhone 7
1 thread
Core 1: 2337 MHz (2337 - 2340)
2 threads
Core 1: 2241 MHz (2241 - 2244)
Core 2: 2244 MHz (2242 - 2244)

So the iPhone 8 will always allow 1 core to hit 2376 MHz if the thermal limit permits it.

Otherwise it will downclock from 2376 MHz to 2304 MHz and then 2064 MHz.
 
Last edited:
Resetting the min/max statistics without stopping the threads should give better numbers on the actual frequency of the small cores, I'm not sure if 2064MHz is their frequency or if it's a DVFS state on the big cores.
 
6 threads
Core 1: 2063 MHz (2063 - 2304)
Core 2: 2063 MHz (2063 - 2304)
Core 3: 2303 MHz (1885 - 2304)
Core 4: 2376 MHz (2063 - 2376)
Core 5: 2064 MHz (2063 - 2304)
Core 6: 2304 MHz (2063 - 2304)

So the iPhone 8 will always allow 1 core to hit 2376 MHz if the thermal limit permits it.
Otherwise it will downclock from 2376 MHz to 2304 MHz and then 2064 MHz.

I'm pretty certain 2064MHz is a frequency of low-power cores.
In a period of 30 secs we see that single thread was relocated to fastest core (2063->2376), while the rest of threads are freely migrating between cores 2063 <-> 2304.
The instantaneous frequency is broken - we have 2 cores @ 2304MHz, 3 cores @ 2064 and one @ 2376.
I suspect it is a result of non-synchronized thread exit - like if thread1 finished first and thread6 was relocated to faster core. I need to fix warmup / shutdown process.

iPhone 7 is matching 2.34GHz. Good.

Resetting the min/max statistics without stopping the threads should give better numbers on the actual frequency of the small cores, I'm not sure if 2064MHz is their frequency or if it's a DVFS state on the big cores.

Yeah. Silly me. In a warmup / shutdown process threads are jumping between cores a lot.
We need to record a timeline and filter the results.

However we have 3 distinct frequencies. This looks pretty ok for now:
2376 Monsoon "boost" core
2304 Monsoon normal core
2064 4xMistral
 
However we have 3 distinct frequencies. This looks pretty ok for now:
2376 Monsoon "boost" core
2304 Monsoon normal core
2064 4xMistral
If you run 3 threads and reset the statistics and keep getting these frequencies, then I agree on the analysis. In any case, Mistral cores aren't so little. Basically double to triple the performance of an A53.
 
If you run 3 threads and reset the statistics and keep getting these frequencies, then I agree on the analysis. In any case, Mistral cores aren't so little. Basically double to triple the performance of an A53.
So their "little" cores are as fast/faster than Cortex A73 ? Do you know how much power they use ?
 
So their "little" cores are as fast/faster than Cortex A73 ? Do you know how much power they use ?
a73 kirin 970 vs. iphone 7 plus little core(low power mode on)
https://browser.geekbench.com/v4/cpu/compare/4537349?baseline=4523699
i think the single core score benchmark not too far different 1904 vs. 1852

a73 kirin 970 vs. iphone 8 plus little core(maybe with low power mode on too but i'm not sure because not scaling well at 4 core)
https://browser.geekbench.com/v4/cpu/compare/4536145?baseline=4523699
the different is big 1904 vs. 2959

based on apple presentation little core a10 1/5 power of big core but no information for a11 only 75% better performance.

for additional information a53 helio p25(single core score only 837)
https://browser.geekbench.com/v4/cpu/4536517
 
Last edited:
iPhone 8 (run time around 30 secs).
1st run / 2nd run / 3rd run
1 thread
Core 1: 2373 MHz (2373 - 2376) / 2373 MHz (2373 - 2376) / 2384 MHz (2372 - 2376)
2 threads
Core 1: 2304 MHz (2299 - 2304) / 2376 MHz (2302 - 2376) / 2304 MHz (2304 - 2304)
Core 2: 2376 MHz (2302 - 2376) / 2301 MHz (2300 - 2304) / 2376 MHz (2292 - 2376)
3 threads
Core 1: 2304 MHz (2064 - 2304) / 2304 MHz (2304 - 2304) / 2304 MHz (2064 - 2304)
Core 2: 2374 MHz (2303 - 2374) / 2304 MHz (2256 - 2304) / 2362 MHz (2064 - 2362)
Core 3: 2304 MHz (2285 - 2304) / 2371 MHz (2213 - 2371) / 2304 MHz (2152 - 2304)
4 threads
Core 1: 2063 MHz (2004 - 2304) / 2304 MHz (2063 - 2304) / 2303 MHz (2064 - 2304)
Core 2: 2064 MHz (2064 - 2304) / 2376 MHz (2200 - 2376) / 2213 MHz (2064 - 2304)
Core 3: 2064 MHz (2064 - 2304) / 2250 MHz (2063 - 2304) / 2376 MHz (2062 - 2376)
Core 4: 2064 MHz (2064 - 2304) / 2171 MHz (1571 - 2304) / 2304 MHz (2212 - 2304)
5 threads
Core 1: 2064 MHz (2063 - 2304)
Core 2: 2063 MHz (1998 - 2304)
Core 3: 2172 MHz (1571 - 2304)
Core 4: 2064 MHz (2063 - 2304)
Core 5: 2064 MHz (2063 - 2304)
6 threads
Core 1: 2063 MHz (2063 - 2304)
Core 2: 2063 MHz (2063 - 2304)
Core 3: 2303 MHz (1885 - 2304)
Core 4: 2376 MHz (2063 - 2376)
Core 5: 2064 MHz (2063 - 2304)
Core 6: 2304 MHz (2063 - 2304)

iPhone 7
1 thread
Core 1: 2337 MHz (2337 - 2340)
2 threads
Core 1: 2241 MHz (2241 - 2244)
Core 2: 2244 MHz (2242 - 2244)

So the iPhone 8 will always allow 1 core to hit 2376 MHz if the thermal limit permits it.

Otherwise it will downclock from 2376 MHz to 2304 MHz and then 2064 MHz.

Can you make some test iphone 7 plus on low power mode on? i believe when iphone 7 plus on that mode the little core will active but still need to prove it.
 
Can you make some test iphone 7 plus on low power mode on? i believe when iphone 7 plus on that mode the little core will active but still need to prove it.
iPhone 7 (low power mode)
2 threads
Core 1: 1053 MHz (1034 - 1056)
Core 2: 1053 MHz (1036 - 1056)

iPhone 8 (low power mode)
4 threads
Core 1: 1571 MHz (1571 - 1812)
Core 2: 1567 MHz (1567 - 1812)
Core 3: 1567 MHz (1565 - 1812)
Core 4: 1566 MHz (1566 - 1812)
 
If we assume that the little cores are not as wide as the big cores (which is a reasonable assumption) then maybe it's possible to distinct between the big cores and little cores by making the threads to run multiple streams of independent instructions.
 
based on techinsight1 A11:
Die size: 87.66mm2
CPU: takes about 15% ~ 13.15mm2
GPU: takes about 20% ~ 17.53mm2

what if A11 compared with snapdragon 835?

i only found little information on techinsight2:
Die size: 72.3mm2
CPU: ?
GPU: ?(25% area scale from adreno 530 to 540)
 
Last edited:
Back
Top