Skip to content
Draft
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
21c7d35
SAVE WORK SQUASH COMMIT
ZelboK Aug 23, 2023
f909b9d
save
ZelboK Aug 25, 2023
17c4592
getting closer
ericniebler Aug 29, 2023
71cd446
save work before merge main squash
ZelboK Sep 1, 2023
201b0ab
Revert "save work before merge main squash"
ZelboK Sep 1, 2023
217e5d1
save before change branch squash later pls
ZelboK Sep 1, 2023
6c10550
Revert "save before change branch squash later pls"
ZelboK Sep 1, 2023
e6a37e3
Merge branch 'main' into feature/cuda_reduce
ZelboK Sep 1, 2023
ae4297a
commit before chage branch squash later
ZelboK Sep 1, 2023
2aa2d9a
push upwards for second opinions
ZelboK Sep 4, 2023
1e517a3
remove noise
ZelboK Sep 4, 2023
b024e09
demonstrate recursive sender transformation
ericniebler Sep 4, 2023
6a6aafa
add test for static_thread_pool bulk concurrency; cleanup
ericniebler Sep 5, 2023
fcd7747
__reconstitute is just make_sender, rename apply_sender
ericniebler Sep 5, 2023
5fb2849
Merge remote-tracking branch 'origin/main' into feature/cuda_reduce
ericniebler Sep 5, 2023
f0dc533
Merge branch 'on-redux' into feature/cuda_reduce
ericniebler Sep 11, 2023
b94bd4d
Merge remote-tracking branch 'origin/main' into feature/cuda_reduce
ericniebler Sep 15, 2023
8722f36
fix cycle in type system in stream scheduler concepts
ericniebler Sep 15, 2023
8350038
Merge pull request #1 from ericniebler/feature/cuda_reduce
ZelboK Sep 15, 2023
76f863d
Merge remote-tracking branch 'origin/main' into tmp_cuda_reduce
ericniebler Sep 23, 2023
b240e36
Merge remote-tracking branch 'origin/main' into HEAD
ericniebler Sep 25, 2023
6dce716
Merge branch 'main' into HEAD
ericniebler Sep 30, 2023
d97b5df
Merge remote-tracking branch 'origin/main' into cuda_reduce
ericniebler Oct 9, 2023
82657c4
Merge remote-tracking branch 'origin/main' into cuda_reduce
ericniebler Oct 18, 2023
6f55541
merge main
ZelboK Oct 22, 2023
b5a09b8
Merge branch 'main' of github.com:NVIDIA/stdexec into feature/cuda_re…
trxcllnt Jan 8, 2024
7931851
update type names
trxcllnt Jan 8, 2024
298cae0
use int instead of float
trxcllnt Jan 8, 2024
bdd9307
clean up include
trxcllnt Jan 9, 2024
a73f622
Merge branch 'main' of github.com:NVIDIA/stdexec into feature/cuda_re…
trxcllnt Jan 9, 2024
8e62305
update aws-actions/configure-aws-credentials version
trxcllnt Jan 9, 2024
ed370d6
update aws-actions/configure-aws-credentials version
trxcllnt Jan 9, 2024
200fa34
change CI CPU workflow trigger
trxcllnt Jan 9, 2024
7ec74dd
Merge branch 'main' into feature/cuda_reduce
trxcllnt Jan 9, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
merge main
  • Loading branch information
ZelboK committed Oct 22, 2023
commit 6f555416d079a64232ddc7ab5d76f07184d580e2
101 changes: 100 additions & 1 deletion test/exec/test_any_sender.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -622,5 +622,104 @@ namespace {
start(op);
}
}
CHECK(counting_scheduler::count == 0);

TEST_CASE("Schedule Sender lifetime", "[types][any_scheduler][any_sender]") {
using receiver_ref =
any_receiver_ref<completion_signatures<set_stopped_t(), set_error_t(std::exception_ptr)>>;
using sender_t = receiver_ref::any_sender<>;
using scheduler_t = sender_t::any_scheduler<>;
scheduler_t scheduler = exec::inline_scheduler();
auto sched = schedule(scheduler);
scheduler = stopped_scheduler();
{
auto op = connect(schedule(scheduler), expect_stopped_receiver{});
start(op);
}
{
auto op = connect(std::move(sched), expect_void_receiver{});
start(op);
}
}

// A scheduler that counts how many instances are extant.
struct counting_scheduler {
using __id = counting_scheduler;
using __t = counting_scheduler;

static int count;

counting_scheduler() noexcept {
++count;
}

counting_scheduler(const counting_scheduler&) noexcept {
++count;
}

counting_scheduler(counting_scheduler&&) noexcept {
++count;
}

~counting_scheduler() {
--count;
}

bool operator==(const counting_scheduler&) const noexcept = default;

private:
template <class R>
struct operation : immovable {
R recv_;

friend void tag_invoke(ex::start_t, operation& self) noexcept {
ex::set_value((R&&) self.recv_);
}
};

struct sender {
using __id = sender;
using __t = sender;

using is_sender = void;
using completion_signatures = ex::completion_signatures<ex::set_value_t()>;

template <ex::receiver R>
friend operation<R> tag_invoke(ex::connect_t, sender self, R r) {
return {{}, (R&&) r};
}

friend auto tag_invoke(ex::get_completion_scheduler_t<ex::set_value_t>, sender) noexcept
-> counting_scheduler {
return {};
}

friend const sender& tag_invoke(ex::get_env_t, const sender& self) noexcept {
return self;
}
};

friend sender tag_invoke(ex::schedule_t, counting_scheduler) noexcept {
return {};
}
};

int counting_scheduler::count = 0;

TEST_CASE(
"check that any_scheduler cleans up all resources",
"[types][any_scheduler][any_sender]") {
using receiver_ref = any_receiver_ref<completion_signatures<set_value_t()>>;
using sender_t = receiver_ref::any_sender<>;
using scheduler_t = sender_t::any_scheduler<>;
{
scheduler_t scheduler = exec::inline_scheduler{};
scheduler = counting_scheduler{};
{
auto op = connect(schedule(scheduler), expect_value_receiver<>{});
start(op);
}
}
CHECK(counting_scheduler::count == 0);
}

}
63 changes: 25 additions & 38 deletions test/nvexec/upon_stopped.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,42 +10,29 @@ using nvexec::is_on_gpu;

namespace {

auto snd = ex::just_stopped() | ex::transfer(stream_ctx.get_scheduler())
| ex::upon_stopped([] { return ex::just(); });
STATIC_REQUIRE(ex::sender<decltype(snd)>);
(void) snd;
}

template <class...>
[[deprecated]] void print(auto&&...) {
}

namespace N {
using stdexec::__tag_invoke::tag_invoke;

struct tag_invoke_t {
template <class... As>
auto operator()(As&&... as) const {
tag_invoke((As&&) as...);
}
};
}

TEST_CASE("nvexec upon_stopped executes on GPU", "[cuda][stream][adaptors][upon_stopped]") {
nvexec::stream_context stream_ctx{};

flags_storage_t flags_storage{};
auto flags = flags_storage.get();

auto snd = ex::just_stopped() //
| ex::transfer(stream_ctx.get_scheduler()) //
| ex::upon_stopped([=] {
if (is_on_gpu()) {
flags.set();
}
});

stdexec::sync_wait(std::move(snd));

REQUIRE(flags_storage.all_set_once());
TEST_CASE("nvexec upon_stopped returns a sender", "[cuda][stream][adaptors][upon_stopped]") {
nvexec::stream_context stream_ctx{};

auto snd = ex::just_stopped() | ex::transfer(stream_ctx.get_scheduler())
| ex::upon_stopped([] { return ex::just(); });
STATIC_REQUIRE(ex::sender<decltype(snd)>);
(void) snd;
}

TEST_CASE("nvexec upon_stopped executes on GPU", "[cuda][stream][adaptors][upon_stopped]") {
nvexec::stream_context stream_ctx{};

flags_storage_t flags_storage{};
auto flags = flags_storage.get();

auto snd = ex::just_stopped() //
| ex::transfer(stream_ctx.get_scheduler()) | ex::upon_stopped([=] {
if (is_on_gpu()) {
flags.set();
}
});
stdexec::sync_wait(std::move(snd));

REQUIRE(flags_storage.all_set_once());
}
}
3 changes: 0 additions & 3 deletions test/stdexec/algos/adaptors/test_bulk.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -275,9 +275,6 @@ namespace {
stdexec::schedule(sch) | stdexec::bulk(n, [&](int id) { counters_1[id]++; }),
stdexec::schedule(sch) | stdexec::bulk(n, [&](int id) { counters_2[id]++; }));

auto snd = ex::transfer_just(sch) //
| ex::bulk(n, [&counter](int idx) { counter[idx] = 0; })
| ex::bulk(n, [&counter](int idx) { counter[idx]++; });
stdexec::sync_wait(std::move(snd));

CHECK(std::count(counters_1.begin(), counters_1.end(), 1) == n);
Expand Down
You are viewing a condensed version of this merge commit. You can view the full changes here.