Loop unswitching (original) (raw)

About DBpedia

Размыкание цикла (англ. loop unswitching) состоит в вынесении условия за пределы цикла и дублирования тела цикла с помещением соответствующих вариантов в соответствующие ветви условия. Это позволяет улучшить производительность за счёт того, что современные процессоры могут выполнять векторные операции (данное оптимизирующее преобразование может быть выполнено совместно с размоткой цикла, а результатом размотки, в свою очередь, являются несколько операций в итерации, производимые над последовательными участками памяти, которые можно заменить одной векторной, если это позволяет архитектура; так, например, делается в ICC). Кроме того, это позволяет более эффективно выполнить цикл параллельно.

Property Value
dbo:abstract Loop unswitching is a compiler optimization. It moves a conditional inside a loop outside of it by duplicating the loop's body, and placing a version of it inside each of the if and else clauses of the conditional. This can improve the parallelization of the loop. Since modern processors can operate quickly on vectors, this improvement increases the speed of the program. Here is a simple example. Suppose we want to add the two arrays x and y and also do something depending on the variable w. We have the following C code: int i, w, x[1000], y[1000]; for (i = 0; i < 1000; i++) { x[i] += y[i]; if (w) y[i] = 0; } The conditional inside this loop makes it difficult to safely parallelize this loop. When we unswitch the loop, this becomes: int i, w, x[1000], y[1000]; if (w) { for (i = 0; i < 1000; i++) { x[i] += y[i]; y[i] = 0; } } else { for (i = 0; i < 1000; i++) { x[i] += y[i]; } } While the loop unswitching may double the amount of code written, each of these new loops may now be separately optimized. Loop unswitching was introduced in gcc in version 3.4. (en) Размыкание цикла (англ. loop unswitching) состоит в вынесении условия за пределы цикла и дублирования тела цикла с помещением соответствующих вариантов в соответствующие ветви условия. Это позволяет улучшить производительность за счёт того, что современные процессоры могут выполнять векторные операции (данное оптимизирующее преобразование может быть выполнено совместно с размоткой цикла, а результатом размотки, в свою очередь, являются несколько операций в итерации, производимые над последовательными участками памяти, которые можно заменить одной векторной, если это позволяет архитектура; так, например, делается в ICC). Кроме того, это позволяет более эффективно выполнить цикл параллельно. (ru) 迴圈判斷外提(英語:loop unswitching)是一種的方法。迴圈判斷外提將迴圈中的條件式移到迴圈之外,在「若」與「否則」式裡各放置一個原來迴圈的內容。這可以增進迴圈平行處理的可能性。 以下是一個簡單的例子。若程式碼想要將陣列 x、y 相加,並根據變數 w 做別的事,就有這種 C 的程式碼: int i, w, x[1000], y[1000]; for (i = 0; i < 1000; i++) { x[i] = x[i] + y[i]; if (w) y[i] = 0; } 因為有迴圈裡的條件式,要安全的平行處理這個迴圈變得很困難。若進行判斷外提,這個迴圈會變成: int i, w, x[1000], y[1000]; if (w) { for (i = 0; i < 1000; i++) { x[i] = x[i] + y[i]; y[i] = 0; } } else { for (i = 0; i < 1000; i++) { x[i] = x[i] + y[i]; } } 雖然迴圈外提會讓程式碼的量加倍,現在各個迴圈可以分別進行最佳化。 迴圈外提在版本 3.4 引入 GCC。 (zh)
dbo:wikiPageID 611622 (xsd:integer)
dbo:wikiPageLength 1795 (xsd:nonNegativeInteger)
dbo:wikiPageRevisionID 1052686556 (xsd:integer)
dbo:wikiPageWikiLink dbr:GNU_Compiler_Collection dbr:C_(programming_language) dbc:Compiler_optimizations dbr:Automatic_parallelization dbr:Compiler_optimization
dbp:wikiPageUsesTemplate dbt:Reflist dbt:Compiler_optimizations
dct:subject dbc:Compiler_optimizations
gold:hypernym dbr:Optimization
rdf:type dbo:Software yago:WikicatCompilerOptimizations yago:Abstraction100002137 yago:Act100030358 yago:Action100037396 yago:Change100191142 yago:ChangeOfState100199130 yago:Event100029378 yago:Improvement100248977 yago:Optimization100260051 yago:PsychologicalFeature100023100 yago:YagoPermanentlyLocatedEntity
rdfs:comment Размыкание цикла (англ. loop unswitching) состоит в вынесении условия за пределы цикла и дублирования тела цикла с помещением соответствующих вариантов в соответствующие ветви условия. Это позволяет улучшить производительность за счёт того, что современные процессоры могут выполнять векторные операции (данное оптимизирующее преобразование может быть выполнено совместно с размоткой цикла, а результатом размотки, в свою очередь, являются несколько операций в итерации, производимые над последовательными участками памяти, которые можно заменить одной векторной, если это позволяет архитектура; так, например, делается в ICC). Кроме того, это позволяет более эффективно выполнить цикл параллельно. (ru) 迴圈判斷外提(英語:loop unswitching)是一種的方法。迴圈判斷外提將迴圈中的條件式移到迴圈之外,在「若」與「否則」式裡各放置一個原來迴圈的內容。這可以增進迴圈平行處理的可能性。 以下是一個簡單的例子。若程式碼想要將陣列 x、y 相加,並根據變數 w 做別的事,就有這種 C 的程式碼: int i, w, x[1000], y[1000]; for (i = 0; i < 1000; i++) { x[i] = x[i] + y[i]; if (w) y[i] = 0; } 因為有迴圈裡的條件式,要安全的平行處理這個迴圈變得很困難。若進行判斷外提,這個迴圈會變成: int i, w, x[1000], y[1000]; if (w) { for (i = 0; i < 1000; i++) { x[i] = x[i] + y[i]; y[i] = 0; } } else { for (i = 0; i < 1000; i++) { x[i] = x[i] + y[i]; } } 雖然迴圈外提會讓程式碼的量加倍,現在各個迴圈可以分別進行最佳化。 迴圈外提在版本 3.4 引入 GCC。 (zh) Loop unswitching is a compiler optimization. It moves a conditional inside a loop outside of it by duplicating the loop's body, and placing a version of it inside each of the if and else clauses of the conditional. This can improve the parallelization of the loop. Since modern processors can operate quickly on vectors, this improvement increases the speed of the program. Here is a simple example. Suppose we want to add the two arrays x and y and also do something depending on the variable w. We have the following C code: Loop unswitching was introduced in gcc in version 3.4. (en)
rdfs:label Loop unswitching (en) Размыкание цикла (ru) 迴圈判斷外提 (zh)
owl:sameAs freebase:Loop unswitching yago-res:Loop unswitching wikidata:Loop unswitching dbpedia-ru:Loop unswitching dbpedia-zh:Loop unswitching https://global.dbpedia.org/id/3kAoF
prov:wasDerivedFrom wikipedia-en:Loop_unswitching?oldid=1052686556&ns=0
foaf:isPrimaryTopicOf wikipedia-en:Loop_unswitching
is dbo:wikiPageWikiLink of dbr:Enabling_transformation dbr:Optimizing_compiler dbr:Loop_optimization
is owl:differentFrom of dbr:Loop_unrolling
is foaf:primaryTopic of wikipedia-en:Loop_unswitching