fig1 is a generalized block diagram of one embodiment of a computer system 100 . a variety of other embodiments are also contemplated . in the illustrated embodiment , a processing node 110 is shown coupled to a system memory 130 . processing node 110 may include one or more processing cores and / or execution units for executing instructions . in the illustrated embodiment , processing node 110 includes a memory controller 120 . memory controller 120 may include a memory controller queue 122 coupled to a dram controller queue 124 , which may in turn be coupled to system memory 130 . during operation , the processing cores or execution units of processing node 110 may access system memory 130 through memory controller 120 . although in the illustrated embodiment , memory controller 120 is included within processing node 110 , in alternative embodiments , memory controller 120 maybe separate from processing node 110 . in addition , while system 100 , as shown , includes one processing node 110 , in alternative embodiments system 100 may include any number of additional processing nodes and system memories . in further alternative embodiments , multiple processing nodes may share one or more system memories . in some embodiments , processing node 110 may include one or more cache memories between memory controller 120 and the cores or execution units . cache memories may hold instructions and / or data and provide faster access to these items than accesses from system memory . cache memories may be arranged hierarchically . in some embodiments , some levels of the cache hierarchy may be located within processing node 110 and , if a memory controller is located outside of processing node 110 , other levels of the cache hierarchy may also be located outside of processing node 110 . in some embodiments , multiple processing nodes may share such external caches . a variety of processing node configurations will be apparent to one of ordinary skill in the art . to simplify discussion , system memory 130 may be referred to herein as dram . however , system memory 130 may include a variety of storage devices such as sdram , sram , rom , dram and / or other conventional system memory devices . system memory 130 may be organized architecturally as a simm , dimm , ddr , rambus , fully buffered dimm ( fb - dimm ), or other suitable configuration of storage devices . a variety of memory configurations will be apparent to one of ordinary skill in the art . fig2 is a detailed block diagram of one embodiment of memory controller 120 . in the illustrated embodiment , memory controller 120 includes a memory controller queue ( mcq ) 122 , a dram controller queue ( dcq ) 124 , a monitor 210 , registers 220 and 230 , a timer 240 , and a counter 250 . mcq 122 may be coupled to one or more processing cores or execution units to receive memory requests . as noted above , mcq 122 may be further coupled to dcq 124 , which may in turn be coupled to system memory 130 . monitor 210 may be coupled to one or more processing cores or execution units and to mcq 122 . register 220 may be coupled to one or more processing cores or execution units and to timer 240 , which may in turn be coupled to mcq 122 . register 230 may be coupled to one or more processing cores or execution units and to counter 250 , which may in turn be coupled to mcq 122 . during operation , memory requests may be received by memory controller 120 where they may be buffered , prioritized , and conveyed to system memory . more specifically , memory requests may be received , assigned an initial priority , and buffered in mcq 122 . buffered memory requests may be scheduled according to priority and stored until space becomes available in dcq 124 . dcq 124 is typically a smaller queue than mcq 122 . dcq 124 may be configured to optimize dram bus utilization . when there is space available in dcq 124 , the next scheduled memory request may be conveyed to dcq 124 . dcq 124 may further convey each memory request to dram according to its assigned priority . mcq 122 may retain a queue entry corresponding to a request that has been passed to dcq 124 . the priority of each memory request in mcq 122 may be changed dynamically according to processes that will be described below . if the priority of a request in mcq 122 that corresponds to a request stored in dcq 124 is changed , the priority of the corresponding request in dcq 124 may also be changed . in one embodiment , memory controller 120 may adjust the priority of prefetch memory requests in the following manner . when first received , prefetches may be assigned a low priority as they are enqueued in mcq 122 . subsequently , as additional memory requests are received , monitor 210 may compare the address of any newly arrived demand read memory request to the addresses of any pending prefetches in mcq 122 . if the address of a newly arrived demand read matches the address of a pending prefetch , the priority of the prefetch may be changed to match the priority of the demand read , typically a medium priority . once the priority of a prefetch has changed , it may be re - scheduled relative to any other pending memory requests in mcq 122 . if a corresponding prefetch is pending in dcq 124 , its priority may also be changed . such pending memory requests may then be re - scheduled relative to any other pending memory requests in dcq 124 . in a further embodiment , memory controller 120 may adjust the priority of isochronous memory requests in the following manner . when first received , isochronous memory requests may be assigned a medium priority as they are enqueued in mcq 122 . if a received isochronous memory request is the first isochronous request in mcq 122 , timer 240 may be reset and started . once started , timer 240 may be configured to trigger after a configurable time determined by a value stored in register 220 . the value that is stored in register 220 may be programmed by software executing on a processing core or execution unit that is coupled to the memory controller . for example , in one embodiment , the value may be chosen to be large compared with typical , lightly loaded dram latencies but small compared with the maximum latency allowed for isochronous memory requests . when timer 240 triggers , the priority of the pending isochronous memory request , and any subsequently received and pending isochronous memory requests , may be changed to high . once the priorities of the pending isochronous memory requests have been changed , they may be re - scheduled relative to any other pending memory requests in mcq 122 . if any corresponding isochronous memory requests are pending in dcq 124 , their priorities may also be changed . such pending memory requests may then be re - scheduled relative to any other pending memory requests in dcq 124 . after the priorities of the pending isochronous memory requests have been changed and when another isochronous memory request is received , timer 240 may be reset and re - started . in a still further embodiment , memory controller 120 may adjust the priority of write requests in the following manner . before any write requests have been received , counter 250 may be reset to zero . when a write request is received , counter 250 may be incremented and the received write request may be assigned a low priority as it is enqueued in mcq 122 . counter 250 may be configured to trigger after it reaches a threshold value determined by a value stored in register 230 . the value that is stored in register 230 may be programmed by software executing on a processing core or execution unit that is coupled to the memory controller . when counter 250 reaches the programmable threshold , the priority of the pending write requests may be changed to medium . once the priorities of the pending write requests have been changed , they may be re - scheduled relative to any other pending memory requests in mcq 122 . if any corresponding write requests are pending in dcq 124 , their priorities may also be changed . such pending memory requests may then be re - scheduled relative to any other pending memory requests in dcq 124 . the effect of increasing the priority of a batch of write requests that have aged in mcq 122 tends toward sending a string of writes to dcq 124 , thereby causing some degree of write - bursting without actively associating write requests together . after the priorities of the pending write requests have been changed and when another write request is received , counter 250 may be reset to zero . turning now to fig3 , one embodiment of a process 300 that may be used to manage loading and unloading of a memory request queue is illustrated . process 300 may be executed in a continuous loop , although for simplicity , a single pass through the process is described . in the illustrated embodiment , process 300 may begin with reception of a memory request ( block 310 ). if the received memory request is an isochronous read or write request ( decision block 320 ), then the received memory request may be assigned a medium priority ( block 325 ) and placed in an mcq ( block 360 ). if the received memory request is not an isochronous read or write request ( decision block 320 ) and if the received memory request is a prefetch request ( decision block 330 ), then the received memory request may be assigned a low priority ( block 335 ) and placed in the mcq ( block 360 ). if the received memory request is not an isochronous read or write request or a prefetch request ( decision block 330 ) and if the received memory request is a write request ( decision block 340 ), then the received memory request may be assigned a low priority ( block 345 ) and placed in the mcq ( block 360 ). if the received memory request is not an isochronous read or write request , a prefetch request , or a write request ( decision block 340 ), then the received memory request may be assigned a medium priority ( block 350 ) and placed in the mcq ( block 360 ). it is noted that while a “ default ” priority of medium is indicated in block 350 , other embodiments may utilize a different default priority . additionally , while each of the priorities shown in block 390 may seem to suggest fixed priorities for particular types of request , priorities for a given type may in fact be programmable . once a memory request has been placed in the mcq , it and any other memory requests that are pending in the mcq may be scheduled based on their assigned priorities ( block 370 ). when space is available in a dcq , scheduled memory requests may be sent from the mcq to the dcq according to the schedule ( block 380 ), completing process 300 . fig4 illustrates one embodiment of a process that may be used to dynamically prioritize pending write requests . although a single pass through process will be described for simplicity , the process may execute in a continuous loop . the process may begin by initializing a write request counter ( block 410 ). after the counter is initialized , when a write request is received in an mcq ( block 420 ), the counter may be incremented ( block 430 ). if in this embodiment , after the counter is incremented , the counter value does not equal or exceed a programmable threshold value ( decision block 440 ), the process may return to block 420 awaiting reception of another write request . if , after the counter is incremented , the counter value equals or exceeds a programmable threshold value ( decision block 440 ), the priority of any pending write requests in either the mcq or an associated dcq may be increased from low to medium ( block 450 ). once the priorities of any pending write requests have been changed , all pending requests may be re - scheduled based on the new priority values ( block 460 ). when space is available in the dcq , scheduled memory requests may be sent from the mcq to the dcq according to the schedule ( block 470 ), completing the process . although in the embodiment previously described , the counter is configured to count from zero to a threshold value via positive increments , it will be apparent to one of ordinary skill in the art that in alternative embodiments , the counter may be configured to count from any first value to any second value . for example , the counter may be configured to count from the threshold value to zero by being decremented each time a write request is received and the priority of pending writes may be changed when the counter reaches zero . also shown in fig4 is a process 492 which may generally be performed in parallel with other activities depicted in fig4 . in the embodiment shown , process 492 monitors the status of pending requests . in response to detecting the completion of a write request ( decision block 480 ), the write request counter is decremented . fig5 illustrates one embodiment of a process that may be used to dynamically prioritize pending isochronous memory requests . although a single pass through the process will be described for simplicity , in one embodiment , the process may execute in a continuous loop . the process may begin by initializing a timer ( block 510 ). after the timer is initialized , when an isochronous request is received in an mcq ( block 520 ), the timer may be started ( block 530 ). when the timer indicates that a threshold time has elapsed ( decision block 540 ), the priority of any pending isochronous requests in either the mcq or an associated dcq may be increased from medium to high ( block 550 ). once the priorities of any pending isochronous requests have been changed , all pending requests may be re - scheduled based on the new priority values ( block 560 ). when space is available in the dcq , scheduled memory requests may be sent from the mcq to the dcq according to the schedule ( block 570 ), completing the process . although in the embodiment previously described , the timer is configured to count up to a threshold value , it will be apparent to one of ordinary skill in the art that in alternative embodiments , the timer may be equivalently configured to count down to zero from an initial threshold value . also shown in fig5 is a process 592 which may generally be performed in parallel with other activities depicted in fig5 . in the embodiment shown , process 592 monitors the status of pending requests . in response to detecting the completion of an isochronous request ( s ) ( e . g ., all prior isochronous requests have been completed at medium priority ) ( decision block 580 ), the isochronous request counter is reset . fig6 illustrates one embodiment of a process 600 that may be used to dynamically prioritize pending prefetch memory requests . although a single pass through process 600 will be described for simplicity , in one embodiment , process 600 may execute in a continuous loop . process 600 may begin by monitoring the addresses of pending requests in an mcq and an associated dcq ( block 610 ). when a demand read request is received ( block 620 ), the address of the demand read may be compared to the monitored addresses of pending requests ( decision block 630 ). if there are no pending prefetches whose addresses match the address of the received demand read , then process 600 may return to block 610 to monitor the addresses of pending requests . if an address of a pending prefetch matches the address of the received demand read , the priority of any pending prefetch requests in either the mcq or an associated dcq may be increased to match the priority of the received demand read ( block 640 ). once the priorities of any pending prefetch requests have been changed , all pending requests may be re - scheduled based on the new priority values ( block 650 ). when space is available in the dcq , scheduled memory requests may be sent from the mcq to the dcq according to the schedule ( block 660 ), completing process 600 . it is noted that the above - described embodiments may comprise software . in such an embodiment , the program instructions that implement the methods and / or mechanisms may be conveyed or stored on a computer accessible medium . numerous types of media which are configured to store program instructions are available and include hard disks , floppy disks , cd - rom , dvd , flash memory , programmable roms ( prom ), random access memory ( ram ), and various other forms of volatile or non - volatile storage . still other forms of media configured to convey program instructions for access by a computing device include terrestrial and non - terrestrial communication links such as network , wireless , and satellite links on which electrical , electromagnetic , optical , or digital signals may be conveyed . thus , various embodiments may further include receiving , sending or storing instructions and / or data implemented in accordance with the foregoing description upon a computer accessible medium . although the embodiments above have been described in considerable detail , numerous variations and modifications will become apparent to those skilled in the art once the above disclosure is fully appreciated . it is intended that the following claims be interpreted to embrace all such variations and modifications .