MAA

Memory bench questions

15 posts in this topic

Hello,

1) As i see, Memory Copy  Memory Read  Memory Write speed. How it possible? Memory and memory controller can operate in full-duplex?

2) Memory bench result is speed via one thread, or sum of multiple threads?

Share this post


Link to post
Share on other sites

If memory test is synthetic sum of multiple threads, how can I see more "real life" performance of single-thread speed?

Share this post


Link to post
Share on other sites

1) Memory Copy means writing a memory block and then reading it back. If there are no separate (dedicated) paths for writing and reading, then the copy scores will be close to the read and write scores.

2) AIDA64 uses multiple threads to perform memory bandwidth benchmarks. Modern applications are multi-threaded, so a single-threaded memory bandwidth benchmark (that we used in AIDA64 1.xx and 2.xx) is considered obsolete in 2017.

Regards,
Fiery

Share this post


Link to post
Share on other sites

1) Copying can be done in two ways:

a) read, then write. In this case copy speed is 1/2 of r/w speed.

b ) read and write simultaneously. In this case copy speed = r/w speed, but  memory and memory controller should operate in full-duplex.

which method uses your copy bench?

2) may you can provide also single-threaded memory bench for information purposes?

Share this post


Link to post
Share on other sites

We do 1/a, so we read something and then write it. It's not full duplex. And the read and write block sizes are added up together, so it's not 1/2 of read/write speed, but 1/1.  There's no consensus in the benchmark industry about how to calculate the memory/cache copy scores, some software does it the "AIDA64 way", some others use your approach of 1/2.

2) No, we have no plans to go back to providing single-threaded memory bandwidth benchmarks. You can still use AIDA64 v2.85 to have that.

Share this post


Link to post
Share on other sites

>> There's no consensus in the benchmark industry about how to calculate the memory/cache copy scores

It can not be two opinions.

If you have B bytes and  copying time is t sec, then copy speed = B/t bytes/sec.

Share this post


Link to post
Share on other sites
On ‎2017‎. ‎01‎. ‎09‎. at 9:47 PM, MAA said:

>> There's no consensus in the benchmark industry about how to calculate the memory/cache copy scores

It can not be two opinions.

If you have B bytes and  copying time is t sec, then copy speed = B/t bytes/sec.

It can and there is. E.g. Sandra uses the same score calculation method as AIDA64, while RMMA uses a different one that yields to half the score on the same system.

Share this post


Link to post
Share on other sites
On 09.01.2017 at 5:57 PM, Fiery said:

We do 1/a, so we read something and then write it. It's not full duplex. And the read and write block sizes are added up together, so it's not 1/2 of read/write speed, but 1/1. 

you do math calculations incorrect.

you do not must add up read and write block sizes, but you must add up read and write times.

Share this post


Link to post
Share on other sites

In our memory read benchmark, we read a 64 MegaByte sized block from the RAM, and measure the time it takes to complete. Score = 64MB / time_it_took_in_seconds.

In our memory write benchmark, we write a 64 MegaByte sized block into the RAM, and measure the time it takes to complete. Score = 64MB / time_it_took_in_seconds.

In our memory copy benchmark, we copy a 32 MegaByte sized block by reading small chunks (into CPU registers) in each cycle and writing it back to a different RAM location (from the CPU registers). We measure the time it takes to complete the whole operation. Score = 64MB / time_it_took_in_seconds --> that's what can be debated, ie. whether it should rather be "Score = 32MB / time_it_took_in_seconds". Whether you consider copying 32MB as moving 32MB of data, or moving 64MB of data. From the memory interface perspective, reading 32MB and writing 32MB is considered transferring a total of 64MB data, that's why we use the formula "Score = 64MB / time_it_took_in_seconds".

Share this post


Link to post
Share on other sites
3 hours ago, Fiery said:

From the memory interface perspective, reading 32MB and writing 32MB is considered transferring a total of 64MB data, that's why we use the formula "Score = 64MB / time_it_took_in_seconds".

It can be Ok if benchmark called "memory throughput" or "memory bandwidth". But your benchmark called "memory copy", and must show the speed of copying = 32MB/time.

Share this post


Link to post
Share on other sites
2 minutes ago, MAA said:

It can be Ok if benchmark called "memory throughput" or "memory bandwidth". But your benchmark called "memory copy", and must show the speed of copying = 32MB/time.

Thank you, but we'd like to stick with our formula -- which is used by other benchmark software (like Sandra) as well BTW.

Share this post


Link to post
Share on other sites
7 minutes ago, Fiery said:

Thank you, but we'd like to stick with our formula -- which is used by other benchmark software (like Sandra) as well BTW.

Sandra do not have benchmark with name "Memory copy".

Sandra have bench with name "Memory bandwidth" with correct formula for this case.

Share this post


Link to post
Share on other sites

Sandra performs Stream benchmark, which is essentially a variant of a memory copy bandwidth benchmark, spiced with some simple CPU instructions performed on the copied data.

Share this post


Link to post
Share on other sites
7 minutes ago, Fiery said:

Sandra performs Stream benchmark, which is essentially a variant of a memory copy bandwidth benchmark, spiced with some simple CPU instructions performed on the copied data.

end user looks at the name of the test, he not interested how test perform it.

Share this post


Link to post
Share on other sites

Okay, then let's just agree to disagree, and move on. Thread locked.

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.