Recently when I viewed one sass code disassembled by executable, it has one instruction
RED.E.ADD.F64.RN.STRONG.GPU [UR4], R2 ;. The
STRONG is not documented in the Binary Utilities guide.
.strong also doesn’t exists in PTX guide
strong in the PTX doc, it has one definition of “strong operation” and based on it, the significant term “morally strong” is defined. The term “morally strong” is used many times at the other term definitions.
From the table in the PTX doc, strong operation contains many other small operations. The synchronizing operation not contains the
.relaxed which is same as c++
.weakqualifier indicates a memory instruction with no synchronization.
morally strong relation definition:
Two operations are said to be morally strong relative to each other if they satisfy all of the following conditions:
- The operations are related in program order (i.e, they are both executed by the same thread), or each operation is strong and specifies a scope that includes the thread executing the other operation.
- Both operations are performed via the same proxy.
- If both are memory operations, then they overlap completely.
Here is my understanding, 1st item means these operations needs relations instead of in different CTAs. 2nd item avoids mixing texture related methods and generic methods.
The doc states:
The axioms in the memory consistency model do not apply if a PTX program contains one or more mixed-size data-races. But these axioms are sufficient to describe the behavior of a PTX program with only uniform-size data-races.
3rd is to exclude “mixed-size data-races” which “memory consistency model” doesn’t take account in.
What is the
.STRONG meaning? Is it related with strong operation although it doesn’t have memory fence and related suffixes?
If they are related, then what is the “strong” meaning in the strong operation? What is the purpose to define it and define “morally strong”? Could someone give examples that make these category definition reasonable?