[LLVMdev] [RFC][PATCH][OPENCL] synchronization scopes redux
Sameer Sahasrabuddhe
sameer.sahasrabuddhe at amd.com
Tue Jan 13 22:27:14 PST 2015
Ping! We need to close on whether everyone is convinced that symbolic
memory scopes have a significant advantage over opaque numbers. Either
of them will be examined by optimizations using a target-implemented
API. I personally don't think that readability in the LLVM text format
is worth the effort, especially given that address spaces work well
enough with opaque numbers.
Sameer.
On 1/9/2015 10:18 AM, Sameer Sahasrabuddhe wrote:
>
> On 1/9/2015 4:14 AM, Chandler Carruth wrote:
>> On Wed, Jan 7, 2015 at 8:03 PM, Sahasrabuddhe, Sameer
>> <sameer.sahasrabuddhe at amd.com <mailto:sameer.sahasrabuddhe at amd.com>>
>> wrote:
>>
>> Here's what this looks like to me:
>>
>> 1. LLVM text format will use string symbols for memory scopes,
>> and not numbers. The set of strings is target defined, but
>> "singlethread" and "system" are reserved and have a
>> well-known meaning.
>>
>> 2. "The keyword informally known as system" represents the set
>> of all threads that could possibly synchronize on the
>> location being accessed by the current atomic instruction.
>> These threads could be local, remote, executing on different
>> agents, or whatever else is admissible on that particular
>> platform. We still need to agree on the keyword to be used.
>>
>> 3. The bitcode will store memory scopes as unsigned integers,
>> since that is the easiest way to maintain compatibility. The
>> values 0 and 1 are special. All other values are meaningful
>> only within that bc file. The file will also provide a map
>> from unsigned integers to string symbols which should be used
>> to interpret all the non-standard integers.
>> 1. The map must not include 0 and 1, since the reader will
>> internally map them to singlethread" and "system"
>> respectively.
>> 2. If the map is empty or non-existent, then all non-zero
>> values will be mapped to "system", which is the current
>> behaviour.
>>
>> 4. The in-memory structure for an atomic instruction will
>> represent memory scope as a reference to a uniqued strings.
>> This eliminates any notion of performing arithmetic on the
>> scope indicator, or to write code that is sensitive to its
>> numerical value.
>>
>> 5. Behaviour is undefined if a symbolic scope used in the IR is
>> not supported by the target. This is true for "singlethread"
>> and "system" also, since some targets may not have those scopes.
>>
>> Is this correct?
>>
>> Generally, yes.
>>
>> Regarding the specific way of using strings, see the email I just
>> sent about metadata being used poorly, this is a place where we might
>> use metadata to encode the string, or we might do something more
>> direct as you propose. I think it would be good to do something like
>> what I propose in that thread to have nicely uniqued opaque string
>> entities in the IR, and then use them here for marking scopes.
>
> So I see the following large chunks of work that are difficult to isolate:
>
> 1. Modifying the bitcode and assembly readers and writers.
> 2. Updating Clang (simultaneously?) to generate the new kind of IR
> with symbol/number mappings.
> 3. Updating language bindings to deal with the new IR.
>
> As far as I can see, the following can be decoupled from the above,
> but they are closely tied to each other:
>
> 4. Implementing uniqued opaque strings in the most desirable way, and
> using it for the in-memory format.
> 5. Creating an interface to convert the opaque symbols into suitable
> target-specific DAG nodes.
>
> All this work, just to ensure readability in the LLVM text format. I
> am not entirely convinced that it is worth it, when opaque integers
> can get the job done just like address spaces ... are you?
>
>> But how does this work in the SelectionDAG? Also, what will this
>> look like in TableGen files?
>>
>> Not sure what you mean here? I haven't looked at implementing it, but
>> from the DAG down you should get to collapse this rapidly toward
>> target-specific nodes / structures / representations?
>
> Sorry, that was just me being lazy and not reading up on the
> SelectionDAG. I expect that we will translate the the symbols into
> integer TargetConstant SDNodes ... do you see the need to be more
> flexible than that?
>
> Sameer.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150114/ee2ad0ed/attachment.html>
More information about the llvm-dev
mailing list