Talk:Predication (computer architecture)
|This is the talk page for discussing improvements to the Predication (computer architecture) article.
This is not a forum for general discussion of the article's subject.
|WikiProject Computer science||(Rated Start-class, Low-importance)|
The binary GCD algorithm in ARM assembly is probably appropriate on this page (but not on the page it references). I'm not sure how I copy the code from the latest page that had the code: http://en.wikipedia.org/w/index.php?title=Binary_GCD_algorithm&oldid=468833079 — Preceding unsigned comment added by 220.127.116.11 (talk) 20:33, 27 March 2013 (UTC)
There is a problem with the first sentence,
"Because computer programs respond to a user, there is no way around the fact that portions of a program need to be executed conditionally."
A program which computes a formula from user input may not need to branch, and conversely a program with complex logic which receives no direct inputs from a user (paging in the OS) may need to branch.
I would like to ask whether this article should not be called "branch prediction". This term seems to be used more frequently The reverse term "misprediction" seems to be uncontested Semantically, "branch predication" seems to be something related to a predicate rather than to prediction.
- It should not be called "branch prediction". As the hatnote in the article says, branch predication is not to be confused with a branch predictor; it should also not be confused with what a branch predictor does, namely branch prediction. So, yes, "branch predication" is something related to a predicate rather than to prediction, which is why this article is called "branch predication", not "branch prediction".
- "Branch prediction" is used more frequently than "branch predication" or just "predication" because branch prediction is done more frequently than predication - most general-purpose processors, and many embedded processors, do branch prediction, but only some instruction sets have predicated non-branch instructions, and, for x86, at least, most instructions aren't predicated.
- I'm not sure why this article's title is "branch predication"; the instructions that are typically made conditional are non-branch instructions, such as moves (in the case of x86's CMOVE, as introduced in, as I remember, the Pentium Pro) or other non-branch instructions (as on 32-bit ARM). Guy Harris (talk) 09:48, 22 April 2014 (UTC)
- I agree that the topic discussed in this article is different from the topic discussed in the branch predictor article, and so they should not be merged. However, I am just as mystified as Guy Harris as to why this article is titled "branch predication". My understanding is that the topic discussed in this article is far more commonly called "conditional execution", as in the ARM architecture#Conditional execution, addressing mode#Conditional execution, FX8010, EVEX prefix, Electrologica X1, etc. articles. So I suggest moving this article to "conditional execution" or "conditional instruction". --DavidCary (talk) 17:11, 10 December 2015 (UTC)
- The difference is:
- One article talks about extra hardware used on some processors to guess (predict) ahead of time which way a conditional branch instruction will go, and speculatively execute a few instructions past that point, and then later after the branch condition has resolved to either accept or cancel those speculatively-executed instructions. That hardware ignores non-branch instructions. That kind of hardware in the microarchitecture could be used to speed up any instruction set.
- The other article talks about a feature of a few instruction sets -- such instruction sets such that every instruction (not only branch instructions) is conditional. That feature of a instruction set architecture can speed up the execution of certain programs, but it does not apply to most instruction sets. --DavidCary (talk) 06:17, 15 December 2015 (UTC)
According to the Intel® Itanium® Architecture Software Developer’s Manual Volume 1: Application Architecture
In section 18.104.22.168
This code takes 18 cycles to complete if p2 is true and five cycles if p2 is false. When analyzing such cases, consider execution weights, branch misprediction probabilities, and prediction costs along each path.
The execution times decreases if the predicate is false.
This is also important for SIMD. It might be better to fill execution units with data not to be processed than to realign and reschedule. Mathematically speaking not branching around multiplying with one or adding zero. --Moritzgedig (talk) 11:27, 28 November 2014 (UTC)
Wikipedia redirects Predication to Predicate, which is reasonable since predication in the context of computer architecture isn't the most common meaning of "predication". But to disambiguate predication in the context of computer architect by calling it "branch predication" is very problematic.
Firstly, it's not called branch predication. The references in this article don't call it branch predication. The body of computer architecture knowledge doesn't call it branch predication (for example, the IMPACT research, which introduced hyperblock scheduling for predicated architectures and quantified the numerous effects of predication, amongst other things, doesn't call predication "branch predication"). The only instances of branch predication that I could find were a dozen or so references in less-relevant conference proceedings and journals via Google Books and Scholar. I don't think these establish "branch predication" as an accepted synonym of predication, because it doesn't matter how well-established, or standardized the terminology in any field is, there will always be a minority of non-conformists for whatever reason. I couldn't find any use of "branch predication" with a full-text search in the ACM Digital Library's Guide to Computing Literature, which covers the vast majority of the important computer architecture and microarchitecture research (though there were many false results in the results). The lack of usage of the term "branch predication" in the literature makes it a neologism invented at Wikipedia for the sole purpose of disambiguation. This is wrong because Wikipedia is an encyclopedia, and encyclopedias are intrinsically descriptive; they don't intentionally or unintentionally influence terminology.
Secondly, "branch predication" can be easily confused with "branch prediction" and "branch predictor". This happened recently: . Also, given the first problem with the current title, it makes it difficult for people to locate the article about this subject; it took me a while to find it because I expected it to be called a number of things, but never "branch predication". Thirdly, "branch predication" has no semantic sense. An instruction whose execution is controlled by a predicate is said to be guarded by or predicated. What does "branch predication" mean within the terminology of predication?
Because both of my attempts to move this article to Predication (computer architecture) were reverted without much of an explanation, perhaps Predicated execution is more acceptable to Wikipedia? It is used extensively in the literature, judging from search results in the Guide to Computing Literature. 50504F (talk) 04:27, 31 March 2017 (UTC)
Yes, this article should be called "predication". "Branch predication" is not a well-known term, and it's very confusing as a title given that "branch prediction" IS such a well-known term. 2601:647:4D03:3CA7:755B:43F4:A0B9:1EDD (talk) 09:03, 1 June 2017 (UTC)