diff options
author | alexv-smirnov <[email protected]> | 2023-03-15 19:59:12 +0300 |
---|---|---|
committer | alexv-smirnov <[email protected]> | 2023-03-15 19:59:12 +0300 |
commit | 056bb284ccf8dd6793ec3a54ffa36c4fb2b9ad11 (patch) | |
tree | 4740980126f32e3af7937ba0ca5f83e59baa4ab0 /build/scripts/gen_mx_table.py | |
parent | 269126dcced1cc8b53eb4398b4a33e5142f10290 (diff) |
add library/cpp/actors, ymake build to ydb oss export
Diffstat (limited to 'build/scripts/gen_mx_table.py')
-rw-r--r-- | build/scripts/gen_mx_table.py | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/build/scripts/gen_mx_table.py b/build/scripts/gen_mx_table.py new file mode 100644 index 00000000000..187c21c539f --- /dev/null +++ b/build/scripts/gen_mx_table.py @@ -0,0 +1,75 @@ +import sys + +tmpl = """ +#include "yabs_mx_calc_table.h" + +#include <kernel/matrixnet/mn_sse.h> + +#include <library/cpp/archive/yarchive.h> + +#include <util/memory/blob.h> +#include <util/generic/hash.h> +#include <util/generic/ptr.h> +#include <util/generic/singleton.h> + +using namespace NMatrixnet; + +extern "C" { + extern const unsigned char MxFormulas[]; + extern const ui32 MxFormulasSize; +} + +namespace { + struct TFml: public TBlob, public TMnSseInfo { + inline TFml(const TBlob& b) + : TBlob(b) + , TMnSseInfo(Data(), Size()) + { + } + }; + + struct TFormulas: public THashMap<size_t, TAutoPtr<TFml>> { + inline TFormulas() { + TBlob b = TBlob::NoCopy(MxFormulas, MxFormulasSize); + TArchiveReader ar(b); + %s + } + + inline const TMnSseInfo& at(size_t n) const noexcept { + return *find(n)->second; + } + }; + + %s + + static func_descr_t yabs_funcs[] = { + %s + }; +} + +yabs_mx_calc_table_t yabs_mx_calc_table = {YABS_MX_CALC_VERSION, 10000, 0, yabs_funcs}; +""" + +if __name__ == '__main__': + init = [] + body = [] + defs = {} + + for i in sys.argv[1:]: + name = i.replace('.', '_') + num = long(name.split('_')[1]) + + init.append('(*this)[%s] = new TFml(ar.ObjectBlobByKey("%s"));' % (num, '/' + i)) + + f1 = 'static void yabs_%s(size_t count, const float** args, double* res) {Singleton<TFormulas>()->at(%s).DoCalcRelevs(args, res, count);}' % (name, num) + f2 = 'static size_t yabs_%s_factor_count() {return Singleton<TFormulas>()->at(%s).MaxFactorIndex() + 1;}' % (name, num) + + body.append(f1) + body.append(f2) + + d1 = 'yabs_%s' % name + d2 = 'yabs_%s_factor_count' % name + + defs[num] = '{%s, %s}' % (d1, d2) + + print tmpl % ('\n'.join(init), '\n\n'.join(body), ',\n'.join((defs.get(i, '{nullptr, nullptr}') for i in range(0, 10000)))) |