“如何編寫並行程式設計的偽代碼?特別是如何區分局部變數和共享變數?如何表示分散、聚集、歸約、廣播和點對點通訊等操作?有一些標準嗎?那?”
請注意原來的問題被問到了這裡但它仍然沒有一個好的可接受的答案。
重新闡述其他問題,總結並使事情變得簡單:有沒有辦法用偽代碼來表示“並行完成所有這些事情「?
我正在使用algorithm2e
帶有TeXStudio
.如何使用它們排版並行程式碼?
答案1
經過一些網路研究,我意識到仍然不存在一種「標準」。所以這是我個人的解決方案,使用algorithm2e
:
\usepackage[linesnumbered,ruled,vlined]{algorithm2e}
...
\begin{algorithm}
\DontPrintSemicolon
\SetKwBlock{DoParallel}{do in parallel}{end}
\KwIn{Some inputs}
\KwOut{The ouput}
\DoParallel{
Compute a \;
Compute b \;
Compute c \;
}
\DoParallel{
a1\;
b1\;
c1\;
}
\Return{the solution}\;
\caption{Parallel Algo}
\label{algo:parallelAlgorithm}
\end{algorithm}
結果是:
它基於使用表達式定義新命令\SetKwBlock
。可以找到該包的手冊這裡。另外,我剛剛在 StackOverflow 上的類似問題中添加了幾乎相同的解決方案。答案和問題都可以找到這裡。
使用定義關鍵字的策略來用您喜歡的細節描述您的演算法,這應該總是可能的。考慮到:
- 更多細節→您將更接近您的程式語言。
- 更少的細節→更多它可以被視為偽代碼。
結論:這始終是一個權衡的問題:您決定限制在哪裡(考慮到您提到的目標群體)。
期刊論文中也使用了相同的策略(例如,請參閱演算法 3 和 4)這篇 IEEE 期刊論文)。