一些与OpenMP相关的文档指出,为了使循环被OpenMP处理,它必须是“可计数的”,为“可计数”的循环提供不同的定义:
slice
这确实是OpenMP的要求吗?还是需要OpenMP的特定编译器实现?
此外,以下循环是否可以-似乎不可数-由OpenMP并行化(请注意,问题是代码是否可以并行化,而不是是否有办法创建与此代码等效的并行方式)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="article"></div>
<script type="text/javascript">
$(document).ready(function(){
// extracting 100 length text content from stackoverflow page
$.ajax({
type: "GET",
url: "http://en.wikipedia.org/w/api.php?action=parse&format=json&prop=text§ion=0&page=Stack_Overflow&callback=?",
contentType: "application/json; charset=utf-8",
async: false,
dataType: "json",
success: function (data, textStatus, jqXHR) {
var markup = data.parse.text["*"];
var i = $('<div></div>').html(markup);
// remove links as they will not work
i.find('a').each(function() { $(this).replaceWith($(this).html()); });
// remove any references
i.find('sup').remove();
// remove cite error
i.find('.mw-ext-cite-error').remove();
// whole paragraphs
var paragraphs = $(i).find('p');
// convert whole paragraphs to string
var str = "";
for (var i = 0; i < paragraphs.length; ++i) {
str += paragraphs[i].textContent;
// break as soon as we get required length
if (str.length >= 100 ) break;
}
$('#article').html(str.slice(0,100));
},
error: function (errorMessage) {
}
});
});
</script>
答案 0 :(得分:0)
OpenMP标准要求规范循环形式
规范的形式允许在执行最外面的循环之前计算所有关联循环的迭代次数。对每个循环以整数类型执行计算。
这不完全限于整数,您可以在C语言中使用指针类型,而在C ++中可以使用逻辑上转换为整数的随机访问迭代器类型。
不得在for循环内修改循环变量(增量表达式除外)。因此,您的示例不是有效的OpenMP代码。
进一步的限制是循环测试必须是关系比较<
,<=
,>
或>=
-不是!=
或更复杂的东西。在整个循环中,增量必须恒定。您的示例中缺少的增量表达式也会使它无效。
您可以在OpenMP standard的2.6节中了解到这一点。