mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-06-01 23:30:35 +00:00
* Added the OrtDnnlProviderOptions structure to expose configuration options to the user * The number of threads can be defined by the user with the -i flag on the perftest * Number of threads can also be configured via the OMP_NUM_THREADS environment variable * The number of threads defined in the OrtDnnlProviderOptions is prioritized over the environment variable ### Description Avoids thread oversubscription caused by OpenMP allocating the maximum number of threads possible for oneDNN EP. Added support for the OrtDnnlProviderOptions, this will allow for more EP customization capabilities, and allows for user defined number of threads. ### Motivation and Context - Improves performances and allows for user to fine tune the number of threads
77 lines
2.8 KiB
Python
Executable file
77 lines
2.8 KiB
Python
Executable file
#!/usr/bin/python3
|
|
import argparse
|
|
import os
|
|
|
|
|
|
def parse_arguments():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("--src_root", required=True, help="input symbol file")
|
|
parser.add_argument("--output", required=True, help="output file")
|
|
parser.add_argument("--output_source", required=True, help="output file")
|
|
parser.add_argument("--version_file", required=True, help="VERSION_NUMBER file")
|
|
parser.add_argument("--style", required=True, choices=["gcc", "vc", "xcode"])
|
|
parser.add_argument("--config", required=True, nargs="+")
|
|
return parser.parse_args()
|
|
|
|
|
|
args = parse_arguments()
|
|
print("Generating symbol file for %s" % str(args.config))
|
|
with open(args.version_file, "r") as f:
|
|
VERSION_STRING = f.read().strip()
|
|
|
|
print("VERSION:%s" % VERSION_STRING)
|
|
|
|
symbols = set()
|
|
for c in args.config:
|
|
file_name = os.path.join(args.src_root, "core", "providers", c, "symbols.txt")
|
|
with open(file_name, "r") as file:
|
|
for line in file:
|
|
line = line.strip()
|
|
if line in symbols:
|
|
print("dup symbol: %s", line)
|
|
exit(-1)
|
|
symbols.add(line)
|
|
symbols = sorted(symbols)
|
|
|
|
symbol_index = 1
|
|
with open(args.output, "w") as file:
|
|
if args.style == "vc":
|
|
file.write("LIBRARY\n")
|
|
file.write("EXPORTS\n")
|
|
elif args.style == "xcode":
|
|
pass # xcode compile don't has any header.
|
|
else:
|
|
file.write("VERS_%s {\n" % VERSION_STRING)
|
|
file.write(" global:\n")
|
|
|
|
for symbol in symbols:
|
|
if args.style == "vc":
|
|
file.write(" %s @%d\n" % (symbol, symbol_index))
|
|
elif args.style == "xcode":
|
|
file.write("_%s\n" % symbol)
|
|
else:
|
|
file.write(" %s;\n" % symbol)
|
|
symbol_index += 1
|
|
|
|
if args.style == "gcc":
|
|
file.write(" local:\n")
|
|
file.write(" *;\n")
|
|
file.write("}; \n")
|
|
|
|
with open(args.output_source, "w") as file:
|
|
file.write("#include <onnxruntime_c_api.h>\n")
|
|
for c in args.config:
|
|
# WinML adapter should not be exported in platforms other than Windows.
|
|
# Exporting OrtGetWinMLAdapter is exported without issues using .def file when compiling for Windows
|
|
# so it isn't necessary to include it in generated_source.c
|
|
|
|
# external symbols are removed, xnnpack ep will be created via the standard ORT API.
|
|
# https://github.com/microsoft/onnxruntime/pull/11798
|
|
if c not in ("winml", "cuda", "migraphx", "snpe", "xnnpack", "cann", "dnnl"):
|
|
file.write("#include <core/providers/%s/%s_provider_factory.h>\n" % (c, c))
|
|
file.write("void* GetFunctionEntryByName(const char* name){\n")
|
|
for symbol in symbols:
|
|
if symbol != "OrtGetWinMLAdapter":
|
|
file.write('if(strcmp(name,"%s") ==0) return (void*)&%s;\n' % (symbol, symbol))
|
|
file.write("return NULL;\n")
|
|
file.write("}\n")
|