mirror of
https://github.com/matrix-construct/construct
synced 2024-09-27 19:28:52 +02:00
ircd:🆑:exec: Override local size from reqd_work_group_size attribute.
This commit is contained in:
parent
b068b7d959
commit
517f109f3a
1 changed files with 31 additions and 4 deletions
35
ircd/cl.cc
35
ircd/cl.cc
|
@ -925,6 +925,11 @@ try
|
||||||
queue[0][0]
|
queue[0][0]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
auto &dev
|
||||||
|
{
|
||||||
|
device[0][0]
|
||||||
|
};
|
||||||
|
|
||||||
const auto deps
|
const auto deps
|
||||||
{
|
{
|
||||||
make_deps(this, opts)
|
make_deps(this, opts)
|
||||||
|
@ -933,12 +938,34 @@ try
|
||||||
assert(!this->object);
|
assert(!this->object);
|
||||||
this->object = &kern;
|
this->object = &kern;
|
||||||
|
|
||||||
size_t global_size(range.global[0]);
|
const auto max_local_size
|
||||||
size_t local_size(range.local[0]);
|
{
|
||||||
|
kern.group_size(dev)
|
||||||
|
};
|
||||||
|
|
||||||
|
const auto reqd_local_size
|
||||||
|
{
|
||||||
|
kern.compile_group_size(dev)
|
||||||
|
};
|
||||||
|
|
||||||
|
const auto hint_local_size
|
||||||
|
{
|
||||||
|
kern.preferred_group_size_multiple(dev)
|
||||||
|
};
|
||||||
|
|
||||||
|
size_t local[dim];
|
||||||
|
for(size_t d(0); d < dim; ++d)
|
||||||
|
{
|
||||||
|
local[d] = reqd_local_size[d]?: range.local[d]?: hint_local_size;
|
||||||
|
local[d] = std::min(local[d], max_local_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t global_size{range.global[0]};
|
||||||
|
size_t local_size{local[0]};
|
||||||
for(size_t d(1); d < dim; ++d)
|
for(size_t d(1); d < dim; ++d)
|
||||||
{
|
{
|
||||||
global_size *= range.global[d];
|
global_size *= range.global[d];
|
||||||
local_size *= range.local[d];
|
local_size *= local[d];
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(global_size % local_size == 0);
|
assert(global_size % local_size == 0);
|
||||||
|
@ -984,7 +1011,7 @@ try
|
||||||
dim,
|
dim,
|
||||||
sub_range.offset.data(),
|
sub_range.offset.data(),
|
||||||
sub_range.global.data(),
|
sub_range.global.data(),
|
||||||
sub_range.local.data(),
|
local + 0,
|
||||||
deps.size(),
|
deps.size(),
|
||||||
deps.size()? deps.data(): nullptr,
|
deps.size()? deps.data(): nullptr,
|
||||||
i == tasks - 1? addressof_handle(this): nullptr
|
i == tasks - 1? addressof_handle(this): nullptr
|
||||||
|
|
Loading…
Reference in a new issue