OpenCL提供的本地内存类似于cuda中的共享内存。在cuda中,我们必须对共享内存使用volatile,因为如果您不将共享数组声明为volatile,那么编译器可以通过将它们放在寄存器中来自由地优化共享内存中的位置。但是如果线程之间进行通信,那将是一个问题。我的问题是,我们是否也必须在opencl内核中采用相同的方法(使用volatile)?如果是,我该怎么做?
答案 0 :(得分:2)
1)您不需要将<script type="text/javascript" src="~/Scripts/quicksearch.js"></script>
<script type="text/javascript">
$(function () {
//Add Header Row with TextBoxes.
var row = $("<TR />");
$("#WebGrid TR").eq(0).find("TH").each(function () {
row.append("<th><input type = 'text' /></th>");
});
$("#WebGrid TR").eq(0).after(row);
//Applying the QuickSearch Plugin to each TextBox.
$("#WebGrid TR").eq(1).find("INPUT").each(function (i) {
$(this).quicksearch("#WebGrid tr:not(:has(th))", {
'testQuery': function (query, txt, row) {
return $(row).children(":eq(" + i + ")").text().toLowerCase().indexOf(query[0].toLowerCase()) != -1;
}
});
});
});
</script>
与CUDA共享内存一起使用。 Here is a good answer explaining that.引用:
__ syncthreads()调用足以强制线程同步以及将共享内存中的所有寄存器缓存的值逐出回共享内存。
2)相当于$("#WebGrid TR").eq(0).find("TH").each(function (i) {
if ((i == 0) || (i == 5) || (i == 7) || (i == 10))
row.append("<th> </th>");
else
row.append("<th><input type = 'text' /></th>");
});
的OpenCL是volatile
。还有一个更弱的__syncthreads()
,(据称)与CUDA的barrier(CLK_LOCAL_MEM_FENCE)
或mem_fence
相当。