Mercurial > hg > truffle
comparison src/cpu/x86/vm/vm_version_x86.cpp @ 3854:1af104d6cf99
7079329: Adjust allocation prefetching for T4
Summary: on T4 2 BIS instructions should be issued to prefetch 64 bytes
Reviewed-by: iveresov, phh, twisti
author | kvn |
---|---|
date | Tue, 16 Aug 2011 16:59:46 -0700 |
parents | 6ae7a1561b53 |
children | 9f12ede5571a |
comparison
equal
deleted
inserted
replaced
3853:11211f7cb5a0 | 3854:1af104d6cf99 |
---|---|
555 if( AllocatePrefetchInstr > 3 ) AllocatePrefetchInstr = 3; | 555 if( AllocatePrefetchInstr > 3 ) AllocatePrefetchInstr = 3; |
556 if( AllocatePrefetchInstr == 3 && !supports_3dnow_prefetch() ) AllocatePrefetchInstr=0; | 556 if( AllocatePrefetchInstr == 3 && !supports_3dnow_prefetch() ) AllocatePrefetchInstr=0; |
557 if( !supports_sse() && supports_3dnow_prefetch() ) AllocatePrefetchInstr = 3; | 557 if( !supports_sse() && supports_3dnow_prefetch() ) AllocatePrefetchInstr = 3; |
558 | 558 |
559 // Allocation prefetch settings | 559 // Allocation prefetch settings |
560 intx cache_line_size = L1_data_cache_line_size(); | 560 intx cache_line_size = prefetch_data_size(); |
561 if( cache_line_size > AllocatePrefetchStepSize ) | 561 if( cache_line_size > AllocatePrefetchStepSize ) |
562 AllocatePrefetchStepSize = cache_line_size; | 562 AllocatePrefetchStepSize = cache_line_size; |
563 if( FLAG_IS_DEFAULT(AllocatePrefetchLines) ) | 563 |
564 AllocatePrefetchLines = 3; // Optimistic value | |
565 assert(AllocatePrefetchLines > 0, "invalid value"); | 564 assert(AllocatePrefetchLines > 0, "invalid value"); |
566 if( AllocatePrefetchLines < 1 ) // set valid value in product VM | 565 if( AllocatePrefetchLines < 1 ) // set valid value in product VM |
567 AllocatePrefetchLines = 1; // Conservative value | 566 AllocatePrefetchLines = 3; |
567 assert(AllocateInstancePrefetchLines > 0, "invalid value"); | |
568 if( AllocateInstancePrefetchLines < 1 ) // set valid value in product VM | |
569 AllocateInstancePrefetchLines = 1; | |
568 | 570 |
569 AllocatePrefetchDistance = allocate_prefetch_distance(); | 571 AllocatePrefetchDistance = allocate_prefetch_distance(); |
570 AllocatePrefetchStyle = allocate_prefetch_style(); | 572 AllocatePrefetchStyle = allocate_prefetch_style(); |
571 | 573 |
572 if( is_intel() && cpu_family() == 6 && supports_sse3() ) { | 574 if( is_intel() && cpu_family() == 6 && supports_sse3() ) { |
599 #ifndef PRODUCT | 601 #ifndef PRODUCT |
600 if (PrintMiscellaneous && Verbose) { | 602 if (PrintMiscellaneous && Verbose) { |
601 tty->print_cr("Logical CPUs per core: %u", | 603 tty->print_cr("Logical CPUs per core: %u", |
602 logical_processors_per_package()); | 604 logical_processors_per_package()); |
603 tty->print_cr("UseSSE=%d",UseSSE); | 605 tty->print_cr("UseSSE=%d",UseSSE); |
604 tty->print("Allocation: "); | 606 tty->print("Allocation"); |
605 if (AllocatePrefetchStyle <= 0 || UseSSE == 0 && !supports_3dnow_prefetch()) { | 607 if (AllocatePrefetchStyle <= 0 || UseSSE == 0 && !supports_3dnow_prefetch()) { |
606 tty->print_cr("no prefetching"); | 608 tty->print_cr(": no prefetching"); |
607 } else { | 609 } else { |
610 tty->print(" prefetching: "); | |
608 if (UseSSE == 0 && supports_3dnow_prefetch()) { | 611 if (UseSSE == 0 && supports_3dnow_prefetch()) { |
609 tty->print("PREFETCHW"); | 612 tty->print("PREFETCHW"); |
610 } else if (UseSSE >= 1) { | 613 } else if (UseSSE >= 1) { |
611 if (AllocatePrefetchInstr == 0) { | 614 if (AllocatePrefetchInstr == 0) { |
612 tty->print("PREFETCHNTA"); | 615 tty->print("PREFETCHNTA"); |
617 } else if (AllocatePrefetchInstr == 3) { | 620 } else if (AllocatePrefetchInstr == 3) { |
618 tty->print("PREFETCHW"); | 621 tty->print("PREFETCHW"); |
619 } | 622 } |
620 } | 623 } |
621 if (AllocatePrefetchLines > 1) { | 624 if (AllocatePrefetchLines > 1) { |
622 tty->print_cr(" %d, %d lines with step %d bytes", AllocatePrefetchDistance, AllocatePrefetchLines, AllocatePrefetchStepSize); | 625 tty->print_cr(" at distance %d, %d lines of %d bytes", AllocatePrefetchDistance, AllocatePrefetchLines, AllocatePrefetchStepSize); |
623 } else { | 626 } else { |
624 tty->print_cr(" %d, one line", AllocatePrefetchDistance); | 627 tty->print_cr(" at distance %d, one line of %d bytes", AllocatePrefetchDistance, AllocatePrefetchStepSize); |
625 } | 628 } |
626 } | 629 } |
627 | 630 |
628 if (PrefetchCopyIntervalInBytes > 0) { | 631 if (PrefetchCopyIntervalInBytes > 0) { |
629 tty->print_cr("PrefetchCopyIntervalInBytes %d", PrefetchCopyIntervalInBytes); | 632 tty->print_cr("PrefetchCopyIntervalInBytes %d", PrefetchCopyIntervalInBytes); |