perf-1.0 portgroup

Vincent Habchi vince at macports.org
Mon Jul 29 03:29:23 PDT 2013


Folks,

as part of the perf variant proposal, I have written a perf-1.0 portgroup file that might do the job. Opinion?

Thanks,
Vincent

—

# $Id: perf-1.0.tcl  vince at macports.org $
#
# Copyright (c) 2013 The MacPorts Project
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. Neither the name of The MacPorts Project nor the names of its
#    contributors may be used to endorse or promote products derived from
#    this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
#
# This portgroup provides a perf variant than can be used to
# optimize code at the expense of portability. It uses 
# macports-clang-3.3 as C and C++ compiler at the -O4 level (enables loop
# vectorizer and LTO) and dragonegg-3.3-gfortran-4.8 to compile
# Fortran code, thereby allowing AVX instructions even in Fortran code
#
# Usage:
# PortGroup       perf 1.0

proc get_perf_flags {} {

    # Find out on which system we are running
    set archflags ""
    set os.major [lindex [split [sysctl kern.osrelease] " "] 0]
    if {(${os.major} > 11 && \
        (![catch {sysctl hw.optional.fma} result1] && $result1 == 1)) ||
        (![catch {sysctl hw.cpufamily} result2] && $result2 == 280134364)} {
        
        append archflags "-mfma "
    }
    
    if {(${os.major} > 11 && \
        (![catch {sysctl hw.optional.avx2_0} result1] && $result1 == 1)) ||
        (![catch {sysctl hw.cpufamily} result2] && $result2 == 280134364)} {

        append archflags "-mavx2 "
        
    } elseif {(${os.major} > 10 && \
        (![catch {sysctl hw.optional.avx1_0} result1] && $result1 == 1)) ||
        (![catch {sysctl hw.cpufamily} result2] && $result2 == 1418770316)} {

        append archflags "-mavx "
    } elseif {${os.major} > 9 && \
            ![catch {sysctl hw.optional.sse4_2} result1] && $result1 == 1} {

        set archflags   "-msse4.2 "
    } elseif {${os.major} > 9 && \
            ![catch {sysctl hw.optional.sse4_1} result1] && $result1 == 1} {

        set archflags   "-msse4.1 "
    } elseif {${os.major} > 8 && \
    ![catch {sysctl hw.optional.supplementalsse3} result1] && $result1 == 1} {

        set archflags   "-mssse3 "
    } elseif {
    ![catch {sysctl hw.optional.altivec} result1] && $result1 == 1} {
    
        # PowerPC
        set archflags "-maltivec -mabi=altivec "
    }
    
    append archflags "-O4 -march=native"
    
    return $archflags
}

variant perf description {Optimize for current arch} {
    
    depends_build-append    port:clang-3.3
    depends_build-append    port:dragonegg-3.3-gcc-4.8
    
    set optflags            [get_perf_flags]
    set fortflags           "${optflags}\
        -specs=${prefix}/libexec/dragonegg/llvm33gcc48-integrated-as.specs"

    configure.compiler      macports-clang-3.3
    configure.f77           ${prefix}/bin/dragonegg-3.3-gfortran-mp-4.8
    configure.f90           ${prefix}/bin/dragonegg-3.3-gfortran-mp-4.8
    
    configure.optflags      ${optflags}
    configure.fflags        ${fortflags}
    configure.f90flags      ${fortflags}

}


More information about the macports-dev mailing list