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);