Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build a proxy NVRTC command line utility that can act as if it were a "real" compiler. #465

Closed
Tracked by #318
jrhemstad opened this issue Sep 20, 2023 · 2 comments · Fixed by #494
Closed
Tracked by #318
Assignees

Comments

@jrhemstad
Copy link
Collaborator

No description provided.

@wmaxey
Copy link
Member

wmaxey commented Sep 20, 2023

My current thoughts on this utility:

NVRTCC

How to use:

Configure libcudacxx to test with NVRTC and cmake --build the project before executing lit.

cmake ... -DLIBCUDACXX_TEST_WITH_NVRTC=ON
cmake --build $BUILD_DIR
lit ... $TEST_DIR

How it works

nvrtcc processes incoming arguments matching for flags that modify its behavior, and passing the rest to NVRTC.
It will hopefully filter any that don't apply (gcc warnings and such).

The input file is processed to be compatible with NVRTC similarly to the nvrtc.sh scripts during compilation.
The resulting file is then compiled with NVRTC and stored as a fatbin. This is, in effect, a compilation pass for NVRTC.
.fail.cpp tests will be analyzable by lit and should work properly.

For execution, the fatbin file is provided to nvrtcc again, but will this time instead launch on GPU the precompiled
test unit.

flowchart TD;
    compile{nvrtcc};
    runfat{nvrtcc};

    start[Execute lit]
    build(Execute nvrtcc)
    pass(Pass: Continue)
    fail(Fail: Compile time failure)
    save[Save fatbin]

    load[Load fatbin]
    testpass[Pass: No failures]
    testfail[Fail: Report driver error]

    save --> load;

    subgraph Build Pass
    start   --  lit -sv -Denable_nvrtc=true    --> build;
    build   --  nvrtcc -x cu test.pass.cpp ... --> compile;
    compile --> fail;
    compile --> pass;
    pass    --> save;
    end


    subgraph Test Pass
    load -- nvrtcc test.pass.cpp.fatbin --> runfat;
    runfat --> testpass
    runfat --> testfail
    end
Loading

@benbarsdell
Copy link
Member

In case it's useful, we made a similar thing for the purpose of adding NVRTC support to godbolt.org: https://github.com/NVIDIA/jitify/blob/master/nvrtc_cli.cpp

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Archived in project
Development

Successfully merging a pull request may close this issue.

3 participants