Changeset 31efa7c


Ignore:
Timestamp:
Dec 16, 2015 8:32:54 PM (4 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
71d4b5f
Parents:
89e5e1d
Message:

Recognize Skylake
Do the same checks for Broadwell and Skylake that we do
for Haswell, and check ADX as well, which will be used
in GMP 6.1.
Javadocs

Location:
core/java/src/freenet/support/CPUInformation
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • core/java/src/freenet/support/CPUInformation/CPUIDCPUInfo.java

    r89e5e1d r31efa7c  
    8686   
    8787    /**
     88     *
     89     * Intel Multi-Precision Add-Carry Instruction Extensions
     90     * Available in Broadwell.
     91     * Unused until GMP 6.1.
     92     *
    8893     * @return true iff the CPU supports the ADX instruction set.
    8994     * @since 0.9.25
  • core/java/src/freenet/support/CPUInformation/CPUInfo.java

    r89e5e1d r31efa7c  
    9999   
    100100    /**
     101     *
     102     * Intel Multi-Precision Add-Carry Instruction Extensions
     103     * Available in Broadwell.
     104     * Unused until GMP 6.1.
     105     *
    101106     * @return true iff the CPU supports the ADX instruction set.
    102107     * @since 0.9.25
  • core/java/src/freenet/support/CPUInformation/IntelCPUInfo.java

    r89e5e1d r31efa7c  
    129129     * so we do not distribute any. However, this is called from NativeBigInteger.
    130130     *
     131     * Broadwell is supported in GMP 6.1 and requires the ADX instructions.
     132     *
     133     * Requires support for all 7 of these Corei features: FMA3 MOVBE ABM AVX2 BMI1 BMI2 ADX
     134     * Pentium/Celeron Broadwell processors that do not support these instruction sets are not compatible.
     135     * Those processors will be Sandy-compatible if they have AVX 1 support,
     136     * and Corei-compatible if they do not.
     137     *
    131138     * @return true if the CPU implements at least a Broadwell level instruction/feature set.
    132139     * @since 0.9.25
  • core/java/src/freenet/support/CPUInformation/IntelInfoImpl.java

    r89e5e1d r31efa7c  
    343343
    344344                    // Broadwell 14 nm
    345                     case 0x3d:
    346                         isSandyCompatible = true;
    347                         isIvyCompatible = true;
    348                         isHaswellCompatible = true;
    349                         isBroadwellCompatible = true;
    350                         modelString = "Broadwell";
    351                         break;
     345                    // See Haswell notes below
     346                    case 0x3d: {
     347                        CPUIDCPUInfo c = new CPUIDCPUInfo();
     348                        if (c.hasAVX2() && c.hasBMI1()  && c.hasBMI2() &&
     349                            c.hasFMA3() && c.hasMOVBE() && c.hasABM() &&
     350                            c.hasADX()) {
     351                            isSandyCompatible = true;
     352                            isIvyCompatible = true;
     353                            isHaswellCompatible = true;
     354                            isBroadwellCompatible = true;
     355                            modelString = "Broadwell Core i3/i5/i7";
     356                        } else {
     357                            // This processor is "corei" compatible, as we define it,
     358                            // i.e. SSE4.2 but not necessarily AVX.
     359                            if (c.hasAVX()) {
     360                                isSandyCompatible = true;
     361                                isIvyCompatible = true;
     362                                modelString = "Broadwell Celeron/Pentium w/ AVX";
     363                            } else {
     364                                modelString = "Broadwell Celeron/Pentium";
     365                            }
     366                        }
     367                        break;
     368                    }
     369
    352370                    // Ivy Bridge 22 nm
    353371                    case 0x3e:
     
    377395                    case 0x45:
    378396                    case 0x46:
     397                    {
    379398                        CPUIDCPUInfo c = new CPUIDCPUInfo();
    380399                        if (c.hasAVX2() && c.hasBMI1()  && c.hasBMI2() &&
     
    396415                        }
    397416                        break;
     417                    }
    398418
    399419                    // Quark 32nm
     
    410430                        break;
    411431
     432                // following are for extended model == 5
     433                // most flags are set above
     434                // isCoreiCompatible = true is the default
     435
     436                    // Skylake 14 nm
     437                    // See reference link errata #SKD052 re: BMI
     438                    // ref: http://www.intel.com/content/dam/www/public/us/en/documents/specification-updates/desktop-6th-gen-core-family-spec-update.pdf
     439                    // See Haswell notes above
     440                    case 0x5e: {
     441                        CPUIDCPUInfo c = new CPUIDCPUInfo();
     442                        if (c.hasAVX2() && c.hasBMI1()  && c.hasBMI2() &&
     443                            c.hasFMA3() && c.hasMOVBE() && c.hasABM() &&
     444                            c.hasADX()) {
     445                            isSandyCompatible = true;
     446                            isIvyCompatible = true;
     447                            isHaswellCompatible = true;
     448                            isBroadwellCompatible = true;
     449                            modelString = "Skylake Core i3/i5/i7";
     450                        } else {
     451                            // This processor is "corei" compatible, as we define it,
     452                            // i.e. SSE4.2 but not necessarily AVX.
     453                            if (c.hasAVX()) {
     454                                isSandyCompatible = true;
     455                                isIvyCompatible = true;
     456                                modelString = "Skylake Celeron/Pentium w/ AVX";
     457                            } else {
     458                                modelString = "Skylake Celeron/Pentium";
     459                            }
     460                        }
     461                        break;
     462                    }
     463
    412464                    // others
    413465                    default:
    414466                        modelString = "Intel model " + model;
    415467                        break;
     468
    416469                } // switch model
    417470            } // case 6
Note: See TracChangeset for help on using the changeset viewer.