home *** CD-ROM | disk | FTP | other *** search
- Amiga Intuition Based Benchmarks (AIBB)
- A System Performance Evaluation Utility for the Commodore Amiga
- Release Version 3.0
-
-
- This program's primary purpose is to time-test low-level performance
- of an Amiga system, and compare the results with known figures for 3 other
- machines, namely the Amiga 2000 (or 500), the Amiga 2500/20 (68020 based
- version), and the Amiga 3000/25 (25Mhz model). The comparisons made within
- the program are designed to be a 'General' type of comparison. They are far
- from 'exact to 0.000000000xx percentage, and do not always reflect
- real-world applications performance. They can give an idea of the low-level
- performance marks of a particular system, however. Because of the nature of
- computer systems, and the fact that differences can occur between two machines
- of the same type, the comparisons made should be used as an average view of
- system performance. Many comparison samples were used to gather these figures,
- and most should come within a good proximity of the values. The conditions
- under which these values were obtained is explained in the documentation
- below. If you want to REALLY be sure of the comparisons, ideally you should
- run the tests on your machine, record the time value each test displays
- (the run-time for each test), and do the same thing to the machine you wish
- to compare against, and evaluate the differences. This program will give
- you an average result answer however, allowing you to make general comparisons
- with other types of machines and configurations Please do read the
- subsection under menus describing the 'Be Selfish' option...there are some
- warnings you MUST read there, and important information pertaining to the
- comparision evaluations with this option.
-
- -------------------------------------------------------------------------------
- -------------------------------------------------------------------------------
- -------------------------------------------------------------------------------
-
- Amiga, all Amiga models, and Intuition are trademarks of Commodore-Amiga Inc.
- MC68000, MC68010, MC68020, MC68030, and MC68040 microprocessor designations,
- M68851 Memory Management Unit, and M68881, M68882 Floating Point coprocessor
- designations are trademarks of Motorola Inc.
-
- Disclaimer: I make no guarantees that this program will be accurate. I
- have made every attempt to make it so, but I cannot be held
- responsible for its accuracy, and/or consequences of such.
- (In other words, include standard disclaimer here :-) )
- Also, should this program maim and/or destroy various aspects
- of your Amiga, I am also not responsible. (Well...it hasn't
- killed yet...): Another meaning; if you run this program, and
- something about it surprises you, causing you to
- spill coffee into your machine, which sends a power spike
- feedback through the power lines, down to your local power
- station, which subsequently explodes in flames...,
- I don't, and never did exist. ;^)
-
- -----------------------------------------------------------------------------
- -----------------------------------------------------------------------------
- -----------------------------------------------------------------------------
-
- PROGRAM REQUIREMENTS:
-
- This program can be used on any Amiga...but there are a few requirements
- to use all of it's features. In order to use the Log File saving utility,
- you must have the req.library in you libs: directory (v2.5 or higher). Please
- read the appropriate sections below for more information on this topic.
- Note that this requirement is not in actuality a "requirement", but rather
- simply necessary to use a certain feature. Special Note: Under the CLI AIBB
- will create it's own stack, when running AIBB from the workbench, however,
- you must be sure the STACK field of the icon used is set to the value
- of 18500. The supplied icon is already pre-set with this value. The only
- errors AIBB may encounter which will result in the program aborting before
- starting are that: 1.)If you started from the WorkBench, and the stack
- field in the icon was less than 18500 (CLI users need not worry about any
- settings), or 2.)AIBB was unable to open either the intuition.library,
- graphics.library, or dos.library (all of which are KickStart libraries,
- which is in ROM on most machines). If AIBB encounters any of these problems,
- it will simply abort gracefully, perhaps flashing the screen.
-
- ******************************************************************************
- ******************************************************************************
- ******************************************************************************
-
- USING THE PROGRAM:
-
- This program was designed to be fairly easy to use...which is the
- reason I utilized an Intuition interface. Basically, test options and
- such are selected from menu items, and a test is intiated by selecting
- it's gadget on the screen. Again, note that the comparisons made in this
- program are meant to be general. Here's an overview:
-
-
- *****************************************************************************
- ************************* The Main Screen ***********************************
- *****************************************************************************
-
- The screen is divided into two areas. On the left side, you will find
- the performance graph, and CPU status indications. The performance graph is
- basically just a graphical display of the percentage performance of the
- various machines, including your own. The scale represents percentages in
- hundreds, i.e. a factor of 6 would be 600%, etc... If for some reason your
- machine measures off the scale which is currently displayed, AIBB will
- auto-scale the graph to a suitable factor of the base scale (0-14) to fit
- the data on the screen. When a test is performed which is much less than
- a currently displayed scale, then AIBB will auto-scale downward (the limit
- being the base of 0-14) The CPU status area is directly below the graph,
- and shows the CPU type in your system, and the status of the various caches,
- if applicable, as well as if burst mode on the caches has been enabled. If
- your CPU does not have a particular cache feature, the display will show
- N/A (Not Applicable). The approximate clockspeed of your CPU is also
- displayed in this area (evaluated when AIBB is invoked), as well as the FPU
- type on the system, should one exist. [NOTE: These are APPROXIMATE
- clockspeed indications...+ or - 5-10%]
-
- The right side of the display contains the numerical analysis display
- boxes and the test selection gadgets. From top to bottom, the features are:
-
- Benchmark Result: This box shows the running time in seconds for the
- benchmark performed. It is not a comparison, but
- simply a display of the time used in performing the
- benchmark.
-
- Base Machine = : This area will show what machine is currently being
- used as the base machine for percentage calculations.
-
- The next 4 boxes in decending order are the numerical representations of
- the percentage performance of each machine for a particular benchmark.
- All percentage calculations are percentages relative to the base
- machine, where the base machine will always show 100% performance
- (naturally, as it is relative to itself). In addition to the
- "Base Machine = " indicator noted above, the Base Machine will have
- the marking for it's percentage box highlighted. Also displayed with
- the performance percentages in the boxes is an abbreviation for the
- type of test code being used for the comparison...this is explained
- further under the Menus section (Test Option and Comparison Options).
-
- ------------------------------------------------------------------------------
-
- The lower right hand side of the screen contains the test gadgets.
- selecting a given gadget invokes the test it represents. AIBB currently
- implements 12 tests. These tests are divided into two types: "Normal"
- tests, and Floating Point tests. "Normal" tests are ones which do not
- utilize any floating-point operations, utilizing integer math only, or
- no math at all. "Normal" Tests are indicated by dark blue labels upon
- their gadgets, whilst Floating Point tests are indicated by bright blue
- lables. A description of the tests follows, along with the test's memory
- usage. This may be important in determining where the test will end up
- Allocating it's memory. Note that tests which do not allocate external
- memory are using the program's stack to store variables, and miscellaneous
- items. A program's stack is an area of memory created upon the task's
- invocation. Under many circumstances, you may have control of this
- stack size...for example, program's invoked under the CLI or Shell will
- often inherit the default stack set for that CLI/Shell window...which
- can be set/changed with the c: "Stack" command. However, AIBB does not
- inherit this value, instead allocating it's own stack area (approximately
- 18K) in the case of the CLI... or having it set higher in the case of
- WorkBench invocation. The tests:
-
- WritePixel: (NORMAL test)
- The WritePixel Benchmark will open a small window on the screen
- and fill it with a box of a given color. The filling is done one
- pixel at a time, utilizing the graphics.library (OS) routines
- SetAPen() [set the current RastPort primary pen color] and WritePixel()
- [which sets a pixel to the given primary pen color]. The test is
- basically a benchmark of the time needed to call these routines, and
- for them to execute. The loop time is factored out of the test
- result. For the most part, this test will be useful for evaluating
- the effective ROM image access time for systems which differ from
- the conventional ROM access method found on the Amiga 2000, namely
- accessing the ROM over a 16 bit bus. Many accelerators are able
- to utilize various methods (most commonly through Dave Haynie's
- SetCPU utility) to move the image of the ROM code into a faster
- memory environment to take advantage of the additional speed and
- wider bus bandwidth of higher 680x0 processors (68020, 68030, etc).
- This commonly involves utilizing a Memory Management Unit (MMU)
- [68551, external device anchored to the 68020, or internally implemented
- on the 68030] to divert ROM routine calls to a copy of the ROM
- image made in the faster (32-bit) memory. The time needed to
- access and execute this image is dependent upon the speed of the
- processor/memory setup. [Of course, on the Amiga 3000, the bus is
- nominally 32-bits wide, therefore no movement of the ROM image is
- required]. Now, there's more to this...accelerated Amigas still
- have to access CHIP RAM for this test, as graphics functions are
- performed. Therefore, this test will also show (somewhat) the
- efficiency of the accelerator (if present) when synchronizing to
- and accessing the CHIP RAM bus. [Again, for the Amiga 3000, this
- is not entirely applicable, as the design is integrated].
- Now, this CHIP RAM bus->accelerator/processor interface efficiency
- can cause differences in systems which are based upon similar
- accelerated processors, (and at the same processor clockspeed).
- Usually the difference is not too great, but it can occasionally
- show. Now, for accelerators which do not do ROM image translations,
- (usually for ones incapable of them), this test will mostly just
- reflect the faster call/return to the benchmark code. However,
- if an accelerator includes a cache of any sort, then the cache will
- speed the routines themselves up somewhat, as the code for them
- may be partially, or even fully cached by the accelerator, negating
- the need for the bus access to utilize the OS routine.
- Memory Usage: No memory external to AIBB is allocated.
-
- Dhrystone: (NORMAL Test)
- This test should be fairly familiar to most people, as it has
- been utilized on many different system for benchmarking purposes.
- It's a test which attempts to achieve a close-to-real-world-performance
- evaluation of the system in question. It returns, not run-time in
- seconds, but rather a rating of Dhrystones per second, where in this
- case, the larger number indicates better performance.
- Memory Usage: Minimal. 44 bytes external to AIBB are allocated.
-
- Matrix: (NORMAL Test)
- A matrix manipulation benchmark utilizing 3 50x50 integer matrices.
- The test simply performs a series of operations (addition/subtraction,
- multiplication, transposition, etc) upon these matrices. Now, the
- test is set up in such a way that a great amount of time is spent
- moving data, as well as performing arithmetic operations upon it.
- Therefore, this could be thought of as also testing memory manipulation
- efficiency. Also, the test is an indicator of how well a processor/
- memory combination handles memory accesses to data, and operations on
- such, as the test does not allow the processor to simply perform the
- data operation within it's registers.
- Memory Usage: 30000 bytes external to AIBB are allocated.
-
- Fibonacci: (NORMAL Test)
- The Fibonacci sequence is a mathematical sequence which has found
- some application in the natural sciences, notably in the study of
- the constructs of nature. The sequence is set up as follows:
- x(0) = 0
- x(1) = 1
- ...
- x(j) = x(j) + x(j-1)
- where x(j) is simply the next number in the sequence, read "x sub j".
- Because of the relative simplicity of the sequence, it lends itself
- easily to the creation of a recursive program algorithm to compute
- the value. For those unfamiliar with programming in general, a
- recursive function is one which calls itself from within itself.
- Recursive algorithms in themselves are very inefficient, due to their
- nature of repeatedly making a function call to themselves, which
- involves repeated address offset calculations, stack value pushing,
- etc... by the processor. However, it is sometimes interesting to use
- such a function to test the efficiency of a system in it's handling of
- multiple function calls. For this reason, I implemented the a
- recursive Fibonacci calculation algorithm here, and the benchmark
- consists of timing it when calculating the value of Fibonacci(24) 50
- times. Each call to the recursive routine to perform the calculation
- will result in 150,049 recursive function calls which the Fibonacci
- routine will make to itself. For those curious, the value of
- Fibonacci(24) is 46,368.
- Memory Usage: No memory external to AIBB is allocated.
-
- Sieve: (NORMAL Test)
- Another test which should be familiar to most, the Sieve of
- Erathosthenes. Its a fairly simple test for determining prime
- numbers within a range of numbers. This test simply times your
- system when implementing this algorithm, which is decribed fully
- in many textbooks, or one can simply look at BYTE Magazine's
- benchmarks, which use a similar Sieve test.
- Memory Usage: No memory external to AIBB is allocated.
-
- Sort: (NORMAL Test)
- A series of 20,000 16-bit integers is sorted from a pseudo-random
- setup, and the action is timed. "Pseudo-random" meaning that I did
- not create the numbers in a random fashion, but rather in a mixed fashion
- so that on each invocation of the test the numbers will be created in
- the SAME mixed fashion. This is because the sorting algorithm is
- sensitive to the mixing, and if each time the test was run a different
- group of values was used, no two tests could be compared well. The
- mixing method I used was to insure that the algorithm would be forced
- to do the most work for each test.
- Memory Usage: 40000 bytes are allocated external to AIBB.
-
- LLines: (NORMAL Test)
- This is a low-level test of the Amiga's hardware. It uses the
- Blitter to draw lines (left to right, creating a box) across the
- screen, in each of 16 colors...ending with black. This test
- is similar to the WritePixel test in that it will hit the CHIP RAM
- bus a great deal (more so in this case), but it makes no calls to
- operating system routines, but rather the system's hardware.
- [This is done in a "friendly, legal" fashion, so fear not]. Now, as
- all Amiga's have the same basic hardware setup at this level, there
- won't be many differences in benchmark time caused by this. At
- the time of this writing, therefore, there is not a great deal of
- use to this test. However, in the future, there may be other Amiga
- systems which utilize a different bus or chip set for the display
- hardware, so this test may become useful at that time. Small
- differences noted for this test between the comparision machines
- are primarily due to loop time differences between the machines
- which could not be completely factored out.
- Memory Usage: No memory external to AIBB is allocated.
-
- IMath: (NORMAL Test)
- Integer Math. This test performs a wide variety of integer math
- functions. Included in these functions are the "normal" functions,
- such as addition, subtraction, multiplication, division, and a
- few additional bitwise functions, such as ANDing, ORing, and XORing.
- Memory Usage: No memory external to AIBB is allocated.
-
- FMath: (FLOATING POINT Test)
- Floating Point Math. Similar to the IMath test, with the exeception
- that Floating Point values and operations are utilized. With this test,
- no bitwise operations are performed. Single precision floating point
- operations/values are used here.
- Memory Usage: No memory external to AIBB is allocated.
-
- Savage: (FLOATING POINT Test)
- This is another of the "probably familiar" tests. It is a standard
- implementation of the Savage test, which makes nested calls to
- trigonometric and other more complex functions to create a single
- value. Double precision floating point operations/values are used.
- Memory Usage: No memory external to AIBB is allocated.
-
- FMatrix: (FLOATING POINT Test)
- The FMatrix test is similar in concept to the Integer Matrix test
- outlined above. Again, a great deal of data movement is performed,
- in addition to the operations involved, which are floating point
- operations in this case. With the matrix operations, the results
- under Floating Point coprocessor equipped systems can be interesting
- to note, as the system is not able to keep the data within speed-ready
- registers, and thus must make many bus accesses for the data it needs.
- Double-precision floating point math is used for this test.
- Memory Usage: 37,500 bytes externally allocated.
-
- BeachBall: (FLOATING POINT Test)
- The longest test of the group. The BeachBall test was originally
- written by Bruce Holloway of Weitek, and published in the March 1988
- issue of Byte Magazine. It is essentially a very math-intensive
- operation which basically draws a beachball on the screen, complete
- with shading. The test opens a 640x400 interlaced 16-color screen,
- and proceeds to render the picture. This test is closer to a true
- "application" test, in that it actually does something visible, and
- produces an output. The system will end up being tested in both the
- floating point arena, AND in screen output performance, which is
- done through traditional OS graphics handling calls [thus will be
- affected by the speed of which, which in turn can be affected by
- ROM re-mapping, etc]. The picture will remain on-screen for 5 seconds
- after the rendering is complete to allow you to view the full creation.
- Memory Usage: No memory external to AIBB is allocated.
-
- TEST AND COMPARISON NOTES:
- These tests are far from ideal. They suffer from traditional problems
- related to benchmarks, in that they do not in and of themselves provide
- a total picture of system throughput. Many factors must be taken into
- account when evaluating system throughput, including the architecture in
- question, it's characteristics, and it's slowest and fastest attributes.
- The tests CAN provide a starting point for evaluating a system, however.
- I urge you to look at them as such, rather than the complete answer as to
- which system is fastest...that decision is more based on what a particular
- individual's NEEDs are. [eg, if a person needs to do data transfer as a
- major portion of their work, then perhaps a fast disk subsystem and
- communications setup would be more appropriate to test than low-level
- system performance. If applications are to be run which are very disk
- intensive, then a faster disk subsystem will probably make more of a
- difference towards system througput then a faster CPU/FPU combination...
- all of these things must be taken into account]
-
- Note that the tests CANNOT be aborted once begun (short of re-setting the
- system). This is necessary as to provide such an abort mechanism would
- require that I add code to poll the message ports to AIBB's interface...
- this in itself would affect the benchmark as the time necessary to poll
- those ports would show up within the benchmark time, and thus a true
- benchmark result would not be possible. I warn you of this for a very
- important reason: Some of AIBB's tests are _LONG_...especially on more
- or less stock systems. In fact, if you are running a stock 68000-based
- system, then most of the floating point tests will be excruciatingly slow.
- [The Savage and BeachBall tests are the type where you go out for a while
- when running them]. On faster systems this is not such a problem, but
- (for example), on a 25MHz 68030 system in 32-bit SRAM (1 wait state), the
- Savage will still take 80 or so seconds when NOT using a math coprocessor.
- [Don't ASK where this came from... :^) ...Using the Coprocessor version of
- this test, with a 25MHz 68882, the test will run in under 3 seconds].
- Please do keep these things in mind if you run these tests...especially under
- the "Be Selfish" option (explained further below)...the system has not
- crashed, or hung on you....the test you selected may simply be VERY LONG,
- depending on your system configuration and the type of test parameters you
- selected...I have thoroughly tested AIBB...even under low memory situations,
- and in the final incarnation of this version I have not been able to crash
- it yet. If it should do so, however, I would appreciate being told about
- it.]
-
- ******************************************************************************
- ****************************** Menu Items ************************************
- ******************************************************************************
-
- The menu fields in the menu bar for AIBB are as explained below
-
- ==============================================================================
- The GENERAL menu:
-
- About:
- This simply shows my neato little 'about the program and
- life in general' requester. Fairly standard stuff.
- -------------------------------------------------------------------------
- System Status:
- The screen will fade out and back in with a display of some key
- notes of interest about your current system status. Various
- elements of you system's current state and parameters will
- be shown in the upper portion of the screen, including the
- location of your system stack (this may be of importance, as is
- explained later), Vector Base Register address (if present) and
- the number of currently waiting and ready tasks are among the
- items of interest. The lower portion of the display holds the
- system's memory information. Each entry corresponds to a given
- memory node in the system, such as your CHIP RAM area, a FAST RAM
- board, etc. The current priority of each area's memory, it's
- address, and number of free bytes are displayed, as well as
- total memory figures current for the system. This information
- may be useful for determining the exact conditions a test is
- being run under.
- -------------------------------------------------------------------------
- Start/Stop Log File:
- This will allow you to activate/deactivate AIBB's saving of
- test results. [The menu will show 'Start' when you are
- currently NOT saving results, and 'Stop' when you are]. When
- first selected, AIBB will call up a file requester asking you
- for the name of the Log file to use. Currently, the file
- requester implemented is the one found in Colin Fox and Bruce
- Dawson's req.library, which must be in your LIBS: directory in
- order to access this feature. If AIBB cannot find this
- shared library, the Log File menu option will be disabled
- (ghosted), and you will not be able to save your results in
- this manner....however the program will still function otherwise.
-
- When a file is selected, AIBB first checks to see if it exists.
- If not, it will create it, writing the identifier 'AIBBLogFile'
- at the head of the file (standard text file). All future test
- results will be appended to this file, until 'Stop Log File'
- is selected, or the program exits. [Note: it is NOT necessary to
- stop file logging before exiting...it is mainly there if you
- wish to make another file]. If the file you select DOES exist,
- AIBB will check the beginning of the file for the 'AIBBLogFile'
- identifier...if it finds this, it will again append all results
- to the end of this file (nothing will be overwritten)...if AIBB
- does not find the identifier at the start of the file, a
- requester will pop up warning that the file is NOT a standard
- AIBB log file, and will ask you if you wish to cancel the
- operation, OR use the file anyway. Be careful..this warning is
- designed to keep you from writing over important files...or
- programs. [NOTE: AIBB WILL happily write into a binary file if
- told to continue...I will add some better checking in the future,
- but for now, WATCH the warning!]. Note that AIBB does not buffer
- results...it writes to the file as soon as a test is completed.
- This shouldn't be too much of a problem, but if people find it
- irritating, I will of course add in some buffering. If desired,
- RAM: or a recoverable RAMdisk can be used to save results, but
- care should be taken that the space the file takes will not use
- up your system memory to an extent that the test results will be
- affected. (eg, using up your FAST RAM or enough of it that the
- memory for a test ends up being allocated in CHIP or SLOW-FAST
- RAM, or another slower medium than the ideal you wished to
- examine.
- -------------------------------------------------------------------------
- Quit:
- Self explanatory.
- The machine will be placed back into the state it was in when
- the program was first invoked...regardless of the manipulations
- which may have been done during the tests (See the section
- on 680x0 cache manipulation).
-
- ==============================================================================
-
- The TEST OPTIONS (second) Menu: This menu contains items relevant to the
- tests being performed, and the way the results are displayed:
-
- Be Selfish:
- This is an important item. Basically, when this is
- selected, the program will make sure no other tasks
- are given CPU time while one of the tests is running.
- In this way, you are assured that the test results will
- reflect true CPU performance, and not lag due to other
- tasks taking up some of the CPU's time. All of the
- comparison figures for the other machines were obtained
- with this option ON (A check will be placed by the
- option when it is active), *******IF YOU WISH TO COMPARE
- TO THE OTHER MACHINES IN THE PROGRAM MOST ACCURATELY,
- HAVE 'Be Selfish' SELECTED****** Read on...When 'Be
- Selfish' is active, the system will not respond to you
- while a test is running. Meaning, you will not be able
- to move your mouse pointer, and that most enjoyable
- floppy drive 'clicking' will even stop. THIS IS NORMAL!
- You will regain control when the test completes...the
- system did not hang. Some tests do take a little time,
- so hang in there. The only time you will really not
- want to have 'Be Selfish' active is if you wish to
- test the performance drain on your system from having
- multiple tasks running. (or just to see what the normal
- load of tasks does to your CPU performance). Now...you must
- know something about this option. What AIBB is doing when
- this option is active is invoking a Disable() call a bit before
- each test, and then an Enable() afterwards. Disable()
- is an operating system function which stops all interrupts
- within the system. Since the Amiga's multitasking depends upon
- interrupts for task switching operatons, this is also stopped,
- and AIBB becomes the only task doing anything (there are
- exceptions...that is explained later). ALL this aside, I MUST
- give you a warning. I designed this program to test CPU/FPU
- performance, and as such it is a good idea to have as little
- running in the background as possible...aside from performance
- issues though, there are some programs/operations which are very
- timing sensitive. The Amiga's Multitasking Executive was
- designed to be as close to real-time responsive as possible. As
- such, programs and tasks under it may be sensitive to system
- timing. Such programs may become erratic, or even crash if
- a function such as Disable() is invoked for any length of time.
- [Disable() should normally only be for a _brief_ time...this
- program makes an exception of that in order to get more accurate
- timing results]. Now, most programs I have encountered do not
- have a problem with AIBB, but things to watch out for are
- programs making heavy use of communications ports (serial,
- parallel, etc, and disk-intensive programs. Now, this is not
- to say AIBB is just waiting to crash your system...I've not had
- a crash related to this yet. However, AIBB was designed basically
- to be run ALONE, at least while in "Be Selfish" mode, and there
- is basically little reason to run it otherwise while using this
- mode. But do consider disk operations while in Be-Selfish mode,
- and running a test to be a no-no. NOTE: AIBB's own file saving
- is done in a safe way, and CAN be used with 'Be Selfish', as the
- program only accesses the disk when not performing a test. If
- you have AIBB just sitting there not doing anything, then you
- do not have to worry, even with "Be Selfish" selected, as this
- option is only effective while a test is in progress.
-
- AIBB defaults to NOT using Be Selfish so that the quick-to-jump-in
- person will not feel my program has locked-up the system when
- they go to do a test. The first time you select 'Be Selfish'
- from the menu, a requester will pop up reminding you of what
- I just said here. Once the requester has appeared the
- first time, it will not appear again during the course of the
- program's execution, regardless of how you set the Be Selfish
- menu option (otherwise it could become quite annoying :-) )
- Again, with 'Be Selfish' NOT enabled, there are no restrictions
- to this program's use, but again you may show a marked
- performance drop, depending on your system's task load at the test
- time.
-
- ---------------------------------------------------------------------------
- Change Base:
- This menu item allows the selection of the machine to be
- used as the base in the percentage comparisons. The
- submenu which appears next to it allows you to choose
- which machine you wish to use as the base machine...the
- default being the A2000. With any base, the
- percentages, and the graph show the performance of both
- your machine, and the other machines as compared to said
- base. The base machine will always show itself to have
- a relative performance of 100% (naturally, as it's
- evaluating itself against itself). The other machines
- will show percentages relative to the base machine's
- performance.
-
- ---------------------------------------------------------------------------
- Standard Test Options:
- This menu option contains a submenu for selecting the
- type of code to run for the 'Standard' (non-floating point)
- tests (Dark Blue gadget lettering). It presently contains
- two options:
-
- Standard Code: (NCode)
- This version of a particular test is
- using normal code which will run on
- any type of 680x0 processor, and thus
- any Amiga. This is the default setting.
-
- 020/030 Code: (0XCode)
- Tests run under this option use code
- which is optimized to run more efficiently
- under 68020,68030, and above processors.
- It takes advantage of timing differences,
- and specialized instructions present in
- these processors. This option allows
- you to run a test 'set up' to suit a
- higher-level processor.
-
- Both versions of the test perform the exact same operations,
- except the machine code used to do it differs. This allows
- comparisions to be taken with regard to more 'optimum' code
- conditions for a particular system setup. (For example,
- comparing how well your system performs a Matrix manipulation
- while running 020/030 code, compared to 'Standard' code).
- Note: if your system is a 68010 or 68000, you will not be
- able to use the 020/030 code versions of the tests, as this
- code will not run on those processors. Thus, when AIBB
- determines the processor type on your system, it will disable
- the selection if you do not have an 020 or above.
-
- ---------------------------------------------------------------------------
- FP Test Options:
- This menu item and its corresponding submenu are similar
- in concept to the "Standard Test Options" menu item. The
- difference here is that the selections made here affect the
- Floating Point tests (Light Blue gadget lettering). Again,
- two options are present:
-
- Processor Math: (PCode)
- If this option is used, AIBB will
- perform any of the floating point tests
- initiated using the main system processor.
- (eg, all math will be done by the CPU)
-
- Coprocessor Math: (CPCode)
- This option causes AIBB to use
- the version of a test which does the
- floating point operations using a
- math coprocessor (68881, 68882, or
- on board the 68040).
-
- Again, the tests do the same exact operations for either
- version...simply the method used to carry out the operations
- differs, in this case by the use of in-line coprocessor
- instructions for the Coprocessor Math selection. Also, I
- should note that the Coprocessor Math option is also utilizing
- 020/030 based code, as in the "Standard Test Options", as
- the in-line instructions here require a standard interface to
- the coprocessor, and thus a 68020 or above is also a requirement.
- While true that software traps could be implemented to use
- a coprocessor on a 68000 or 68010, this has not been used
- much on the Amiga, and thus I felt that I would also use
- 020/030 code to allow a view of how well a system performed
- floating point operations when completely set up to take
- advantage of an 020/030 + coprocessor configuration. Therefore,
- if you have an accelerator using a 68000 or 68010 which
- utilizes F-line software traps to utilize a math coprocessor,
- the code will most likely crash, as it will also be attempting
- to use 020/030 instructions with your CPU. Now, to date I have
- not seen any boards which are using the above said method
- [effectively], so this probably will not be a problem.
- In addition, AIBB tests the system for an FPU when it
- is invoked, and if none is detected, the Coprocessor Math
- selection will be disabled.
-
- ==============================================================================
-
- COMPARISON OPTIONS MENU: The options present here are very related to
- the last two options ("Standard Test Options" and "FP Test Options") present
- in the "Test Options" menu. These options affect the comparision figures
- used when the percentage performance evaluation is done agains the
- comparison machines.
-
- Cmp Standard Options: The options listed in the submenu here are
- identical to the ones in the "Test Options"
- item "Standard Test Options". However, this
- does not change the type of code run by your
- machine. What it does is change the internal
- comparision figures to reflect the performance
- of the comparision machines with the option
- selected. For example, if you select
- "020/030 Code", then the figures used in the
- comparisions will be the test times for the
- comparision machines when running 020/030 code.
-
- Cmp FP Options: Identical to the above, save that it affects the
- performance figures used for comparision with respect
- to the floating point tests.
-
- These options may be a little confusing, but here's the idea behind them:
- With this setup, you may choose to run a test using "Standard" code. Yet,
- you have "020/030 Code" selected under this menu for the comparisions.
- Therefore, you will be comparing how well your machine runs a test using
- "Standard" code, with respect to the comparision machines running
- the same test, but with an advantage: 020/030 code. Likewise, you may
- disadvantage the comparison machines by leaving these options in their
- "Standard" mode, and run the tests using 020/030 code for your machine
- (Thus possibly showing a great percentage performance increase).
- Likewise for the floating point tests and options.
-
- ==============================================================================
-
- Depending on the processor your machine has, you may find another menu,
- 'Processor'. This field only appears if you are running a 68020 or above
- and allows you to switch the caches of your processor on/off, to see the
- effects doing this has on test results. The menu configures itself to
- your processor type, so if you are running a 68020, the only item that will
- appear under this menu is 'Switch I-Cache'. For higher processors, items
- to manipulate the Data and Instruction cache, and the BURST modes will
- also appear. When a cache is changed this way, the new cache status will
- appear in the CPU status indication area explained below. If you do
- choose to manipulate the caches during the tests, and get lazy and don't
- set them back the way they were, the program will automatically set the
- caches to the state they were in upon startup when you quit the program.
- NOTE: As I indicated, if you are running a 68000 or 68010, this menu will
- not be present, as it is of no use to those processors. Also, although the
- choice for switching BURST mode on may appear for your machine's processor,
- it may or may not have effect. This is because your system must be capable
- of using this mode, and some are not. If you switch it on and your machine
- isn't able to use it, no harm will come of it. In fact, AIBB will
- still set the BURST enable bit(s) in the Cache Control Register, but the
- processor will simply ignore them.
-
- ==============================================================================
- COMPARISON NOTES: (IMPORTANT...PLEASE READ)
-
- The machines used by AIBB for the comparisions had the following
- configurations...all figures were acquired with the "Be Selfish" option
- ENABLED. Please read these sections carefully so that you have a clear
- picture of the machines/conditions which generated the comparison figures
- AIBB uses internally.
-
- A2000:
- Numerous Amiga 2000s (and 500s, which are basically the same machine at
- this level) were used to gather the figures for this set of comparison
- values. The machines were all equipped with true FAST RAM, and all tests
- were run out of this memory.
-
- A2500/20:
- This is the earlier Amiga 2500, the model equipped with the CBM A2620
- 68020-based accelerator. The 68020 on-board the accelerator is
- clocked at 14.28MHz, as is the 68881 math coprocessor included. The
- accelerator is a synchronous design. A full complement of 32-bit memory
- (standard to the board) was used, and the tests run out of this memory.
- The memory on the board was the standard 100ns memory at 2 wait states.
- The A2620 can be utilized with 80ns memory at 1 wait state by setting
- a appropriate jumper (and using the proper parts), and this should be
- kept in mind if you are testing a system equipped with such. However,
- I chose to use the 100ns parts @ 2 wait states as they were the
- standard parts used with the board. The board does include a 68851
- Memory Management Unit (MMU), so ROM translations on this machine are
- possible, and were done using Dave Haynie's SetCPU (v1.6) utility.
- SetCPU also moves the System Stack out of CHIP RAM, and into 32-bit
- memory when possible, so this must be kept in mind. The instruction
- cache on the 68020 was left ON (the OS will turn it on for you).
-
- A3000/25:
- The 25MHz model of the Amiga 3000 was used for the tests, which utilizes
- a 25MHz 68030 CPU and 68882 FPU. The following configuration was
- evident on the test systems:
- 2 megabytes of CHIP RAM, 8 megabytes of FAST. The FAST RAM on the
- system was of the 80ns Static Column variety. This is important to note,
- as the A3000 can be found in many memory configurations. The Static
- Column RAM (SCRAM) allows the use of the 68030's BURST mode of data
- access. This does result in a faster system. Normal DRAM will show
- slower benchmark performance than the SCRAM memory model. The tests
- were, of course, run out of the system's FAST RAM. The 68030 settings
- were with Instruction and Data caches ON, and BURST mode for both
- caches ENABLED.
-
-
- AIBB's internal test figures were acquired under AmigaOS 1.3....there may be
- differences under 2.0 (or other OS versions) which may cause differences with
- the test results for your machine if you are using that version of the OS.
- Particularly in question may be the OS-call heavy tests. [WritePixel
- specifically]. Now, as of this writing, AmigaOS 2.0 was not yet burned into,
- or shipping in ROM form yet. Systems running this OS version are using
- RAM-resident versions of the KickStart image, which in and of itself will
- affect the benchmark results. [eg, a 25MHz 030 system under 2.0 may not
- compare the same as the equivalent system under 1.3, particularly for such
- tests as the WritePixel, given that the 1.3 system will probably be running
- OS code within ROM...[or perhaps mapped to 32-bit RAM...in either case there
- may be differences]]. I fully intend to re-evaluate AIBB's comparisons when
- 2.0 is shipping in ROM form, and issue an appropriate update, if need be.
- However, until that time, any comparisions made under 2.0 must be recognized
- as being between a 2.0 equipped machine, and 1.3-equipped machines...which
- may or may not provide significant differences.
-
- All performance figures for the comparison machines are for NTSC
- machines. PAL machines (or machines with the 1MB Agnus running PAL) will
- may show false results due to the timing differences. If it becomes a
- nuisance, I will add PAL support to the comparisons, as it wouldn't be
- THAT big of a chore :^).
-
- Again, comparisions made by AIBB are percentage based. The Graph, and
- numerical boxes display the percentage performance of the system being
- tested with respect to the "base" system. The base system will always
- show a performance "base" of 100%...so, for example, if you run a test
- and get 600%, then you are running 600% of the speed of the base system
- on that test...this translates to 6 times the speed. The display boxes
- for the numerical percentages will also display the type of code being
- used for the comparisons...this is so you may keep track of just what
- you are comparing against. The abbreviations are:
-
- (Normal [Integer] tests)
- NCode ---- Normal Code model
- 0XCode ---- 020/030 Code models
- (Floating-Point tests)
- PCode ---- Processor-based code model
- CPCode ---- Coprocessor-based code model
-
- Again, I emphasize that the comparision figures AIBB has housed
- internally were acquired with the "Be Selfish" option ON. If this option
- is not used, you will see significant differences with your performance
- with respect to the comparision machines...even if you have an identical
- machine. Also, it is important to keep track of where AIBB is getting
- memory for it's tests on your system.
-
- Tests can be affected greatly depending on where the memory ends up
- being allocated, provided external memory is needed for a given test. The
- Amiga utilizes a prioritized memory allocation scheme. Memory of higher
- priority is given precedence for general (non-specific) allocation requests,
- and if enough memory within a given node with a given priority exists (and
- it is contiguous), that memory will be allocated over the same size memory
- in a lower priority area. Now, if the memory in the higher priority area
- is unavailable, the system will search downward through the areas (and
- priorities) until it finds a suitably large, contiguous memory region. This
- can be quite important to note on accelerated systems which have, in
- addition to 32-bit memory on an accelerator, 16-bit memory. If AIBB requests
- a memory block for a test, and there are no free areas in your 32-bit RAM
- (or it is severely fragmented to the point that no contiguous chunks of the
- required size exist), AIBB may very well end up with memory from the 16-bit
- pool...and this will affect the benchmark result. [You may desire this, you
- may not...but it is something to keep in mind]. The same argument exists
- for CHIP or SLOW-FAST RAM vs. FAST RAM. [SLOW FAST RAM exists on Amigas
- with the older 512K Agnus chip. It is the memory on the A501 expander for
- the A500, and the other 512K out of 1-meg on the stock A2000 with this older
- chip. This memory is still on the CHIP RAM bus, although it is not treated
- AS CHIP RAM...therefore it is still subject to the bus contention found on
- this bus between the processor and the custom chips (which may result in
- performance degradation). A program supplied by CBM called "FastMemFirst"
- is necessary and useful for giving any TRUE FAST RAM on the system priority
- over the SLOW-FAST memory which may be present. People with the 1-meg Agnus
- chip (or the A3000 for that matter) do not have SLOW-FAST memory, and do not
- have to concern themselves with this.].
-
- Certain utilities have surfaced which are designed to improve (to a
- small degree) system performance on the Amiga. Two such programs are
- MoveSSP, which moves the system Supervisor stack out of CHIP memory, where
- it is normally located, into FAST RAM, in order to alleviate any small
- amount of bus contention which may occur during accesses to this stack.
- Another is VBR (or MoveVBR), which moves the system vector base to FAST RAM
- from CHIP RAM..(this utility only functions on Amigas with a Vector Base
- Register...68010 processors and above). It should be noted that none
- of the comparison figures were obtained with any of these utilities in use.
- They could cause a slight speedup for your system, (if you notice it at all),
- so keep this in mind when benchmarking a system, and be sure to keep track
- of just what your system configuration is at a given time for the tests.
- [For the most part, all of the comparison figures were obtained with
- "vanilla" systems, in the sense that little to nothing was added to the
- base startup configuration]. Also see the note above on SetCPU v1.6's
- movement of the System Stack...for the A2500/20 tests. This is the same
- basic operation as with MoveSSP, (except the MMU is used) so systems running
- SetCPU v1.6 will have this stack translated, unless explicitly disallowed.
- So, the basic rundown is that SetCPU v1.6 WAS used with stack translation for
- the A2500/20...but nothing special was done for the A2000 or A3000/25. I
- left the stack translation into the A2500/20 setup simply because it is
- the default method in SetCPU v1.6 of translating the system ROM into
- 32-bit memory.
-
- ==============================================================================
- A WORD ON THE BENCHMARKS:
-
- The benchmarks employed in AIBB, as I have stated, are not in any way
- ideal. They are meant primarily to give a general feel for the performance
- of the system in question. However I do wish to make a few comments about
- the benchmark code. The code for the benchmarks used here is not optimized
- heavily. This is a deliberate action, and with purpose. Code optimization
- by compilers (and assemblers to a different extent) can be a wonderful tool
- for enhancing program performance. However, it can also make _system_
- benchmarks quite hard to properly evaluate. Optimizing compilers (and
- post-compilation utilities) do a wide variety of manipulations on the
- code generated for a program, or function therein. These optimizations
- are very useful for most situations, but can cause problems with system
- benchmarks. Optimizers may re-adjust code and totally eliminate variables,
- portions of expressions, and even entire code segments. Strength reduction
- may be performed on certain operations (an intended multiply operation may
- be changed to a simpler multiple-addition operation). While these things
- are VERY useful for other types of code, for benchmarks of systems, they
- defeat the purpose. I want the system to WORK during the benchmarks, and
- do EXACTLY what I intended it to do, in the manner I intended. For this
- reason, heavy optimization was not used. Now, some common optimization was
- done...use of register variables where possible, etc... And, a certain
- amount of internal compiler optimization was unavoidable. However, I was
- sure to check the output object code, and verify that I was getting a
- good code model of what I wanted tested. The object of AIBB was not to
- test how well a compiler could optimize code...but to see just how well
- different systems could perform while operating on benchmark code.
-
- The benchmarks employed by AIBB are meant to be used in the context
- of comparing one type of Amiga, or Amiga setup to another (or to the
- built-in comparison machines). The figures you receive from AIBB should
- NOT be used to compare an Amiga to another architecture. The reason for
- this is that, there are too many variables involved in such a comparison.
- Take, for example, the Dhrystone benchmark. AIBB's implementation of the
- dhrystone is "standard" (whatever that means these days), BUT...the version
- on the other machine architecture may be standard, but was in compiled the
- same way? Better yet, how do the compiler used for AIBB and the other
- architecture differ? (Different C compiler implementations by different
- authors/publishers will create different code, depending on their levels
- of optimization within the compiler itself, etc...). Is the other
- architecture's code further optimized? As you see, this creates a big mess
- for using AIBB in such comparisons. These types of comparisons are better
- left to an environment where the compiling, code generation, etc... are
- all under the testing individual's control.
-
- ==============================================================================
- PROGRAMMING NOTES:
-
- AIBB was written in C, with assembly code sections where necessary.
- [the Cache Control Register access routines, etc...]. It was compiled
- with SAS/C 5.10a using register argument parameters for all function
- calls, 16-bit PC-relative offset function call addressing, and base A4
- relative data addressing. It was extensively tested on a variety of
- machines, and in a variety of conditions, including AmigaOS 2.0. It should
- work properly with all versions of AmigaOS, but 2.0 compatibility has not
- been _thoroughly_ tested. If a problem arises under 2.0, I would appreciate
- hearing about it. [In any case, as mentioned earlier, the test figures
- were set for AmigaOS 1.3...in some cases the OS version will make no
- difference, in others it may]. The assembly portions of AIBB were
- assembled with the SAS "asm" assembler included with SAS/C 5.10a.
-
- I want to make a comment on the use of Disable() within this program.
- Disable() is a function designed primarily to allow a task to access data
- structures shared by interrupt code, without worry of having this code
- changed by an interrupt event during the access. My use of it here was
- because it was the only real way to insure that my program would have the
- best chance of being given total control of the procesessor. What I want
- to make clear is this: If you are just starting to program the Amiga,
- (or other multitasking systems for that matter), the use of Disable() or
- functions like it is to be a last resort, unless you are doing something
- very similar to what I have done here. Disable() is a very cruel thing
- to do to a multitasking system, and should be avoided if at all possible.
- There are some circumstances where it's use is necessary, to be sure, but
- it should be considered that my use of it here is NOT a standard method
- of usage for the call. [In fact, in most circumstances you should not
- be Disable()'ed for more than 250ms, as per the ROM Kernel Manual
- recommendations.] In the context where I have used the call for this program,
- it won't cause problems provided the proper (mentioned earlier) environment
- exists. But to be sure, indiscriminate calls to Disable() and such are very
- poor programming practice.
-
- ==============================================================================
- ACKNOWLEDGEMENTS:
-
- I wish to thank all of the folks who helped and supported me in this
- project. Especially of help was Dr J. Scott Thayer, sysop of the
- Amiga Friends BBS. He spent long periods of time evaluating AIBB, and
- finding bugs which I did not notice. Without his help it is doubtful
- that AIBB v3.0 would have been released in any timely fashion.
-
- ==============================================================================
- MISCELLANEOUS:
-
- Questions, comments, and suggestions about this program are quite welcome.
- I can be reached the following ways:
-
- Safe Harbor BBS: Amiga Hardware Special Interest Group Operator
- (SIGOP--SIG Area 5 [Amiga Hardware]) (414)548-8140
- I can always be reached here.
- Amiga Friends BBS: (714)870-4754 or -6954 (two lines). Generally
- I can be reached here anytime as well.
-
- AmiHolics BBS: (602)843-8486
- Northwest Amiga Group (NAG): (503)656-7393
- JDR Microsystems BBS: (408)559-0253
- Miller's Amiga System BBS: (612)698-1485
-
- I can also be found on USENET: lkoop@crash!pnet01.cts.com (Internet)
- [ pick your path :^) ] or on BIX as lkoop.
-
- If you wish, you can also contact me via the U.S. Snail service at
-
- LaMonte Koop
- 565 Park Meadows Dr. #302
- Waite Park, MN 56387
-
- Enjoy the program, and don't hesitate to comment on it to me. I am always
- looking to improve the code I write, so I take constructive criticism
- well. However, flames, useless criticism, or general nastiness get their
- best attention from me by simply outputting them to either /dev/null or
- NIL: ...your choice ;^).
-
-
-
-