mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
Prevent trying to build smallwrite engine for large cases
This commit is contained in:
parent
b097cb1b53
commit
cb7067f59d
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2015, Intel Corporation
|
* Copyright (c) 2015-2016, Intel Corporation
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
@ -126,6 +126,8 @@ Grey::Grey(void) :
|
|||||||
// are given to rose &co
|
// are given to rose &co
|
||||||
smallWriteLargestBufferBad(35),
|
smallWriteLargestBufferBad(35),
|
||||||
limitSmallWriteOutfixSize(1048576), // 1 MB
|
limitSmallWriteOutfixSize(1048576), // 1 MB
|
||||||
|
smallWriteMaxPatterns(10000),
|
||||||
|
smallWriteMaxLiterals(10000),
|
||||||
dumpFlags(0),
|
dumpFlags(0),
|
||||||
limitPatternCount(8000000), // 8M patterns
|
limitPatternCount(8000000), // 8M patterns
|
||||||
limitPatternLength(16000), // 16K bytes
|
limitPatternLength(16000), // 16K bytes
|
||||||
@ -273,6 +275,8 @@ void applyGreyOverrides(Grey *g, const string &s) {
|
|||||||
G_UPDATE(smallWriteLargestBuffer);
|
G_UPDATE(smallWriteLargestBuffer);
|
||||||
G_UPDATE(smallWriteLargestBufferBad);
|
G_UPDATE(smallWriteLargestBufferBad);
|
||||||
G_UPDATE(limitSmallWriteOutfixSize);
|
G_UPDATE(limitSmallWriteOutfixSize);
|
||||||
|
G_UPDATE(smallWriteMaxPatterns);
|
||||||
|
G_UPDATE(smallWriteMaxLiterals);
|
||||||
G_UPDATE(limitPatternCount);
|
G_UPDATE(limitPatternCount);
|
||||||
G_UPDATE(limitPatternLength);
|
G_UPDATE(limitPatternLength);
|
||||||
G_UPDATE(limitGraphVertices);
|
G_UPDATE(limitGraphVertices);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2015, Intel Corporation
|
* Copyright (c) 2015-2016, Intel Corporation
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
@ -143,6 +143,8 @@ struct Grey {
|
|||||||
u32 smallWriteLargestBuffer; // largest buffer that can be small write
|
u32 smallWriteLargestBuffer; // largest buffer that can be small write
|
||||||
u32 smallWriteLargestBufferBad;// largest buffer that can be small write
|
u32 smallWriteLargestBufferBad;// largest buffer that can be small write
|
||||||
u32 limitSmallWriteOutfixSize; //!< max total size of outfix DFAs
|
u32 limitSmallWriteOutfixSize; //!< max total size of outfix DFAs
|
||||||
|
u32 smallWriteMaxPatterns; // only try small writes if fewer patterns
|
||||||
|
u32 smallWriteMaxLiterals; // only try small writes if fewer literals
|
||||||
|
|
||||||
enum DumpFlags {
|
enum DumpFlags {
|
||||||
DUMP_NONE = 0,
|
DUMP_NONE = 0,
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2015, Intel Corporation
|
* Copyright (c) 2015-2016, Intel Corporation
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
@ -219,7 +219,7 @@ hs_compile_multi_int(const char *const *expressions, const unsigned *flags,
|
|||||||
: get_current_target();
|
: get_current_target();
|
||||||
|
|
||||||
CompileContext cc(isStreaming, isVectored, target_info, g);
|
CompileContext cc(isStreaming, isVectored, target_info, g);
|
||||||
NG ng(cc, somPrecision);
|
NG ng(cc, elements, somPrecision);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for (unsigned int i = 0; i < elements; i++) {
|
for (unsigned int i = 0; i < elements; i++) {
|
||||||
|
@ -75,14 +75,15 @@ using namespace std;
|
|||||||
|
|
||||||
namespace ue2 {
|
namespace ue2 {
|
||||||
|
|
||||||
NG::NG(const CompileContext &in_cc, unsigned in_somPrecision)
|
NG::NG(const CompileContext &in_cc, size_t num_patterns,
|
||||||
|
unsigned in_somPrecision)
|
||||||
: maxSomRevHistoryAvailable(in_cc.grey.somMaxRevNfaLength),
|
: maxSomRevHistoryAvailable(in_cc.grey.somMaxRevNfaLength),
|
||||||
minWidth(depth::infinity()),
|
minWidth(depth::infinity()),
|
||||||
rm(in_cc.grey),
|
rm(in_cc.grey),
|
||||||
ssm(in_somPrecision),
|
ssm(in_somPrecision),
|
||||||
cc(in_cc),
|
cc(in_cc),
|
||||||
rose(makeRoseBuilder(rm, ssm, cc, boundary)),
|
rose(makeRoseBuilder(rm, ssm, cc, boundary)),
|
||||||
smwr(makeSmallWriteBuilder(rm, cc)) {
|
smwr(makeSmallWriteBuilder(num_patterns, rm, cc)) {
|
||||||
}
|
}
|
||||||
|
|
||||||
NG::~NG() {
|
NG::~NG() {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2015, Intel Corporation
|
* Copyright (c) 2015-2016, Intel Corporation
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
@ -87,7 +87,8 @@ class SmallWriteBuild;
|
|||||||
|
|
||||||
class NG : boost::noncopyable {
|
class NG : boost::noncopyable {
|
||||||
public:
|
public:
|
||||||
NG(const CompileContext &in_cc, unsigned in_somPrecision);
|
NG(const CompileContext &in_cc, size_t num_patterns,
|
||||||
|
unsigned in_somPrecision);
|
||||||
~NG();
|
~NG();
|
||||||
|
|
||||||
/** \brief Consumes a pattern, returns false or throws a CompileError
|
/** \brief Consumes a pattern, returns false or throws a CompileError
|
||||||
|
@ -65,7 +65,8 @@ namespace { // unnamed
|
|||||||
// Concrete impl class
|
// Concrete impl class
|
||||||
class SmallWriteBuildImpl : public SmallWriteBuild {
|
class SmallWriteBuildImpl : public SmallWriteBuild {
|
||||||
public:
|
public:
|
||||||
SmallWriteBuildImpl(const ReportManager &rm, const CompileContext &cc);
|
SmallWriteBuildImpl(size_t num_patterns, const ReportManager &rm,
|
||||||
|
const CompileContext &cc);
|
||||||
|
|
||||||
// Construct a runtime implementation.
|
// Construct a runtime implementation.
|
||||||
aligned_unique_ptr<SmallWriteEngine> build(u32 roseQuality) override;
|
aligned_unique_ptr<SmallWriteEngine> build(u32 roseQuality) override;
|
||||||
@ -87,11 +88,14 @@ public:
|
|||||||
|
|
||||||
SmallWriteBuild::~SmallWriteBuild() { }
|
SmallWriteBuild::~SmallWriteBuild() { }
|
||||||
|
|
||||||
SmallWriteBuildImpl::SmallWriteBuildImpl(const ReportManager &rm_in,
|
SmallWriteBuildImpl::SmallWriteBuildImpl(size_t num_patterns,
|
||||||
|
const ReportManager &rm_in,
|
||||||
const CompileContext &cc_in)
|
const CompileContext &cc_in)
|
||||||
: rm(rm_in), cc(cc_in),
|
: rm(rm_in), cc(cc_in),
|
||||||
/* small write is block mode only */
|
/* small write is block mode only */
|
||||||
poisoned(!cc.grey.allowSmallWrite || cc.streaming) {
|
poisoned(!cc.grey.allowSmallWrite
|
||||||
|
|| cc.streaming
|
||||||
|
|| num_patterns > cc.grey.smallWriteMaxPatterns) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void SmallWriteBuildImpl::add(const NGWrapper &w) {
|
void SmallWriteBuildImpl::add(const NGWrapper &w) {
|
||||||
@ -163,6 +167,10 @@ void SmallWriteBuildImpl::add(const ue2_literal &literal, ReportID r) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cand_literals.push_back(make_pair(literal, r));
|
cand_literals.push_back(make_pair(literal, r));
|
||||||
|
|
||||||
|
if (cand_literals.size() > cc.grey.smallWriteMaxLiterals) {
|
||||||
|
poisoned = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
@ -181,6 +189,7 @@ void lit_to_graph(NGHolder *h, const ue2_literal &literal, ReportID r) {
|
|||||||
bool SmallWriteBuildImpl::determiniseLiterals() {
|
bool SmallWriteBuildImpl::determiniseLiterals() {
|
||||||
DEBUG_PRINTF("handling literals\n");
|
DEBUG_PRINTF("handling literals\n");
|
||||||
assert(!poisoned);
|
assert(!poisoned);
|
||||||
|
assert(cand_literals.size() <= cc.grey.smallWriteMaxLiterals);
|
||||||
|
|
||||||
if (cand_literals.empty()) {
|
if (cand_literals.empty()) {
|
||||||
return true; /* nothing to do */
|
return true; /* nothing to do */
|
||||||
@ -352,9 +361,10 @@ aligned_unique_ptr<NFA> prepEngine(raw_dfa &rdfa, u32 roseQuality,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SmallWriteBuild factory
|
// SmallWriteBuild factory
|
||||||
unique_ptr<SmallWriteBuild> makeSmallWriteBuilder(const ReportManager &rm,
|
unique_ptr<SmallWriteBuild> makeSmallWriteBuilder(size_t num_patterns,
|
||||||
|
const ReportManager &rm,
|
||||||
const CompileContext &cc) {
|
const CompileContext &cc) {
|
||||||
return ue2::make_unique<SmallWriteBuildImpl>(rm, cc);
|
return ue2::make_unique<SmallWriteBuildImpl>(num_patterns, rm, cc);
|
||||||
}
|
}
|
||||||
|
|
||||||
aligned_unique_ptr<SmallWriteEngine>
|
aligned_unique_ptr<SmallWriteEngine>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2015, Intel Corporation
|
* Copyright (c) 2015-2016, Intel Corporation
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
* modification, are permitted provided that the following conditions are met:
|
* modification, are permitted provided that the following conditions are met:
|
||||||
@ -64,7 +64,8 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Construct a usable SmallWrite builder.
|
// Construct a usable SmallWrite builder.
|
||||||
std::unique_ptr<SmallWriteBuild> makeSmallWriteBuilder(const ReportManager &rm,
|
std::unique_ptr<SmallWriteBuild> makeSmallWriteBuilder(size_t num_patterns,
|
||||||
|
const ReportManager &rm,
|
||||||
const CompileContext &cc);
|
const CompileContext &cc);
|
||||||
|
|
||||||
size_t smwrSize(const SmallWriteEngine *t);
|
size_t smwrSize(const SmallWriteEngine *t);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user