nvc++(1)
nvc++(1) โ from the General Commands Manual ๐ okay bestie, this is the whole manual page for the NVIDIA GNU-compatible C++ compiler, and we are getting through it together, no skips, no cap.
๐ธ NAME ๐ธ
nvc++ โ The NVIDIA GNU-compatible C++ compiler. Literally the icon. ๐
โจ SYNOPSIS โจ
nvc++ [ -flag ]... sourcefile...
๐ DESCRIPTION ๐
nvc++ is a C++17 compiler for NVIDIA GPUs and AMD and Intel CPUs. It supports ISO C++17, supports GPU parallel programming with OpenACC, and supports multicore CPU programming with OpenACC and OpenMP. nvc++ invokes the C++ compiler, assembler and linker with options derived from its command line arguments, and maintains link compatibility with the GNU C++ compiler. ๐ซถ
Suffixes of source file names indicate the type of processing to be done:
.c,.C,.cc,.cpp,.cxx,.c++โ C++ source; preprocess, compile.iโ C++ source after preprocessing; compile.cuโ CUDA source; preprocess, compile.cupโ Preprocessed CUDA source; compile.sโ assembler source; assemble.Sโ assembler source; preprocess, assemble.oโ object file; passed to linker.aโ library archive file; passed to linker
If coinstalled with nvfortran, Fortran file suffixes are also recognized and compiled with the nvfortran compilers; see nvfortran and the NVIDIA User's Guide. Other files are passed to the linker (if linking is requested) with a warning message. ๐
Unless one overrides the default action using a command-line option, nvc++ deletes the intermediate preprocessor and assembler files (see the options -c, -E, -P, --no_line_commands, --preprocess, and -Mkeepasm); if a single C++ program is compiled and linked with one nvc++ command, the intermediate object file is also deleted. Linking is the last stage of the compile process, unless you use one of the -c, -E, -P, --no_line_commands, --preprocess, or -S options, or unless compilation errors stop the whole process. ๐
๐ OPTIONS ๐
Options must be separate; -cs is different from -c -s. Here is a list of all options, grouped by type. More detailed explanations are in following sections. ๐
๐ซถ Overall Options โ the full roster ๐ซถ
-- -# -### --actual_o_filefilename -c -[no]defaultoptions
--diag_errorarg --diag_remarkarg --diag_suppressarg
--diag_warningarg --display_error_number -dryrun -drystdinc
-dumpversion -echo --flagcheck -flags -fmax-errors=<n>
--gcc-toolchain=path -help[=option] -Manno -M[no]idiom
-Minform=level -Mint128 -Mkeepasm -M[no]list -noswitcherror
--nvcchost -o file -rc rcfile -S -show -silent -time -V -V<ver>
-v --version -W[no]-deprecated-declarations -Werror -Wpedantic
-W[no-]sign-compare -W[no-]unused-but-set-parameter
-W[no-]unused-but-set-variable -W[no-]unused-parameter
-W[no-]unused-variable -w -x language -x none -Wpass,option
-Ypass,directory
๐ Optimization Options ๐
-alias=option -fast -f[no-]cx-limited-range -fastsse -fPIC -fpic
-KPIC -Kpic -M[no]autoinline=option -Mcache_align -Mconcur=option
-M[no]depchk -M[no]dse -Mextract=option -M[no]fma -M[no]frame
-M[no]info=option -Minline=option -Minstrument=option
-M[no]ipa=option -M[no]lre[=assoc|noassoc] -M[no]movnt
-Mneginfo=option -Mnoopenmp -Mnosgimp -Mnovintr -Mpfi[=option]
-Mpfo[=option] -M[no]pre -M[no]prefetch=option -Mprof=option
-M[no]propcond -Mquad -Msafe_lastval -M[no]safeptr=option
-M[no-]signed-zeros -M[no]stride0 -M[no]unroll=option
-M[no]unsafe_par_align -M[no]vect=option -M[no]zerotrip
-mp[=option] -nomp -Olevel -pg
๐ Debugging Options ๐
-g -gopt -M[no]bounds -Mchkstk -Mcoff -Mdwarf2 -Mdwarf3 -Melf
-Mnodwarf -[no]traceback -nvmalloc
๐งช Preprocessor Options ๐งช
-C -Dmacro -define_macromacro --dependencies
--dependencies_quoted_only --dependencies_to_filefilename
--dependencies_to_file_quoted_onlyfilename
--dependencies_to_stdout --dependencies_to_stdout_quoted_only -E
-Idirectory -include file --include_directorydirectory -idirafter
directory -isystem directory -iquote directory -M
-Mcpp=[[no]comment|m|md|mm|mmd|mq:target|mt:target|suffix:suff]
-MD -MM -MMD[filename] -MQ -MT -Mnostddef -Mnostdinc -Mpreprocess
-N --no_line_commands -P --preprocess -Umacro -undefine_macroname
-YI,directory -Yp,directory
๐งฐ Assembler Options ๐งฐ
-Wa,argument[,argument]... -Ya,directory
๐ Linker Options ๐
-acclibs --[no-]as-needed -Bdynamic -Bstatic -Bstatic-nvidia
-Bsymbolic -cudaforlibs -cudalib=libname -cudalibs -fortranlibs
-g77libs -Ldirectory -llibrary -m -Mcudalib=libname
-M[no]eh_frame -Mnostartup -Mnostdlib -M[no]rpath -Mmkl -pthread
-Rdirectory -r -rpath directory -s -shared -soname name -static
-static-nvidia -uname --[no-]whole-archive -Wl,option[,option]...
-Xlinker option[,option]... -YC,directory -Yl,directory
-YL,directory -YP,directory -YS,directory -YU,directory
๐ฃ๏ธ Language Options ๐ฃ๏ธ
-$ -A -a --[no_]alternative_tokens --[no_]anachronisms
--[no_]array_new_and_delete -asmsuffix=suffix
--[no_]auto_instantiation -B -cuda=option --[no_]bool
--[no_]brief_diagnostics --[no_]builtin --comments
--compress_names --no_compress_names -cppsuffix=suffix
--create_pchfilename --c++standard
--[no_]distinct_template_signatures --dollar -enumber
--early_tiebreaker --[no_]enum_overloading --error_limitnumber
--[no_]explicit -fix_so_init --[no_]for_init_diff_warning
--force_vtbl -fno-builtin --gnu_extensions --[no_]guiding_decls
--ieeenum --[no_]implicit_include --[no_]implicit_typename
--late_tiebreaker --list --[no_]llalign --long_lifetime_temps
--[no_]long_preserving_rules -M[no]builtin -M[no]dalign
-Mdollar=char -Mfcon -M[no]llalign -Mlibsuffix=suffix
-Mobjsuffix=suffix -Mschar -M[no]signextend -M[no]single -Muchar
--[no_]namespaces --new_for_init --no_exceptions
--no_use_before_set_warnings --no_warnings
--[no_]non_const_ref_anachronism --old_for_init
--[no_]old_specializations --pch --pch_dirdirectory --pch_memnum
--[no_]pch_messages --pedantic --preincludefilename
--prelink_objects --remarks --remove_unneeded_entities
--[no_]restrict --[no_]rtti --short_lifetime_temps
-std=c++standard --suppress_vtbl --timing --trace_includes
--[no_]typename --use_pchfilename --using_std
--[no_]wrap_diagnostics -Xfilename
๐ฏ Target-specific Options ๐ฏ
-acc -noacc -cuda=option -gpu=option -K[no]ieee -Ktrap=option
-march=target -m[no-]daz-ftz -M[no]daz -M[no]flushz
-M[no]fpmisalign -M[no]fprelaxed=option -M[no]func32 -Mgccbugs
-M[no]longbranch -M[no]second_underscore -Mwritable-strings
-mcmodel=small|medium -stdpar=option -nostdpar -ta=target
-target=option -tp=target
When source files are compiled using -g, -mp, -Mconcur, -Mipa, or -Mprof the same option should be used when using nvc++ to link the objects. ๐ฅ
๐ Overall Options โ the deep dive ๐
okay now we're zooming in on the Overall Options one by one. Same facts, more sparkle. ๐ฆ
--โ Anything after this switch is treated as a filename. Note that most tools will not allow a filename starting with a dash, so these should be avoided. like, avoid avoid.-#โ Display the invocations of the compiler, assembler, and linker. These invocations are the command lines created bynvc++.-###โ Display invocations of the compiler, assembler and linker, but do not execute them.--actual_o_filefilenameโ Name the object file.-cโ Skip the link step; compile and assemble only.-defaultoptions(default),-nodefaultoptionsโ Use (don't use) the default options set in site-specific or user-specificPREOPTIONSorPOSTOPTIONSdriver variables.--diag_errorargโ Override the normal error severity of the specified diagnostic message(s); the message(s) may be specified using a mnemonic error tag or using the error number.--diag_remarkargโ Override the normal error severity of the specified diagnostic message(s); the message(s) may be specified using a mnemonic error tag or using the error number.--diag_suppressargโ Override the normal error severity of the specified diagnostic message(s); the message(s) may be specified using a mnemonic error tag or using the error number.--diag_warningargโ Override the normal error severity of the specified diagnostic message(s); the message(s) may be specified using a mnemonic error tag or using the error number.--display_error_numberโ Display the error message number in any diagnostic messages that are generated. The option may be used to determine the error number to be used when overriding the severity of a diagnostic message.-dryrunโ Use this option to display the invocations of the compiler, assembler, and linker but do not execute them.-drystdincโ Display the standard include directories without invoking the compiler.-dumpversionโ Display the shortened version of the compiler. For example,21.11or22.3.-echo [=go|stop]โ Echo the command line flags and (by default) stop. This is useful when the compiler is invoked by a script.goโ Don't stop after echoing the command line.stop(default)โ Do stop after echoing the command line.
--flagcheckโ Don't compile anything; just emit any messages for command-line switch errors. Return a success error code if there are no command-line switch errors.-flagsโ Display all validnvc++command-line options in alphabetical order.-fmax-errors=<n>โ Specify maximun numbers of errors before terminating compilation.--gcc-toolchain=pathโ Specify gcc toolchain location usingpathto gcc directory or gcc executable. The argument can either be gcc root directory,<root directory>/bin, or the gcc executable itself.-help[=option]โ Displays command-line options recognized bynvc++on the standard output.nvc++ -help -otherswitchwill give help about-otherswitch. The default is to listnvc++command line options by group; options are:groupsโ Print out the groups into which the switches are organized.asmโ Print help for assembler command-line options.debugโ Print help for debugging command-line options.languageโ Print help for language-specific command-line options.linkerโ Print help for linker options.
Still in overall-options land, finishing the -help topics real quick:
optโ Print help for optimization command-line options.otherโ Print help for any other command-line options.overallโ Print help for overall command-line options.phaseโ Print help for the known compiler phases.preproโ Print help for preprocessor command-line options.suffixโ Describe the known file suffixes.switchโ Print all switches in alphabetical order.targetโ Print help for target-specific command-line options.variableโ Show thenvc++configuration; this is the same as-show.-Mannoโ Produce annotated assembly files where source code is intermixed with assembly language; this implies-Mkeepasm. Cute for staring at, lowkey.-Midiom,-Mnoidiom(default) โ Enable loop idiom recognition. Memory copy, memory set, and memory zero loops are recognized and replaced with calls to their respective optimized versions.-Minform=levelโ Specify the minimum level of error severity that the compiler displays during compilation. The levels are:fatalโ Instructs the compiler to display fatal error messages.file(default),nofileโ Print out (don't print out) the names of files as they are compiled; this is only active when there is more than one file on the command line.severeโ Instructs the compiler to display severe and fatal error messages.warnโ Instructs the compiler to display warning, severe and fatal error messages.informโ Instructs the compiler to display all error messages (inform,warn,severeandfatal).
The default is -Minform=warn.
-Mint128โ Enable extended integer types__int128andunsigned __int128. Big ints, bestie.-Mkeepasmโ Keep the assembly file for each source file, but continue to assemble and link the program. This is mainly for use in compiler performance analysis and debugging.-Mlist,-Mnolist(default) โ Create (don't create) a listing file.-noswitcherrorโ Ignore unknown command line switches after printing a warning message; the default behavior is to print an error message and halt.
๐ Heads up: default nvc++ is not chill about unknown switches โ it errors out and stops.
--nvcchostโ Enable thepgc++compiler as the CUDA native host compiler.-o fileโ Usefileas the name of the executable program, rather than the defaulta.out. If used with-c,-P, or-S, and a single input file,fileis used as the name of the object, preprocessor, or assembler output file.-rc rcfileโ Specifies the name of anvc++startup configuration file. Ifrcfileis a full pathname, then use the specified file. Ifrcfileis a relative pathname, use the file name as found in the$DRIVERdirectory.-Sโ Skip the assembly and link steps. Leave the output from the compile step in a file namedfile.sfor each file namedfile.c.-showโ Produce help information describing the currentnvc++configuration.-silentโ Do not print warning messages. Same as-Minform=severe.-timeโ Print execution times for the various steps in the compiler itself.-Vโ Display version messages and other information.-V<ver>โ If the specified version of the compiler is installed, that version of the compiler is invoked.-vโ Verbose mode; print out the command line for each tool before it is executed.--versionโ Display version messages and other information.-Wdeprecated-declarations,-Wno-deprecated-declarationsโ Emit or suppress warnings about use of functions, variables and types marked as deprecated using the deprecated attribute.-Werrorโ Turn all warning messages into errors. The glow-up from "hmm" to "nope" fr.-Wpedantic,-pedanticโ Issue strict ANSI warnings.-Wsign-compare,-Wno-sign-compareโ Emit or suppress warnings when comparisons are made between signed and unsigned operands.-Wunused-but-set-parameter,-Wno-unused-but-set-parameterโ Emit or suppress warnings when parameters are set but unused. Implies-W[no]-unused-but-set-variable.-Wunused-but-set-variable,-Wno-unused-but-set-variableโ Emit or suppress warnings when variables are set but unused. Implies-W[no]-unused-but-set-parameter.-Wunused-parameter,-Wno-unused-parameterโ Emit or suppress warnings about unused parameters.-Wunused-variable,-Wno-unused-variableโ Emit or suppress warnings about local variables that are defined but are never referenced.-wโ Do not print warning messages.-x languageโ Specify explicitly the language for the input files (instead of choosing based on the file name suffix). Possible values forlanguageare:ccppc++cpp-outputfFf95f95-cpp-inputf90F90f77f77-cpp-inputcufCUFasmASMassemblerassembler-with-cpp
-x noneโ Turn off language specification, so the input files are handled according to their suffixes.-Wpass,option[,option...]โ Passoptionto the specified pass. Each comma-delimited option is passed as a separate argument. The passes are:cโ for the C++ front end,0โ for the compiler back end,aโ for the assembler,iโ for the interprocedural analyzer, andlโ for the linker.
-Ypass,directoryโ Look indirectoryfor passpass, rather than in the standard area. The passes are:cโ Search for the C++ front end executable indirectory.0โ Search for the compiler back end executable indirectory.aโ Search for the assembler executable indirectory.Cโ Search for the compiler library indirectory.iโ Search for the InterProcedural Analyzer (IPA) indirectory.lโ Search for the linker indirectory.Iโ Set the compiler's standard include directory todirectory. The standard include directory is set to a default value by the driver and can be overridden by this option.Lโ If the linker supports the-YLoption, then pass the option-YL,directoryto the linker. Otherwise, usedirectoryas the standard library location.Sโ Search for the startup object files indirectory.Uโ If the linker supports the-YUoption, then pass the option-YU,directoryto the linker. Otherwise this option is ignored.
โจ Optimization Options โจ
-alias=optionโ Specifies whether to optimize using ANSI C type-based pointer disambiguation rules. The options can be one of:ansiโ Assume ANSI C type-based pointer disambiguation rules apply; this can enable better optimization in some cases. The rules state that a load or store through a pointer of any type will not conflict with a load or store of a variable or through a pointer of a different type. This is the default with-O2and above.traditionalโ Assume traditional C semantics apply. The compiler will assume that a load or store through any pointer might conflict with any variable or pointer dereference unless it can prove otherwise. This is the default with-O1and below, and when there is a type-cast pointer reference in the function.
-fastโ Chooses generally optimal flags for the target platform. Usenvc++ -fast -helpto see the equivalent switches. Note this sets the optimization level to a minimum of 2; see-O. Basically the "just make it fast" button, bestie.-fcx-limited-rangeโ Specify that complex division does not need range reduction.-fno-cx-limited-rangespecifies that complex division does need range reduction.-fcx-limited-rangeis the default setting at optimization level-Ofast.-fastsseโ Chooses generally optimal flags for a processor that supports to vectorize for the SSE/AVX instructions. Usenvc++ -fastsse -helpto see the equivalent switches.-fPICโ Equivalent to-fpic; provided for compatibility with other compilers.-fpicโ Instructs the compiler to generate position-independent code which can be used to create shared object files (dynamically linked libraries).-KPICโ Equivalent to-fpic; provided for compatibility with other compilers.-Kpicโ Equivalent to-fpic; provided for compatibility with other compilers.-Mautoinline[option[,option...],-Mnoautoinline(default) โ Enable inlining of functions with the inline attribute.-Mautoinlineis implied with the-fastswitch. The options are:levels:nโ Inline up tonlevels of function calls; the default is to inline up to 10 levels.maxsize:nโ Only inline functions with a size ofnor less. The size roughly corresponds to the number of statements in the function, though the correspondence is not direct. The default is to inline functions with a size of 100 or less.totalsize:nโ Stop inlining when this function reaches a size ofn. The default is to stop inlining when a size of 8000 has been reached.
-Mcache_alignโ Align unconstrained data objects of size greater than or equal to 16 bytes on cache-line boundaries. An unconstrained object is a variable or array that is not a member of an aggregate structure or common block, is not allocatable, and is not an automatic array. Alignment slay ๐-Mconcur[=option[,option,...]]โ okay so heads up bestie: this option has been deprecated and is gonna get removed in a future release ๐ญ. It tells the compiler to enable auto-concurrentization of loops (yes that's the actual word, and yes it slays). This also sets the optimization level to a minimum of2; peep-O. If-Mconcuris specified, multiple processors will be used to execute loops that the compiler decides are parallelizable. Important link-time tea: when linking, the-Mconcurswitch must be specified or you'll get unresolved references, which is so not the vibe. TheOMP_NUM_THREADSorNCPUSenvironment variables control how many processors will be used to execute the parallelized loops. The options can be one or more of the following:allcoresโ use all available cores when the environment variablesOMP_NUM_THREADSandNCPUSare not set. This must be specified at link time, no cap ๐ซถ.altcode:n/noaltcodeโ generate (or don't generate) alternate scalar code for parallelized loops. The parallelizer generates scalar code to be executed whenever the loop count is less than or equal to n. Ifnoaltcodeis specified, the parallelized version of the loop is always executed regardless of the loop count.altreduction[:n]โ generate alternate scalar code for parallelized loops containing a reduction. If a parallelized loop contains a reduction, the parallelizer generates scalar code to be executed whenever the loop count is less than or equal to n.assoc(default) /noassocโ enable (or disable) parallelization of loops with reductions.cncall/nocncall(default) โ assume (or don't assume) that loops containing calls are safe to parallelize. Also, no minimum loop count threshold must be satisfied before parallelization will occur, and last values of scalars are assumed to be safe.dist:blockโ parallelize with block distribution. Contiguous blocks of iterations of a parallelizable loop are assigned to the available processors. Iconic, honestly.dist:cyclicโ parallelize with cyclic distribution. The outermost parallelizable loop in any loop nest is parallelized. If a parallelized loop is innermost, its iterations are allocated to processors cyclically. For example, if there are 3 processors executing a loop, processor 0 performs iterations 0, 3, 6, etc; processor 1 performs iterations 1, 4, 7, etc; and processor 2 performs iterations 2, 5, 8, etc. Look at that rotation, we love to see it โจ.innermost/noinnermost(default) โ enable (or disable) parallelization of innermost loops.levels:nโ parallelize loops nested at most n levels deep; the default is3.
-Mdepchk(default) /-Mnodepchkโ assume (or don't assume) that potential data dependencies exist. Careful though:-Mnodepchkmay result in incorrect code ๐ฌ โ the-Msafeptrswitch provides a less dangerous way to accomplish the same thing. Use the safe route, bestie.-Mdse/-Mnodse(default) โ enable (or disable) the dead store elimination optimization. Clean up those useless writes, periodt.-Mextract=[option[,option,...]]โ run the subprogram extraction phase to prepare for inlining. The=lib:filenameoption must be used with this switch to name an extract library. See-Minlinefor more details on inlining. The options are:subprogram[,subprogram]โ a non-numeric option not containing a period is assumed to be the name of a subprogram to be extracted.name:subprogram[,subprogram]โ specifies the name of a subprogram or subprograms to be extracted.lib:directoryโ specifies the name of a directory to contain the extracted subprograms; this directory will be created if it does not exist. It's giving "make yourself at home" ๐.[size:]numberโ a numeric option is assumed to be a size. Functions containing number or less statements are extracted. If both number and function are specified, then functions matching the given name(s) or meeting the size requirements are extracted.
-Mfma/-Mnofma(default) โ generate (or don't generate) fused multiply-add (FMA) instructions on the CPU and GPU for targets that support it. FMA instructions are generally faster than separate multiply-add instructions, and can generate higher precision results since the multiply result is not rounded before the addition. But bestie, listen: delaying rounding until after addition, however, may cause results to differ from those obtained with the unfused multiply-add instructions. FMA instructions are enabled at optimization levels higher than-O1.-Mframe/-Mnoframe(default) โ set up (or don't set up) a true stack frame pointer for functions;-Mnoframeallows slightly more efficient operation when a stack frame is not needed, but some options override-Mnoframe. Nothing personal, it's just a stack thing ๐ .-Minfo[=option[,option,...]]/-Mnoinfo(default) โ emit useful information tostderr. The options are:allโ includes optionsaccel,inline,ipa,loop,lre,mp,opt,par,stdpar,vect. The whole squad, assembled ๐.accelโ emit information about accelerator region targeting.ftnโ emit Fortran-specific information.inlineโ emit information about functions extracted and inlined.intensityโ this option has been deprecated and will be removed in a future version ๐ญ. Emit compute intensity information about loops.ipaโ emit information about the optimizations enabled by interprocedural analysis (IPA).loop/optโ emit information about loop optimizations. This includes information about vectorization and loop unrolling.lreโ emit information about loop-carried redundancy elimination.mpโ emit information about OpenMP parallel regions.parโ emit information about loop parallelization.pfoโ emit profile feedback information.time/statโ emit compilation statistics.stdparโ emit information about parallelization of C++ parallel algorithms and FortranDO CONCURRENTloops.vectโ emit information about automatic loop vectorization.
With no options, -Minfo is the same as -Minfo=accel,ipa,loop,lre,mp,opt,par,stdpar,vect.
-Minline[=option[,option,...]]โ pass options to the function inliner. The options are:lib:filename.extโ specify an inline library created by a previous-Mextractoption. Functions from the specified library are inlined. If no library is specified, functions are extracted from a temporary library created during an extract prepass.except:funcโ specifies which functions should not be inlined. Respectfully, stay out โ.[name:]functionโ a non-numeric option is assumed to be a function name. Ifname:is specified, what follows is always the name of a function.pragmaโ Fortran Only: inline only those procedures that have a!NVF$ INLINEpragma on the source line immediately before the procedure'sSUBROUTINEorFUNCTIONstatement.[maxsize:]numberโ a numeric option is assumed to be a size. Functions of size number or less are inlined. If both number and function are specified, then functions matching the given name(s) or meeting the size requirements are inlined.reshapeโ for Fortran, the default is to not inline subprograms with array arguments if the array shape does not match the shape in the caller. This overrides the default.smallsize:numberโ always inline functions of size smaller than number regardless of other size limits.totalsize:numberโ stop inlining in a function when the function's total inlined size reaches the number specified. Gotta cap it somewhere ๐ซถ.
-Minstrument [=option]โ generate additional code to enable function-level instrumentation. This option implies-Mframe. The option is:functions(default) โ the one and only, lowkey main character energy ๐.
-Mipa [=option[,option,...]]/-Mnoipa(default) โ enable and specify options for InterProcedural Analysis (IPA). Note: IPA is not compatible with parallel make environments (e.g.,pmake) ๐. IPA also sets the optimization level to a minimum of2; see-O. If no option list is specified, then it is equivalent to-Mipa=const. The options are:align/noalign(default) โ enable (or disable) recognition when pointer targets are all cache-line aligned, allowing better SSE code generation.arg/noarg(default) โ remove (or don't remove) arguments replaced by-Mipa=ptr,const.-Mipa=noargimplies-Mipa=nolocalarg.const(default) /noconstโ enable (or disable) propagation of constants across procedure calls.f90ptr/nof90ptr(default) โ enable (or disable) Fortran 90 pointer disambiguation across procedure calls.fastโ chooses generally optimal-Mipaflags for the target platform; usenvc++ -Mipa -helpto see the equivalent options.forceโ force all objects to recompile regardless of whether IPA information has changed. No skipping, everybody re-runs it ๐โโ๏ธ.globals/noglobals(default) โ analyze (or don't analyze) which globals are modified by procedure calls.inline:nโ determine additional functions to inline, allowing up to n levels of inlining. Additional suboptions are:except:procโ disables inlining of procedure proc.nopfoโ ignore any profile frequency information from-Mpfowhen choosing which functions to inline.
reshape,noreshape(default) โ turns Fortran inlining with mismatched array shapes on and off. Default is off, bestie.ipofileโ saves IPA info in a.ipofile instead of the default vibe, which is appending that info straight to the object file.jobs:nโ uses up tonjobs in parallel to reoptimize object files. parallel slay โจkeepobj(default),nokeepobjโ keeps or doesn't keep the optimized object files, using file name mangling, so later application builds can skip some recompiling. default is keep.libc,nolibc(default) โ optimize calls to certain standard C library routines, or don't. default is don't.libinline,nolibinline(default) โ allow or don't allow inlining from routines in libraries;-Mipa=libinlineimplies-Mipa=inline.libopt,nolibopt(default) โ allow or don't allow recompiling and reoptimizing routines from libraries with IPA information.localarg,nolocalarg(default) โ enables or disables the feature that externalizes local variables so arguments can be replaced by-Mipa=ptr;-Mipa=localargimplies-Mipa=arg.main:funcโ specifies a function to serve as a global entry point; it may appear multiple times; this disables linking.ptr,noptr(default) โ enable or disable pointer disambiguation across procedure calls.pure,nopure(default) โ detect or don't detect pure functions.quietโ don't print out messages about which files are recompiled at link time. peace and quiet, iconic.reaggregation,noreaggregation(default) โ enable or disable global struct reaggregation. this can change the order of struct members, or split structs into multiple structs, to improve memory locality and cache utilization.requiredโ returns an error condition if IPA is inhibited for any reason, instead of the default behavior of linking without IPA optimization.safe:[function|library]โ declares that the named function, or all functions in the named library, are safe; a safe procedure does not call back into the known procedures and does not change any known global variables. without-Mipa=safe, any unknown procedures will cause IPA to fail.safeall,nosafeall(default) โ declares that all unknown functions are safe or not safe; see-Mipa=safe.shape,noshape(default) โ perform or don't perform Fortran 90 shape propagation.summaryโ only collects IPA summary information when compiling; this prevents IPA optimization of this file, but allows optimization for other files linked with this file.vestigial,novestigial(default) โ remove or don't remove functions that are not called.
-Mlre[=assoc|noassoc],-Mnolreโ enable or disable loop-carried redundancy elimination. theassocoption allows expression reassociation, andnoassocdisallows expression reassociation.-Mmovnt,-Mnomovntโ force or disable generation of nontemporal moves.-Mmovntused with-fastssecan sometimes be faster than-fastssealone. by default nontemporal moves are generated for loops with large loop counts.-Mneginfo=option[,option...]โ tells the compiler to produce info on why certain optimizations are not performed. lowkey use the-Minfoflag instead.-Mnoopenmpโ when-mpis present, ignore the OpenMP pragmas.-Mnosgimpโ when-mpis present, ignore the SGI parallelization pragmas.-Mnovintrโ do not generate vector intrinsic calls.-Mpfi[=option]โ generates profile feedback instrumentation; this includes extra code to collect run-time statistics to be used in a subsequent compile;-Mpfimust also appear when the program is linked. when the program is run, a profile feedback filepgfi.outwill be generated; see-Mpfo. the allowed options are:indirect,noindirect(default) โ enable or disable collection of indirect function call targets, which can be used for indirect function call inlining.
-Mpfo[=option[,option,...]]โ enables profile feedback optimizations; there must be a profile feedback filepgfi.outin the current directory, which contains the result of an execution of the program compiled with-Mpfi. the options are:indirect,noindirect(default) โ enable or disable indirect function call inlining; this requires apgfi.outfile generated from a binary built with-Mpfi=indirect.layout(default),nolayoutโ enable or disable basic block layout to take advantage of instruction cache locality by keeping hot paths close together.dir=directoryโ specify the directory containing thepgfi.outprofile feedback information file; the default is the current directory.
-Mpre,-Mnopre(default) โ enable or disable the partial redundancy elimination optimization.-Mprefetch[=option:n],-Mnoprefetchโ add or don't add prefetch instructions for those processors that support them (Pentium 4, Opteron);-Mprefetchis default on Opteron;-Mnoprefetchis default on other processors. the options are:distance:dโ set the fetch-ahead distance for prefetch instructions todcache lines.n:nโ set the maximum number of prefetch instructions to generate in a loop ton.ntaโ use theprefetchntainstruction.plainโ use theprefetchinstruction.t0โ use theprefetcht0instruction.wโ allow the AMD-specificprefetchwinstruction.
-Mprof[=option[,option,...]]โ set performance profiling options. using these options will cause the resulting executable to create a performance profile that can be viewed and analyzed with the PGPROF performance profiler. in the descriptions below, old-style profiling implies compiler-generated source instrumentation. MPICH-style profiling implies the use of instrumented wrappers for MPI library routines. the-Mprofoptions are:dwarfโ generate limited DWARF symbol information sufficient for most performance profilers.funcโ perform old-style function level profiling.hwctsโ generate a profile using event-based sampling of hardware counters via the PAPI interface (PAPI must be installed).linesโ perform old-style line level profiling.timeโ generate a profile using time-based instruction-level statistical sampling. this is equivalent to-pg, except that the profile is saved in a file namedpgprof.outinstead ofgmon.out.
on Linux systems that have OProfile installed, PGPROF supports collection of performance data without recompilation. use of -Mprof=dwarf is useful for this mode of profiling. ๐ง
-Mpropcond(default),-Mnopropcondโ enable or disable propagation of constant values derived from conditional branches with equality tests.-Mquadโ align large objects on quad-word boundaries.-Msafe_lastvalโ in the case where a scalar is used after a loop, but is not defined on every iteration of the loop, the compiler does not by default parallelize the loop. however, this option tells the compiler it is safe to parallelize the loop.-Msafeptr[=option[,option,...]],-Mnosafeptr(default) โ override or don't override data dependence between C pointers and between pointers and variables or arrays. this option must be used with care since the potential exists for code to be generated that will result in unexpected or incorrect results as is defined by ANSI C. however, when used properly, this option has the potential to greatly enhance the performance of code, especially floating-point oriented loops. combinations of the options may be used and interact appropriately.
bestie, be careful with this one: it can absolutely change what your code means if you get it wrong. the original warning is real, not a vibe check. ๐
allโ all pointers are assumed not to overlap or conflict with other data objects;-Msafeptrwith no options implies-Msafeptr=all.arg|dummyโ C dummy arguments (pointers and arrays) are treated with the same copyin/copyout semantics as Fortran dummy arguments.auto|localโ C local or auto variables (pointers and arrays) are assumed not to overlap or conflict with other data objects and are independent.globalโ C global or extern variables (pointers and arrays) are assumed not to overlap or conflict with other data objects and are independent.staticโ C static variables (pointers and arrays) are assumed not to overlap or conflict with other data objects and are independent.
-Msigned-zeroes(default),-Mno-signed-zerosโ toggles whether to honor (-Msigned-zeros) or ignore (-Mno-signed-zeros) issues associated with a signed0.0during optimization.-Mstride0,-Mnostride0(default) โ generate or don't generate alternate code for a loop that contains an induction variable whose increment may be zero.-Munroll[=option[,option...]],-Mnounroll(default) โ invoke or don't invoke the loop unroller. this also sets the optimization level to a minimum of 2; see-O. the option is one of the following:c:mโ instructs the compiler to completely unroll loops with a constant loop count less than or equal tom, a supplied constant. if this value is not supplied, themcount is set to1. ifmis set to1, a compiler heuristic determines the maximum loop count at which such loops will be completely unrolled.
n:uโ tells the compiler to unroll a single-block looputimes ๐ซ โ specifically a loop that is not completely unrolled, or one that has a non-constant loop count. If you don't hand it au, the unroller just computes the number of times a candidate loop is unrolled. Math girl summer ๐งฎm:uโ same energy, but for a multi-block loop: unroll itutimes when it's not completely unrolled or has a non-constant loop count. Again, nousupplied means the unroller computes the number of times a candidate loop is unrolled. Let her cook ๐ฉโ๐ณ
-Mnounrollโ instructs the compiler not to unroll loops. Periodt. Loops stay exactly as they are ๐-Munsafe_par_align,-Mnounsafe_par_alignโ use (or don't use) aligned moves for array loads in parallelized loops, as long as the first element of the array is aligned. This is only effective with-Mvect=simd. And bestie, it's called unsafe for a reason ๐ญ โ there are situations where the array elements allocated to some processors are not aligned.-Mvect [=option[,option,...]],-Mnovect(default) โ passes options to the internal vectorizer. This also sets the optimization level to a minimum of 2, the equivalent of-O; for more info see optimization levels under-O. If you don't specify an option list, then these vector optimizations get used:assoc,cachesize:c,simd:256, wherecis the actual cache size of the machine โจ The-Mvectoptions are:altcode(default),noaltcodeโ enable (disable) alternate code generation for vector loops, depending on such characteristics as array alignments and loop counts.fuse,nofuse(default) โ enable (disable) loop fusion to combine adjacent loops into a single loop ๐ซถprefetchโ use prefetch instructions in loops where profitable.simd[:{128|256|512}](default),nosimdโ use vector SIMD instructions (AVX, AVX2, AVX512) instructions. The argument may be used to limit usage to 128-bit SIMD instructions. Specifying 512-bit SIMD instructions is only possible for target processors that support AVX512. No cap, 512-bit is the whole personality ๐ฅuniform,nouniform(default) โ perform the same optimizations in the vectorized and residual loops. Heads up though: this may affect the performance of the residual loop ๐
These options are also supported, but are not recommended for use in new development, except by experienced users, and may be phased out in future releases ๐ฑ (iykyk, legacy vibes):
assoc(default),noassocโ enable (disable) certain associativity conversions that can change the results of a computation due to floating-point roundoff error differences. A typical optimization is to change the order of additions, which is mathematically correct, but can be computationally different, due to roundoff error. Likeโฆ the vibes are the same but the digits are not ๐ญcachesize:number(default=automatic) โ instructs the vectorizer, when performing cache tiling optimizations, to assume a cache size ofnumber.gather(default),nogatherโ enable (disable) vectorization of loops with indirect array references.idiom(default),noidiomโ enable idiom recognition; alternate form of-Midiom.levels:nโ set maximum nest level of loops to optimize.partialโ enable partial loop vectorization via innermost loop distribution.short,noshort(default) โ enable (disable) recognition of short vector operations that arise from scalar code outside of loops or within the body of loops.sizelimit[:number],nosizelimit(default) โ limit the size of loops that are vectorized; the default is to attempt to vectorize all loops. Ambition ๐tile,notile(default) โ enable (disable) loop tiling to optimize for cache locality.
-Mnovect disables the vectorizer, and is the default at -O0 and -O1.
-Mzerotrip(default),-Mnozerotripโ include (don't include) a zero-trip test for loops. Only use-Mnozerotripwhen all loops are known to execute at least once โ ๏ธ like, known known.-mp[=option]โ enable OpenMP pragmas and directives to explicitly parallelize regions of code for execution by accelerator devices or multi-processor system ๐ The options allowed are:gpuโ compile OpenMP directives for parallel execution on the GPU.multicore(default) โ compile OpenMP directives for parallel execution on the CPU.align,noalign(default) โ modify (don't modify) default loop iteration scheduling to align iterations with array references. The default is to use simple static scheduling.autopar(default),noautoparโ enable loop autoparallelization ofomp loopconstructs.omptโ link against OMPT-enabled OpenMP library.
-nompโ ignore OpenMP directives and do not link against OpenMP runtime libraries. Not today ๐-O[level]โ set the optimization level. If-Ois not specified, then the default level is 1 if-gis not specified, and 0 if-gis specified. If a number is not supplied with-Othen the optimization level is set to 2. The optimization levels and their meanings are as follows:-O0โ sets the optimization level to 0. A basic block is generated for each statement. No scheduling is done between statements. No global optimizations are performed. Bare minimum era ๐-O1โ sets the optimization level to 1. Scheduling within extended basic blocks is performed. No global optimizations are performed.-Oโ sets the optimization level to 2, with no SIMD vectorization enabled. All level 1 optimizations are performed. In addition, traditional scalar optimizations such as induction recognition and loop invariant motion are performed by the global optimizer.-O2โ all-Ooptimizations are performed. In addition, more advanced optimizations such as SIMD code generation, cache alignment and partial redundancy elimination are enabled. Obsessed with her actually ๐-O3โ all-O1and-O2optimizations are performed. In addition, this level enables more aggressive code hoisting and scalar replacement optimizations that may or may not be profitable. She's trying her best, okay ๐-Ofastโ enables-O3,-Mfprelaxed,-Mstack_arrays,-Mno-nan,Mno-inf, and-fcx-limited-range. Note-Mstack_arrayis disabled when both command line options-Ofastand-stdparare enabled.-O4โ all-O1,-O2, and-O3optimizations are performed. In addition, hoisting of guarded invariant floating-point expressions is enabled. Final boss energy ๐
-pgโ enable gprof-style sample-based profiling; implies-Mframe.
๐ Debugging Options ๐
-gโ generate symbolic debug information. This also sets the optimization level to zero, unless a-Oswitch is present on the command line. Symbolic debugging may give confusing results if an optimization level other than zero is selected. And ngl, using-O0the generated code will be slower than code generated at other optimization levels โ that's the trade-off, bestie ๐ข-goptโ generate symbolic debug information, without affecting optimizations. This may give confusing results when debugging with optimizations; it is intended for use with other tools that use the debug information ๐ง-Mbounds,-Mnobounds(default) โ add (don't add) array bounds checking. Bounds checking is not applied to a subscripting pointer. Just so we're clear ๐ซถ-Mchkstkโ check the stack for available space upon entry to and before the start of a parallel region. Useful when many private variables are declared. Stack said "let me check my schedule" ๐-Mcoffโ generate a COFF formatted object.-Mdwarf2โ generate DWARF2 debug information with-g.-Mdwarf3โ generate DWARF3 debug information with-g.-Melfโ generate an ELF formatted object.-Mnodwarfโ don't add the default dwarf information. Not me gatekeeping the debug info ๐-traceback,-notraceback(default) โ add debug information for runtime traceback.-nvmallocโ use a custom host memory allocator.
โจ Preprocessor Options โจ
Bestie, this is where you tell the compiler how to handle all the preprocessor stuff before the main character compilation era begins. Letโs go ๐
-Cโ preserve comments in preprocessed C source files. Your comments stay alive, iconic.-Dname[=def]โ definenametodefin the preprocessor. Ifdefis missing, itโs assumed to be empty. If the=sign is missing, thennameis defined to be the string1. Cute, simple, no cap.-define_macroname[=def]โ the same as-Dname[=def]. Definenametodefin the preprocessor. Ifdefis missing, itโs assumed to be empty.--dependenciesโ generate a list of make dependences and print them to stdout.--dependencies_quoted_onlyโ generate a list of make dependences for quoted include files only, and print them to standard output.--dependencies_to_filefilenameโ generate a list of make dependences and print them to the filefilename.--dependencies_to_file_quoted_onlyfilenameโ generate a list of make dependences for quoted include files only, and print them to the filefilename.--dependencies_to_stdoutโ generate a list of make dependences and print them to standard output.--dependencies_to_stdout_quoted_onlyโ generate a list of make dependences for quoted include files only, and print them to standard output.-Eโ preprocess each.cfile and send the result to standard output. No compilation, assembly, or linking is performed. Itโs giving โjust the preprocessor, maโamโ ๐-Idirectoryโ adddirectoryto the compilerโs search path for include files. For include files surrounded by< >, each-Idirectory is searched followed by the standard area. For include files surrounded by" ", the directory containing the file containing the#includedirective is searched, followed by the-Idirectories, followed by the standard area.-include fileโ include the source code of the indicated file at the beginning of the compilation.--include_directorydirectoryโ adddirectoryto the compilerโs search path for include files. For include files surrounded by< >, each--include_directorydirectory is searched followed by the standard area. For include files surrounded by" ", the directory containing the file containing the#includedirective is searched, followed by the--include_directorydirectories, followed by the standard area.-idirafter directoryโ add a directory to the end of the include file search path, after the standard include directories, and mark it as a system include directory.-isystem directoryโ same as-I, but mark the directory as a system directory.-iquote directoryโ add a directory to the beginning of the include file search path, and use it only when processing includes with quotes.-Mโ generate a list of make dependences and print them to stdout. Also:-MQand-MTare synonyms. Yes, thatโs what it says ๐ซถ-Mcpp=[[no]comment|m|md|mm|mmd|mq:target|mt:target|suffix:suff]โ only runs the preprocessor on the input file(s); by default, the output is written tofile.i, unless renamed with the-oswitch. The options are:comment nocommentโ keep (donโt keep) C-style comments in the preprocessed output.include:fileโ include this file before processing the source file.mโ print makefile dependencies to stdout, a la-M.mdโ print makefile dependencies tofile.d, a la-MD.mmโ print makefile dependencies to stdout, ignoring system includes (includes with angle braces), a la-MM.mmdโ print makefile dependencies tofile.d, ignoring system includes (includes with angle braces), a la-MMD.mq:'target'โ print makefile dependencies to stdout, a la-MQ.mt:targetโ print makefile dependencies to stdout, a la-MT.lineโ include line numbers into the preprocessed output.suffix:suffโ when generating makefile dependencies, name the dependent filefile.suff; the default is to name the dependent filefile.o.
-MDโ generate a list of make dependences and print them to the filefile.d, wherefileis the root name of the file under compilation.-MMโ generate a list of make dependences and print them to stdout; ignore system includes.-MMD[filename]โ generate a list of make dependences and print them to the specified file, if given, or to filefile.d, wherefileis the root name of the file under compilation. Ignore system includes.-MQโ generate a list of make dependences and print them to stdout.-MTโ generate a list of make dependences and print them to stdout.-Mnostddefโ do not predefine any macros to the preprocessor.-Mnostdincโ do not search in the standard location for include files when those files are not found elsewhere.-Mpreprocessโ run the preprocessor on assembler source files.-Nโ preprocess each file and leave the output in a file namedfile.ifor each file namedfile.c.--no_line_commandsโ preprocess each file and leave the output in a file namedfile.ifor each file namedfile.cc; remove comments and leave out line control information.-Pโ stop after preprocessing.--preprocessโ preprocess each file and leave the output in a file namedfile.ifor each file namedfile.cc; remove comments and add line control information.-Unameโ remove the definition of thenamemacro in the preprocessor.-undefine_macronameโ undefine a macro; see-U.-YI,directoryโ change the standard include directory todirectory.-Yp,directoryโ look indirectoryfor the preprocessor executable.
๐ ๏ธ Assembler Options ๐ ๏ธ
Tiny section, but still important, bestie ๐
-Wa,option[,option...]โ pass each comma-delimited option to the assembler.-Ya,directoryโ look indirectoryfor the assembler executable.
๐ Linker Options ๐
okay bestie, linker era is here ๐ this is where we tell the linker what to do, and every one of these flags is lowkey important โ so let's get into it, no cap.
-acclibsโ link-time option to add the accelerator libraries to the link line.--as-needed,--no-as-neededโ passed to the linker.--as-neededinstructs the linker to only set theDT_NEEDEDflag for subsequent shared libraries, requiring those libraries at run time, if they are used to satisfy references.--no-as-neededrestores the default behavior.-Bdynamicโ passed to the linker to specify dynamic binding.-Bstaticโ same as-static; please refer to-staticfor details.-Bstatic-nvidiaโ same as-static-nvidia; please refer to-static-nvidiafor details.-Bsymbolicโ passed to linker; specify symbolic binding.-cudaforlibsโ link-time option to add the CUDA Fortran runtime libraries, allowing mixed-language programming. Implies-fortranlibs.-cudalib[=libname[,libname...]]โ add CUDA-optimized libraries to the link line. When no option is specified the compiler will link all necessary CUDA-optimized libraries.-cudalibwill use the version of the library appropriate to the CUDA version being used. The libraries recognized are:cublascublasmpcufftcufftmpcufftwcurandcusolvercusolvermpcusparsecutensorncclnvblasnvshmemnvtx3
-cudalibsโ this one has been deprecated, bestie; please refer to-cudalib. Link-time option to add the CUDA runtime API library.-fortranlibsโ link-time option to add the Fortran runtime libraries, allowing mixed-language programming.-g77libsโ link-time option which allows object files generated by GNUg77(orgcc) to be linked in tonvc++main programs.-Ldirectoryโ passed to the linker; adddirectoryto the list of directories in which the linker searches for libraries.-llibraryโ passed to the linker; load the libraryliblibrary.afrom the standard library directory. See also the-Loption.-mโ cause the linker to display a link map.-Mcudalib[=libname[,libname...]]โ deprecated, please refer to-cudalib. Add CUDA-optimized libraries to the link line. When no option is specified the compiler will link all necessary CUDA-optimized libraries.-Meh_frame,-Mnoeh_frameโ add (don't add) arguments to the link line to preserve the stack frame information for zero-cost exception handling frames. The default is-Mnoeh_frameunless changed in a site or user rcfile.-Mnostartupโ do not link in the usual startup routine. This routine contains the entry point for the program.-Mnostdlibโ do not link in the standard libraries when linking a program.-Mrpath(default),-Mnorpathโ the default is to add-rpathto the link line giving the directories containing the required runtime shared objects. Use-Mnorpathto instruct the driver not to add any-rpathswitches to the link line.-Mmklโ add Intel's Math Kernel libraries to the link line. Requires that the environment variableMKLROOTbe set to the path to the local MKL installation (the part of the path that precedeslib/<arch>).-pthreadโ adds support for multithreading with thepthreadslibrary. This option sets flags for both the preprocessor and linker.-Rdirectoryโ passed to the linker; instructs the linker to hard-code the pathnamedirectoryinto the search path for generated shared object files. Note that there cannot be a space betweenRanddirectory.-rโ passed to the linker; generate a re-linkable object file.-rpath directoryโ passed to the linker to add thedirectoryto the runtime shared library search path.-sโ passed to the linker; strip symbol table information.-sharedโ passed to the linker. Instructs the linker to generate a shared object file (dynamically linked library). Implies-fpic.-soname nameโ passed to the linker. When creating a shared object, instructs the linker to set the internalDT_SONAMEfield to the specifiedname.-staticโ passed to the linker to specify static binding.-static-nvidiaโ statically link in the NVIDIA runtime libraries, while using dynamic linking for the system libraries; implies-Mnorpath.-unameโ passed to the linker; generate undefined reference.--whole-archive,--no-whole-archiveโ passed to the linker. Instructs the linker to include all objects in subsequent archive files.--no-whole-archiverestores the default behavior.-Wl,option[,option]...โ pass each comma-delimited option to the linker.-Xlinker option[,option]...โ pass each comma-delimited option to the linker.-YC,directoryโ look indirectoryfor the standard compiler library files.-Yl,directoryโ look indirectoryfor the linker.-YL,directoryโ change the standard library directory todirectory.-YP,directoryโ add a standard library directory.-YS,directoryโ look indirectoryfor the standard system startup object files.-YU,directoryโ passed to the linker; change library search path.
โจ Language Options โจ
okay now we're in language mode ๐ฆ these options control how the compiler reads your actual C++ vibes โ tokens, templates, comments, standards, all of it ๐
-$โ accept dollar signs in identifiers.-Aโ same as--strict. Enable strict ANSI/ISO mode, which issues error messages when non-standard features are used, and disables features that conflict with ANSI/ISO C or C++.-aโ enable ANSI/ISO mode; issue warning messages when non-standard features are used.--alternative_tokens,--no_alternative_tokens(default) โ enable (disable) recognition of alternative tokens; this controls recognition of digraph tokens and of the operator (e.g.,and) keywords.--anachronisms,--no_anachronisms(default) โ allow (disallow) C++ anachronisms.--array_new_and_delete,--no_array_new_and_deleteโ enable array new and delete operations.-asmsuffix=suffixโ define that a file with the givensuffixis an assembly language file.--auto_instantiation(default),--no_auto_instantiationโ enable (disable) automatic instantiation of templates.-Bโ allow C++-style comments in source code; these begin with the characters//and continue to the end of the current line. Such comments are stripped unless you specify the-Coption.-cuda[=option[,option...]โ enable CUDA Fortran; add CUDA include paths, and link with the CUDA runtime libraries.-cudais required on the link line. If-cudais used in compilation, it must also be used for linking. For target specific options, please refer to-gpu. For linking additional CUDA libraries (e.g. math libraries), please refer to-cudalib. Use the following sub-options to tailor the compilation of CUDA Fortran accelerator regions:charstringโ enable limited support for character strings in GPU kernels.madconstโ put Module Array Descriptors in CUDA Constant Memory.
--bool(default),--no_boolโ enable (disable) recognition of thebooldatatype.--brief_diagnostics,--no_brief_diagnostics(default) โ enable (disable) brief diagnostic mode; when enabled, the original source line is not displayed, and the error message is not wrapped even when too long to fit on a single line.--builtin(default),--no_builtinโ compile (don't compile) with builtin math subroutine support, certain math library routines inlined.--commentsโ preserve comments.--compress_names,--no_compress_names(default) โ compress C++ mangled names to fit into1024characters. All C++ user code must be compiled with the same setting of--compress_namesor--no_compress_names.-cppsuffix=suffixโ define that a file with the givensuffixis a C++ source file.--create_pchfilenameโ create a precompiled header file with the specified name, if applicable. This switch conflicts with--pch(automatic PCH mode).--c++standardโ specify the C++ language standard to use when compiling. Possible values are:03โ the 1998 ISO C++ standard plus the 2003 technical corrigendum and some additional defect reports. This is the default if no--c++option is specified.11โ the 2011 ISO C++ standard plus amendments.14โ the 2014 ISO C++ standard plus amendments.17โ the 2017 ISO C++ standard plus amendments.20โ the next revision of the ISO C++ standard. Support is experimental and will change in future releases.
--distinct_template_signatures,--no_distinct_template_signatures(default) โ enable (disable) distinct name mangling for templates and nontemplates.--dollarโ accept dollar signs in identifiers.-enumberโ set the C++ front end error limit to the specifiednumber. The C++ compiler will abandon compilation after the specified number of errors.--early_tiebreakerโ select the way that tie-breakers (e.g., cv-qualifier differences) apply in overload resolution. In "early" tie-breaker processing, the tie-breakers are considered at the same time as other measures of the goodness of the match of an argument value and the corresponding parameter type (this is the standard approach). This is the default for Linux; see--late_tiebreaker.--enum_overloading,--no_enum_overloadingโ enable (disable) support for using operator functions to overload builtin operations on enum-typed operands. The default is--enum_overloading, except onWIN64.--error_limitnumberโ set the C++ front end error limit to the specifiednumber. The C++ compiler will abandon compilation after the specified number of errors. By default, the limit is100.--explicit(default),--no_explicitโ enable (disable) support for theexplicitkeyword.-fix_so_initโ tells the prelinker to gather up.initsections into an assembly file ๐--for_init_diff_warning(default) /--no_for_init_diff_warningโ turn on (or off) a warning that fires when a program compiled under the new for-init scoping rules would behave differently under the old rules. The compiler is being a lil snitch and honestly? good for it ๐ซถ--force_vtblโ force the definition of virtual function tables in cases where the heuristic the front end uses to decide on defining virtual function tables gives it literally no guidance bestie; see--suppress_vtblโจ-fno-builtinโ same option as-Mno-builtin. Go read-Mno-builtinfor the details, iykyk ๐--gnu_extensionsโ allow gnu extensions likeinclude_next, which you need to compile Linux system header files. This is the default on Linux systems ๐ง--guiding_decls,--no_guiding_decls(default) โ enable guiding declarations of template functions โจ--ieeenumโ IEEE floating-point support ๐--implicit_include(default),--no_implicit_includeโ enable (disable) implicit inclusion of source files as a method of finding definitions of template entities to be instantiated ๐ธ--implicit_typename(default),--no_implicit_typenameโ enable (disable) implicit determination, from context, of whether a template parameter dependent name is a type or a nontype ๐ฅ--late_tiebreakerโ picks how tie-breakers (think: cv-qualifier differences) apply in overload resolution. In "late" tiebreaker processing, tie-breakers get ignored during the initial comparison and only get considered if two functions are otherwise equally good on all arguments; then the tie-breakers can be used to choose one function over another. This is the default forWIN65; see--early_tiebreaker๐--listfilenameโ generate raw listing information in the file filename. This info is likely gonna be used to generate a formatted listing. The raw listing file contains raw source lines, information on transitions into and out of include files, and diagnostics generated by the front end ๐--llalign,--no_llalignโ align (don't align) long longs in structures on 8-byte boundaries; same as-M[no]llalign.--llalignis the default for 64-bit systems โญ--long_lifetime_tempsโ select long lifetime for temporaries, meaning to the earliest of end of scope, end of switch clause, or the next label; this one's used by cfront. See--short_lifetime_temps๐ฐ๏ธ--long_preserving_rules,--no_long_preserving_rules(default) โ enable (disable) the K&R usual arithmetic conversion rules with respect to long ๐-Mbuiltin(default),-Mnobuiltinโ compile (don't compile) with math subroutine builtin support, which causes selected math library routines to be inlined ๐งฎ-Mdalign(default),-Mnodalignโ align (don't align) doubles in structures on 8-byte boundaries. Heads up:-Mnodalignmay lead to data alignment exceptions ๐ญ-Mdollar=charโ set the character used to replace dollar signs in names to be char. Default is an underscore (_) ๐ฒ-Mfconโ treat non-suffixed floating-point constants asfloat, rather thandouble. This may improve the performance of single-precision code ๐-Mllalign(default),-Mnollalignโ align (don't align) long longs orINTEGER*8in structures or common blocks on 8-byte boundaries.-Mllalignis the default โจ-Mlibsuffix=suffixโ define that a file with the given suffix is an object library file ๐-Mobjsuffix=suffixโ define that a file with the given suffix is a binary object file ๐ฆ-Mschar(default) โ specify that thechartype is signed by default; see-Muchar๐-Msignextend(default),-Mnosignextendโ sign extend (don't sign extend) when a narrowing conversion overflows. Example time: when-Msignextendis in effect and an integer containing the value65535is converted to ashort, the value of theshortwill be-1. ANSI C specifies that the result of such conversions are undefined ๐-Msingle,-Mnosingle(default) โ suppress (don't suppress) the ANSI-specified conversion offloattodoublewhen passing arguments to a function with no prototype in scope.-Msinglemay result in faster code when single precision is used a lot, but it is non-ANSI compliant ๐-Mucharโ specify that thechartype is unsigned by default; see-Mschar๐--namespaces,--no_namespacesโ enable (disable) support for namespaces ๐ท๏ธ--new_for_initโ controls the scope of a declaration in a for-init-statement; the new standard-conforming rules in effect wrap the entireforstatement in its own implicitly generated scope. This is the default except onWIN64; see--old_for_init๐--no_exceptionsโ disable exception handling support. Throw expressions andtry/catchstatements will result in compilation errors. Exception specifications will be ignored โ ๏ธ--no_use_before_set_warningsโ suppress warning messages about variables used before being set ๐คซ--no_warningsโ suppress all warning messages. living that fearless life fr fr ๐--non_const_ref_anachronism,--no_non_const_ref_anachronismโ allow (don't allow) references to nonconst to bind to class rvalue ๐ธ--old_for_initโ controls the scope of a declaration in a for-init-statement; the old cfront-compatible scoping rules mean the declaration is in the scope to which theforstatement itself belongs. This is the default forWIN64; see--new_for_init๐น๏ธ--old_specializations,--no_old_specializationsโ enable (disable) old-style specialization declarations ๐๏ธ--pchโ automatically use and/or create a precompiled header file. Careful bestie: this command conflicts with--use_pchor--create_pch(manual PCH mode) ๐ฅ--pch_dirdirectoryโ name the directory in which to search for and/or create a precompiled header file. This option may be used with automatic PCH mode (--pch) or manual PCH mode (--create_pchor--use_pch) ๐--pch_memnumโ specify the memory to be used for PCG processing ๐ง--pch_messages,--no_pch_messagesโ enable (disable) the display of a message indicating that a precompiled header file was created or used in the current compilation ๐ฌ--pedanticโ don't suppress warnings from system include files. she's thorough ๐--preincludefilenameโ specify a file to be included at the beginning of compilation to set system-dependent macros, types, etc. โ filename energy ๐ง--prelink_objectsโ when used with the--one_instantiation_per_objectswitch, this creates template instantiations for a set of objects that are about to become a template library. This is required for template libraries that reference other template libraries ๐--remarksโ issue remarks, which are diagnostic messages even milder than warnings ๐ฃ--remove_unneeded_entitiesโ remove unnecessary IL entries ๐งน--restrict,--no_restrict(default) โ enable (disable) the use of therestrictkeyword ๐ง--rtti(default),--no_rttiโ enable (disable) support for RTTI (runtime type information) features:dynamic_cast,typeid๐ญ--short_lifetime_temps(default) โ select short lifetime for temporaries, meaning to the end of the full expression; this is the C++ standard. See--long_lifetime_tempsโณ-std=c++standardโ specify the C++ language standard to use when compiling. Same as--c++standard๐--suppress_vtbl(default) โ suppress definition of virtual function tables in cases where the heuristic used by the front end to decide on definition of virtual function tables provides no guidance. The virtual function table for a class is defined if the compilation contains a definition of the first non-inline non-pure virtual function of the class ๐ป--timingโ display C++ front end compilation times โฑ๏ธ--trace_includesโ list include files ๐--typename,--no_typenameโ enable (disable)typename๐ท๏ธ--use_pchfilenameโ use a precompiled header file of the specified name (filename) as part of the current compilation. This command conflicts with--pch๐ฅ--using_std(default),--no_using_stdโ enable (disable) implicit use of thestdnamespace when standard header files are included ๐--wrap_diagnostics,--no_wrap_diagnosticsโ enable (disable) diagnostic wrapping ๐-Xfilenameโ generate cross reference information and place output in the specified file (filename) ๐บ๏ธ
๐ฏ Target-specific Options ๐ฏ
-accโ enable OpenACC pragmas and directives to explicitly parallelize regions of code for execution by accelerator devices. See the-gpuflag to select options specific to NVIDIA GPUs. The options are:autopar(default),noautoparโ enable loop autoparallelization within parallel constructs โกgpu(default) โ compile OpenACC directives for parallel execution on the GPU ๐ฅ๏ธhostโ compile OpenACC directives for serial execution on the host CPU ๐legacyโ suppress warnings about deprecated PGI accelerator directives ๐ฐ๏ธmulticoreโ compile OpenACC directives for parallel execution on the host CPU ๐งตroutinepar,noroutinepar(default) โ infer parallelism level clause (gang,worker,vector) in implicit routine directives ๐ฎroutineseq,noroutineseq(default) โ compile every routine for the device, as if it had aroutine seqdirective ๐strictโ issue warnings when accelerator directives are encountered which do not adhere to the OpenACC standard ๐จsyncโ ignoreasyncclauses, and run every data transfer and kernel launch on the default sync queue โฒ๏ธ
verystrictโ aborts compilation with a fatal error if an accelerator directive shows up that does not adhere to the OpenACC standard. It is giving strict, and it means it ๐wait(default),nowaitโwaitis the default and waits for each compute kernel to finish;nowaitis the no-wait variant.-noaccโ disables OpenACC directives and does not link with OpenACC libraries. Simple, iconic, no extra drama.-cuda[=option[,option...]โ enables CUDA Fortran, adds CUDA include paths, and links with the CUDA runtime libraries.-cudais required on the link line. If-cudais used in compilation, it must also be used for linking. For target-specific options, go look at-gpu. For linking additional CUDA libraries (e.g. math libraries), go look at-cudalib. Use these sub-options to tailor compilation of CUDA Fortran accelerator regions:charstringโ enables limited support for character strings in GPU kernels.madconstโ puts Module Array Descriptors in CUDA Constant Memory.
-gpu=optionโ use these sub-options to tailor compilation of target accelerator regions. Yes bestie, there are a lot of them, and every single one is staying ๐ซถautocompareโ automatically compares CPU/GPU results. Accelerated code sections run in redundant mode, and data is compared whenever it would ordinarily be moved off the accelerator.ccXYโ generates code for a device with compute capability XY. Multiple compute capabilities can be specified, and one version is generated for each. By default, the compiler detects the compute capability for each installed GPU. Use-help -gputo see the valid compute capabilities for your installation.ccallโ generates code for all compute capabilities supported for this target and by the selected CUDA Toolkit version.ccnativeโ detects the visible GPUs on the system and generates codes for them. If no device is available, the default compute capability is used (cc50).ccall-majorโ compiles for all major supported compute capabilities (does not include PTX for the highest major virtual architecture; see-gpu=[no]rdcfor that support).cudaX.Yโ uses CUDA X.Y Toolkit compatibility, where installed.deepcopyโ enables Full Deepcopy support in OpenACC Fortran.fastmathโ enables the fast math library, which includes faster but lower-precision implementations of certain math and intrinsic functions.flushz,noflushz(default) โ enable (disable) flush-to-zero mode on the GPU.noflushzis the default.fma,nofmaโ generate (do not generate) fused multiply-add operations on the GPU. This is enabled by default at optimization level-O1.implicitsections,noimplicitsections(default) โ change (do not change) array element references in OpenACC and OpenMP data clause to array sections references.interceptdeallocations,nointerceptdeallocationsโ intercept (do not intercept)LIBCfunction calls (e.g.free) and call the corresponding CUDA memory deallocation version if the address is in pinned or managed memory, and the regular version otherwise.keepbinโ keeps the generated CUDA binary, with a.cubinsuffix.keepgpuโ keeps the generated CUDA GPU source files, with a.gpusuffix.keepltoirโ keeps the generated GPU LTOIR files, with a.ltoirsuffix. Works only when-gpu=ltois enabled.keepptxโ keeps the generated portable assembly files, with a.ptxsuffix.lineinfo,nolineinfo(default) โ generate debugging line information.nolineinfois the default.loadcache:[L1|L2]โ generate code to cache global memory loads in the L1 or L2 hardware cache.ltoโ enables Device Link Ltime Optimization (Device LTO).maxregcount:nโ sets the maximum number of registers to use in the generated GPU code.managedโ allocates any dynamically allocated data in CUDA Managed memory. This option must appear in both the compile and link lines. This option may not be used with-gpu=pinned.interceptโ interceptsLIBCfunction calls (e.g.free) and calls their managed memory version if the address is in managed memory, and the regular version otherwise.
nomanagedโ does not allocate any dynamically allocated data in CUDA Managed memory. Use with-stdparto prevent that flag's implicit use of-gpu=managedwhen CUDA Managed memory capability is detected.nounifiedโ does not compile for CUDA Unified memory capability. Use with-stdparto prevent that flag's implicit use of-gpu=unifiedwhen CUDA Unified memory capability is detected.pinnedโ allocates any dynamically allocated data in CUDA Pinned host memory. This option must appear in both the compile and link lines. This option may not be used with-gpu=managed|unified.interceptโ interceptsLIBCfunction calls (e.g.free) and calls their pinned memory version if the address is in pinned memory, and the regular version otherwise.
mem:[mode]โ selects GPU memory mode from one of the following options:separate,managed,unified. This option cannot be combined with-gpu=pinned,gpu=managedor-gpu=unified.mem:separateโ all data are in separate CPU and GPU memories. Explicit memory copies are performed when data are accessed from both CPU and GPU.mem:managedโ allocates any dynamically allocated data in CUDA Managed Memory. Data that are not allocated dynamically are in separate GPU memory and are copied explicitly between CPU and GPU memories. This option must appear in both the compile and link lines.mem:unifiedโ compiles for full CUDA Unified Memory capability, where system memory is accessible from the GPU. All variables in the CPU code are accessible from the GPU without explicit directives or attributes. This mode utilizes system and managed memory for dynamically allocated data unless explicit behavior is set through-gpu=mem:unified:[no]managedallocsubflags. This option must appear in both the compile and link lines.
mem:unified:managedalloc,mem:unified:nomanagedallocโ allocate (do not allocate) any dynamically allocated data in CUDA Managed Memory.mem:separate:pinnedalloc,mem:separate:nopinnedallocโ allocate (do not allocate) any dynamically allocated data in CUDA Pinned host memory.ptxinfoโ prints ptxas information.rdc(default),nordcโ generate (do not generate) relocatable device code for separate compilation, and invoke the device linker before the host linker at the link step.rdcis the default.redundantโ runs accelerated code redundantly on the CPU. Implied byautocompare.safecacheโ allows variable-sized array sections in cache directives; the compiler assumes they fit into CUDA shared memory.sm_XYโ generates code for a device with compute capability XY. Multiple compute capabilities can be specified, and one version is generated for each. By default, the compiler detects the compute capability for each installed GPU. Use-help -gputo see the valid compute capabilities for your installation.stacklimit:limit(default),nostacklimitโ this option has been deprecated and will be removed in a future release. It gives an error if the total stack size of a kernel or procedure exceeds limit KBytes. The default isstacklimit:512.tripcount:hostโ calculates loop trip counts on the host for some compute constructs. This is the default behavior when-gpu=tripcountis not specified. Note that this behavior is not compliant with the OpenACC specification. To ensure compliance with the specification, please use-gpu=tripcount:device.tripcount:deviceโ calculates loop trip counts on the device for some compute constructs. Note that this behavior is compliant with the OpenACC specification, though it is not the default behavior. To explicitly enable the default behavior, please use-gpu=tripcount:host.tripcount:warn,tripcount:nowarnโ enable (disable) compile-time warnings when loop trip counts are calculated on the host instead of on the device.tripcount:check,tripcount:nocheckโ insert (do not insert) runtime checks to ensure the trip count value calculated on the device matches the trip count value calculated on the host. To enable reporting of differences, set the environment variableNVCOMPILER_ACC_CHECK_TRIPCOUNT.unifiedโ compiles for CUDA Unified memory capability, where system memory is accessible from the GPU. All variables in the CPU code are accessible from the GPU without explicit directives or attributes. This mode utilizes system and managed memory for dynamically allocated data unless explicit behavior is set through-gpu=[no]managed. This option must appear in both the compile and link lines. This option may not be used with-gpu=pinned.interceptโ interceptsLIBCfunction calls (e.g.free) and calls their unified version if the address is in unified memory, and the regular version otherwise.
unroll,nounrollโ automatically (do not) unroll inner loops. This is enabled by default at optimization level-O3.
-Kieee,-Knoieee(default) โ does your floating-point math in strict conformance with the IEEE 754 standard, no games. Fair warning:-Kieeeturns off some optimizations and pulls in a more accurate math library, so it's the "correct but slower" bestie. The default-Knoieeeuses faster but very slightly less accurate methods. Slay either way, just know the tradeoff ๐-Ktrap=option[,option]...โ controls what the processor does when floating-point exceptions pop off during program execution. The possible options include:denormโ trap on denormalized operands.divzโ trap on divide by zero.fpโ trap on floating-point exceptions.inexactโ trap on inexact result.invโ trap on invalid operation.none(default) โ disable all the traps. Heads up:-Ktrap=inv,none,ovfimplies-Ktrap=ovf.ovfโ trap on floating-point overflow.unfโ trap on floating-point underflow. Also,-Ktrapis only meaningful when you're compiling a C/C++ main function or a Fortran main program, iykyk.
Quick shortcut: -Ktrap=fp is shorthand for -Ktrap=divz,inv,ovf.
These options map to the processor's floating-point exception mask bits. Normally the processor's exception mask bits are enabled, meaning floating-point exceptions are masked โ the processor recovers from the exception and just keeps going, main character energy. But if a mask bit is off (unmasked) and that exception happens, execution terminates with a floating-point exception (Linux FPE signal). ๐ญ So like, unmask responsibly.
-march=targetโ literally the same thing as-tp. Go read the-tpsection below for the deets, bestie.-m[no-]daz-ftzโ specifies how denormals are handled by the processor at runtime.-mno-daz-ftzsays denormal operands and results are honored โ shorthand for-Mnodaz -Mnoflushz. And-mdaz-ftzis the default setting, saying denormal operands and results get treated as zero โ shorthand for-Mdaz -Mflushz. Two vibes, pick one ๐ฆ-Mdaz,-Mnodazโ enable [disable] the mode that treats denormal (subnormal) floating-point operands as zero.-Mdazis the default setting for x86_64 and aarch64 processors. Periodt.-Mflushz,-Mnoflushzโ enable [disable] setting floating-point denormal (subnormal) results to zero.-Mflushzis the default setting for x86_64 and aarch64 processors. Yes, both defaults are the same processors, it's giving consistency ๐-Mfpmisalign,-Mnofpmisalignโ allow (don't allow) vector arithmetic instructions with memory operands that are not aligned on 16-byte boundaries. Alignment girlies stay winning โจ-Mfprelaxed [=option[,option,...]],-Mnofprelaxed(default) โ perform (don't perform) certain floating-point operations using relaxed precision when it improves speed. The options are:divโ perform divide using relaxed precision.intrinsicโ perform certain intrinsic functions using relaxed precision.order,noorderโ allow (don't allow) expression reordering, including factoring stuff like computinga*b+a*casa*(b+c).recipโ perform reciprocal operations using relaxed precision.rsqrtโ perform reciprocal square root (1/sqrt) using relaxed precision.sqrtโ perform square root using relaxed precision.
With no options at all, -Mfprelaxed will choose to generate relaxed precision code for those operations that give a significant performance improvement, depending on the target processor. Vibes-based optimization, honestly iconic ๐ฅ
-Mfunc32(default),-Mnofunc32โ align (don't align) functions on 32 byte boundaries. Cute and tidy ๐-Mgccbugsโ matches the behavior of certain bugs ingcc. Yes bestie, we're recreating the bugs on purpose. Compatibility is wild.-Mlongbranch,-Mnolongbranch(default) โ enable (disable) long branches.-Msecond_underscore,-Mnosecond_underscore(default) โ add (don't add) a second underscore to the name of a Fortran global if its name already contains an underscore. This one's useful for keeping compatibility withg77, which adds a second underscore to such symbols by default. Legacy friendship maintenance ๐ซถ-Mwritable-stringsโ stores string constants in the writable data segment. Write away, babe.-mcmodel=small|mediumโ pick your memory model:smallโ limits the combined area for a user's object or executable to 4GB. The maximum code size is 2GB.mediumโ allows unrestricted data size. The maximum code size is 2GB.
Two sizes, same 2GB code ceiling. Choose your fighter ๐
-stdpar=optionโ enables (ISO C++17) Parallel Algorithms. The options:gpuโ (ISO C++17) Parallel Algorithms are compiled for parallel execution on the GPU. This option implies-gpu=mem:unifiedon targets with full CUDA Unified memory capability and-gpu=mem:managedotherwise.gpu:accโ (ISO C++17) Parallel Algorithms are compiled for parallel execution on the GPU implemented with OpenACC. Same deal: implies-gpu=mem:unifiedon targets with full CUDA Unified memory capability and-gpu=mem:managedotherwise.multicoreโ (ISO C++17) Parallel Algorithms are compiled for parallel execution on the CPU.
-nostdparโ executes (ISO C++17) Parallel Algorithms sequentially. One at a time, no chaos, lowkey peaceful ๐ธ-ta=targetโ okay so this option has been deprecated, please refer to-accinstead. The sub-forms:-ta=teslaโ deprecated, please refer to-acc=gpuand-gpu.-ta=multicoreโ deprecated, please refer to-acc=multicore.-ta=hostโ deprecated, please refer to-acc=host.
All of these are giving "retired but still in the group chat" ๐
-target=optionโ selects the target for all the parallel programming paradigms you're using (OpenACC, OpenMP, Standard Languages). The possibilities are:gpuโ globally set the target device to an NVIDIA GPU.multicoreโ globally set the target device to the host CPU.
-tp=targetโ specifies the type of the target processor. Run this:
nvc++ -help -tp
to display the list of recognized target processors. Go get your list, bestie โญ
๐ FILES ๐
a.outโ executable output filepgpf.outโ Profile feedback data file; see-Mpfipgprof.outโ PGPROF output file; see-Mproffile.aโ library of object filesfile.Cโ C++ source filefile.ccโ C++ source filefile.cppโ C++ source filefile.cxxโ C++ source filefile.c++โ C++ source filefile.iโ C++ source file after preprocessingfile.cuโ CUDA source filefile.cupโ CUDA source file after preprocessing.file.ipaโ InterProcedural Analyzer (IPA) filefile.ipoโ InterProcedural Analyzer (IPA) filefile.oโ object filefile.sโ assembler source file.file.tiโ C++ template instantiation file.mynvc++rcโ you may add custom switches or make other additions tonvc++by creating a file named.mynvc++rcin your home directory. Customization era ๐
The installation of this version of the compiler resides in Basedir/Linux_x86_64/dev/; other versions may coexist in Basedir/Linux_x86_64/release/. Basedir is the root of the compiler installation directory, specified by the installer. The default is /opt/nvidia/hpc_sdk. Noted and memorized ๐
The compiler installation subdirectories are:
compilers/bin/โ Compiler and tool executables and configuration files (rcfiles).compilers/include/โ Compiler include files.compilers/lib/โ Runtime libraries and object files.comm_libs/โ Communication libraries, including NCCL and NVSHMEM.math_libs/โ Math libraries, including cuBLAS, cuTENSOR, cuSPARSE, cuFFT, cuSOLVER, and cuRAND.profilers/โ Profilers, including Nsight Compute and Nsight Systems.
๐ SEE ALSO ๐
nvc (1), nvfortran (1), and the NVIDIA User's Guide. Go read the whole friend group ๐ซถ
๐ฉบ DIAGNOSTICS ๐ฉบ
The compiler produces information and error messages as it translates the input program. The linker and assembler may also issue their own error messages โ so if you see something spicy scroll by, it might not even be the compiler's fault, ngl ๐
And that's the whole page, bestie! This masterpiece is from the nvc++(1) manual page, dated September 2026 โ go off, September 2026, you ate ๐โจ๐
๐ฆ where this page comes from
- arch rolling: nvhpc-compilers 26.9-1 ยท LicenseRef-NVIDIA-HPC-SDK
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms