Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Jun 25 16:08
    alexreinking commented #6794
  • Jun 25 16:05
    LebedevRI commented #6794
  • Jun 25 15:33
    alexreinking commented #6794
  • Jun 25 10:02
    steven-johnson commented #6794
  • Jun 25 03:23
    WCTchentao closed #6811
  • Jun 25 03:23
    WCTchentao commented #6811
  • Jun 24 20:42
    abadams labeled #6816
  • Jun 24 20:42
    abadams labeled #6817
  • Jun 24 20:41
    abadams opened #6817
  • Jun 24 20:38
    abadams opened #6816
  • Jun 24 18:07
    lukastruemper commented #6794
  • Jun 24 17:34
    LebedevRI commented #6794
  • Jun 24 17:33
    LebedevRI commented #6794
  • Jun 24 17:10
    lukastruemper commented #6815
  • Jun 24 17:09
    lukastruemper opened #6815
  • Jun 24 16:44
    lukastruemper commented #6794
  • Jun 24 16:41
    lukastruemper commented #6794
  • Jun 24 16:30
    lukastruemper synchronize #6794
  • Jun 24 14:16
    LebedevRI review_requested #6810
  • Jun 24 14:16
    LebedevRI synchronize #6810
ivangarcia44
@ivangarcia44

For the question above, here is a the sample code. I am looking a way to
automatically map func1 from the HalideGenerator class to func1_1 in the
scheduler pipeline below. And func2 to repeat_edge_1.

class HalideGenerator1 : public Halide::Generator <HalideGenerator1> {
public:
...
void generate() {
...
func2(x, y) = BoundaryConditions::constant_exterior(func1, 0)(x, y);
...
}
void schedule() {
...
}
private:
...
Func func1{"func1"};
Func func2{"func2"};
...
};

inline void apply_schedule_HalideGeneratorName(
::Halide::Pipeline pipeline,
::Halide::Target target
) {
using ::Halide::Func
...
Func func1_1 = pipeline.get_func(28);
Func repeat_edge_1 = pipeline.get_func(27);
...
func1_1
.split(...)
.vectorize(...)
.compute_root()
.parallel(...);
...
repeat_edge_1
.split(...)
.vectorize(...)
.compute_root()
.parallel(...);
...
}

Roman Lebedev
@LebedevRI
halide itself is pgo-ignorant, right? i'm failing to find any mention of pgo/-fprofile-generate/-fprofile-instr-generate in the repo. i'm trying to understand what goes wrong in llvm/llvm-project#52845
Alex Reinking
@alexreinking:matrix.org
[m]
That's right... the CMake build has no opinion about those flags
Roman Lebedev
@LebedevRI
thought as much
Roman Lebedev
@LebedevRI
are there any success stories of halide-enabled projects and fuzzing? i'm guessing the C_BACKEND is catch-all escape hatch for this?
Alex Reinking
@alexreinking:matrix.org
[m]
The rungen stuff has a random input generator. You have to provide the output extents though
Not sure why C_BACKEND would be relevant?
You generally don't want to go through the C backend if LLVM has a backend for your target
Roman Lebedev
@LebedevRI
no, i mean, what if i have some code that is currently being fuzzed as part of oss-fuzz project, and now i want to replace some pieces of that code with halide. how do i retain fuzzing coverage?
Alex Reinking
@alexreinking:matrix.org
[m]
I don't know, how does oss-fuzz measure coverage?
Roman Lebedev
@LebedevRI
i mostly mean coverage in general sense. for plain c code, the ir would then be instrumented by some pass as instructed by clang, but here as i can tell there's only asan option
s/option/feature/
well, and tsan
Alex Reinking
@alexreinking:matrix.org
[m]
We could look into enabling that pass via a feature flag, assuming one exists at the LLVM level
so msan seems obvious-ish
Alex Reinking
@alexreinking:matrix.org
[m]
Sure. We could look into this if it appeases fuzzing tools generally.
Roman Lebedev
@LebedevRI
the main one is ModuleSanitizerCoveragePass
let me just file a metabug first
Alex Reinking
@alexreinking:matrix.org
[m]
"Coverage" is kind of a weird metric for a language like Halide, though. Programs aren't very divergent. I would guess that for a "typical" pipeline, nearly every input would produce the same coverage profile.
Roman Lebedev
@LebedevRI
sure, but fuzzers need that to know if they are hitting the actual code or not
Alex Reinking
@alexreinking:matrix.org
[m]
Like, maybe you can do some weird things with RDom::where. External stages need to be instrumented separately, anyway.
Sure. I think that's a good enough reason
Roman Lebedev
@LebedevRI
note that i'm not saying: please implement this now; i would look into it myself if it's reasonable and maybe with some guidance if needed
Alex Reinking
@alexreinking:matrix.org
[m]
Gotcha
Roman Lebedev
@LebedevRI
so i guess i should just try and see what it would take to add msan support
Alex Reinking
@alexreinking:matrix.org
[m]
Yes, hopefully not too much.
Roman Lebedev
@LebedevRI
alexreinking: thank you
Roman Lebedev
@LebedevRI
ah, hmm, so there is already some msan support, missed that
Yeah, we have m/t/asan feature flags
Roman Lebedev
@LebedevRI
yeah, somehow i didn't see msan
Alex Reinking
@alexreinking:matrix.org
[m]
It's not next to the others for some reason 🤷‍♂️
I was surprised when you said there was no msan support... I should have checked.
Roman Lebedev
@LebedevRI
i mean, msan pass isn't being run in CodeGen_LLVM::optimize_module(), unlike asan/tsan, there's custom instrumentation that all input buffers are defined, which is actually the right way do to this
Alex Reinking
@alexreinking:matrix.org
[m]
So you just need the coverage sanitizer still?
Roman Lebedev
@LebedevRI
"just"
Alex Reinking
@alexreinking:matrix.org
[m]
🙂
Roman Lebedev
@LebedevRI
there's also the question of translating -fsanitize to halide features
Alex Reinking
@alexreinking:matrix.org
[m]
In what sense?
Halide compiled with a sanitizer doesn't need to always produce binaries with that sanitizer
And vice versa...
Roman Lebedev
@LebedevRI
sure, that's not the question
Alex Reinking
@alexreinking:matrix.org
[m]
Okay, then where is this translation taking place?
Roman Lebedev
@LebedevRI
what i mean is, when i pass CFLAGS=-fsanitize=address, clang enables ASAN. will that just magically also enable halide's asan feature
?
Alex Reinking
@alexreinking:matrix.org
[m]
No, that's what I'm saying. It would be wrong to do that
Roman Lebedev
@LebedevRI
nono, not when compiling halide itself
e.g. when compiling halide/apps
Alex Reinking
@alexreinking:matrix.org
[m]
Clang doesn't read the CFLAGS env var AFAIK. CMake and Makefile default rules honor that variable when constructing compiler command lines.