2021-08-06 22:55
hkaiser changed the topic of #ste||ar to: STE||AR: Systems Technology, Emergent Parallelism, and Algorithm Research | stellar-group.org | HPX: A cure for performance impaired parallel applications | github.com/STEllAR-GROUP/hpx | This channel is logged: irclog.cct.lsu.edu
01:21
Yorlik_ has joined #ste||ar
01:25
Yorlik__ has quit [Ping timeout: 265 seconds]
01:37
K-ballo has quit [Ping timeout: 240 seconds]
01:39
K-ballo has joined #ste||ar
07:11
ShubhamKumar[m] is now known as matrixbot[m]
07:11
ms[m]1 is now known as ms[m]
09:04
KordeJong[m] has quit [Remote host closed the connection]
13:24
strackar has joined #ste||ar
13:48
strackar has quit [Ping timeout: 250 seconds]
15:02
strackar has joined #ste||ar
15:16
Isidoros[m] has joined #ste||ar
15:44
tufei__ has joined #ste||ar
15:45
tufei_ has quit [Remote host closed the connection]
16:27
strackar has quit [Ping timeout: 265 seconds]
18:10
HHN93 has joined #ste||ar
18:13
HHN93 has quit [Client Quit]
18:29
HHN93 has joined #ste||ar
18:31
<
HHN93 >
so what excatly is the 2nd enable argument?
18:33
<
HHN93 >
that gets called if its trivially copyable right?
18:35
<
HHN93 >
so how does the Enable template argument help?
18:46
<
satacker[m] >
So if it;s a trivially_copyable_pointer_tag the copy_memmove is done and otherwise the custom one
18:48
<
satacker[m] >
As already mentioned in the comment above the definition it is a CPO
18:51
<
HHN93 >
can I ask why it's there?
19:00
<
satacker[m] >
It defaults Enable to void
19:01
<
satacker[m] >
or the second arg
19:01
<
HHN93 >
yes, but I don't understand how the 2nd argument helps
19:02
<
HHN93 >
we need only 1 argument (category) to realise which function to call
19:05
<
satacker[m] >
My example does not really showcase the CPO stuff
19:06
<
satacker[m] >
But these are the right questions i think
19:07
<
K-ballo >
a CPO doesn't need to depend on any trait
19:07
<
satacker[m] >
tags?
19:08
<
K-ballo >
it doesn't need to depend on anything
19:08
<
satacker[m] >
In our case?
19:08
<
K-ballo >
which case is that?
19:09
<
K-ballo >
a CPO is a customization point (interface, documentation) which happens to be an object
19:09
<
gnikunj[m] >
satacker: it’s template specialization.
19:09
<
K-ballo >
those are unlikely to be customization points, they're in a detail namespace
19:10
<
K-ballo >
plus they're not objects as far as I can tell
19:10
<
K-ballo >
am I looking at the right place?
19:11
<
HHN93 >
I had a doubt on why we use 2 template arguments
19:11
<
HHN93 >
when one suffices
19:11
<
satacker[m] >
gnikunj[m]: I agree
19:11
<
satacker[m] >
K-ballo: yeah, my whole concept is in shambles
19:13
<
K-ballo >
one does not suffice, both are needed, the second one will either be void or a "deduction failure"
19:15
<
satacker[m] >
K-ballo: any references for CPOs (cannot remember the paper numbers)
19:15
<
K-ballo >
there's a paper by eric on customizatoin point design
19:15
<
K-ballo >
don't konw the number
19:17
<
gonidelis[m] >
satacker: have you seen hartmut's lecture?
19:17
<
satacker[m] >
gonidelis[m]: Ofc
19:18
<
satacker[m] >
The names "tag" and the comment "Customization point for optimizing copy_n operations" made me believe that it is a CPO.
19:19
<
satacker[m] >
Now I need to investigate and make my information correct as to why it is not a CPO
19:19
<
K-ballo >
the O part is easy :)
19:20
<
gonidelis[m] >
pretty sure it's tag dispatching
19:20
<
K-ballo >
tag dispatching doesn't involve sfinae, it'd be weird to mix it with Enable
19:21
<
satacker[m] >
tag dispatching is just overloading iirc?
19:22
<
K-ballo >
you can have type based tag dispatching too
19:22
<
K-ballo >
where the tag is used to select some specific specialization
19:22
<
gonidelis[m] >
that's the only tag dispatching that i know
19:23
<
K-ballo >
void impl(some_tag); / template struct impl<some_tag> {...};
19:23
<
K-ballo >
template <>
19:24
<
K-ballo >
the tag is usde to pick which impl to use
19:24
<
gonidelis[m] >
not what you are referring to?
19:24
<
gonidelis[m] >
" type based tag dispatching ". tag is a type
19:25
<
K-ballo >
only one of those two is overloading
19:26
<
gonidelis[m] >
meta tag dispatching
19:26
<
K-ballo >
void impl is a function, struct impl is a type
19:26
<
gonidelis[m] >
whynot
19:28
<
satacker[m] >
<satacker[m]> "Now I need to investigate and..." <- Just plain SFINAE
19:31
<
K-ballo >
HHN93: yes, but that's notthe problem being solved by he class A example
19:32
<
K-ballo >
class A has a specialization for all floating point types, known and unknown, and a base implementatoin for everything else
19:32
<
K-ballo >
some_name has a specialization for just one well known type
19:33
<
HHN93 >
did we just follow what's customary ?
19:33
<
K-ballo >
something is wrong there's no line 388 in that link
19:33
<
HHN93 >
or is there any specific reason?
19:34
<
satacker[m] >
The file is of 351 lines?
19:35
<
HHN93 >
my bad got link from local copy of file
19:35
<
K-ballo >
if it truly is a customization point (sure is an odd one), it is expected to be specialized from outside the file
19:35
<
K-ballo >
enabling sfinae on customization points is just good practice (pre concepts at least)
19:36
<
K-ballo >
since the customizatoin may need to sfinae
19:37
<
K-ballo >
these types in particular look very confused about themselves
19:59
<
satacker[m] >
<K-ballo> "if it truly is a customization..." <- If?
20:06
<
K-ballo >
for those to reasonably be customization points, the set of pointer category tags would have to be open
20:07
<
K-ballo >
that sounds highly unlikely
20:07
<
K-ballo >
customization points come into play when the types involved are user defined
20:08
<
K-ballo >
can there reasonably be a user defined pointer category tag?
20:09
<
K-ballo >
if the set of tags is closed, those are just type-based tag dispatching with confused sfinae support
20:32
strackar has joined #ste||ar
20:32
strackar has quit [Client Quit]
21:30
HHN93 has quit [Quit: Client closed]
21:41
HHN93 has joined #ste||ar
21:41
HHN93 has quit [Client Quit]
23:20
tufei__ has quit [Remote host closed the connection]
23:21
tufei__ has joined #ste||ar