我正在尝试并行化光线跟踪器.这意味着我有一个很长的小计算列表.vanilla程序在67.98秒内在特定场景上运行,总内存使用量为13 MB,生产率为99.2%.
在我的第一次尝试中,我使用parBuffer了缓冲区大小为50 的并行策略.我之所以选择parBuffer它是因为它只是在消耗火花的情况下遍历列表,并且不会强制列表的主干parList,这会占用大量内存因为清单很长.有了-N2它,它运行时间为100.46秒,总内存使用量为14 MB,生产率为97.8%.火花信息是:SPARKS: 480000 (476469 converted, 0 overflowed, 0 dud, 161 GC'd, 3370 fizzled)
大部分失败的火花表明火花的粒度太小,所以接下来我尝试使用策略parListChunk,将列表分成块并为每个块创建一个火花.我得到了最好的结果,大小为0.25 * imageWidth.该程序运行时间为93.43秒,总内存使用量为236 MB,生产率为97.3%.火花信息是:SPARKS: 2400 (2400 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled).我相信更大的内存使用是因为parListChunk强制列表的主干.
然后我试着编写自己的策略,懒洋洋地将列表分成块,然后传递块parBuffer并连接结果.
concat $ withStrategy (parBuffer 40 rdeepseq) (chunksOf 100 (map colorPixel pixels))
Run Code Online (Sandbox Code Playgroud)
这运行时间为95.99秒,总内存使用量为22MB,生产率为98.8%.在所有火花都被转换并且内存使用率低得多的意义上,这是成功的,但速度没有提高.以下是事件日志配置文件的一部分图像.
正如您所看到的,由于堆溢出,线程正在停止.我尝试添加+RTS -M1G,它将默认堆大小一直增加到1Gb.结果没有改变.我读到如果堆栈溢出,Haskell主线程将使用堆中的内存,所以我也尝试增加默认堆栈大小,+RTS -M1G -K1G但这也没有影响.
还有什么我可以尝试的吗?如果需要,我可以发布更详细的内存使用情况或事件日志的分析信息,我没有全部包含它,因为它是很多信息,我不认为所有这些都是必要的.
编辑:我正在阅读有关Haskell RTS多核支持的内容,并且它讨论了每个内核都有一个HEC(Haskell执行上下文).除了别的以外,每个HEC都包含一个分配区域(它是单个共享堆的一部分).每当HEC的分配区域耗尽时,必须执行垃圾收集.似乎是一个控制它的RTS选项,-A.我试过-A32M,但没有看到任何区别.
EDIT2: 这是一个专门针对这个问题的github仓库的链接 …
domain使用跨站点请求添加提交时,我无法设置cookie .我试图通过jquery ajax调用请求来实现这一点.
是否有可能让它在除Firefox之外的其他浏览器中工作?
一些请求标题:
Accept:application/json, text/javascript, */*; q=0.01
Content-Length:55
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Host:localhost:53862
Origin:http://localhost:54265
Referer:http://localhost:54265/
Run Code Online (Sandbox Code Playgroud)
响应标题:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:x-requested-with, origin, content-type, accept, Proxy-Connection
Access-Control-Allow-Methods:GET,POST,PUT,OPTIONS, DELETE
Access-Control-Allow-Origin:http://localhost:54265
Set-Cookie:Auth=l_hash=123456&user=xyzl&remember_me=false; expires=Fri, 18 Jan 2013 13:42:10 GMT; domain=localhost; path=/
Run Code Online (Sandbox Code Playgroud)
码:
$.ajax({
type: "PUT",
url: apiHost + "api/account/login/",
data: $("#loginBarForm").serialize(),
dataType: "json",
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
crossDomain: true,
xhrFields: {
withCredentials: true
},
});
Run Code Online (Sandbox Code Playgroud)
在Firefox中一切都很好.Chrome未设置Cookie.仅当域字段被删除时,所有浏览器都在运行.我可以看到在下一个请求中(在设置cookie之后)cookie出现在标题中.响应设置cookie后的firefox请求示例(当响应有域字段时):
Cookie: Auth=l_hash=123456&user=xyz&remember_me=false
Run Code Online (Sandbox Code Playgroud) 为什么 WHATWG 不允许 HTML 4 和 HTML5 中的嵌套表单?
编辑:问题最初在如何克服 html 表单嵌套限制?
简而言之,作者说: 您正在制作一个博客应用程序,并且您有一个表单,其中包含一些用于创建新帖子的字段和一个带有“操作”的工具栏,例如“保存”、“删除”、“取消”……唯一的问题是按“删除”将提交服务器上的所有表单字段,即使此操作唯一需要的是带有 post-id 的隐藏输入。
因此,这是一个关于表单中多个按钮的优雅解决方案(没有 JavaScript)的问题,用于提交不同的输入字段集(例如多个表单可能允许)并将UI 从用户角度排列为单个实体(“表单”) .
来自该讨论的评论:几乎不可能将元素的屏幕位置与其在文档中的位置完全分开。
编辑:我发现有趣的笔记http://anderwald.info/internet/nesting-form-tags-in-xhtml/ - (X)HTML 不允许嵌套表单,如“表单 > 表单”,但允许“表单 > 字段集 > 表单” ”,W3 验证器说它是有效的,但是浏览器存在这种嵌套的错误。
我有一个 WPF C# 应用程序。
我正在使用 Xceeed.wpf 工具包
在伪代码中,我的函数将:
实际上,在 REST API 调用完成之前,BusyIndicator 不会显示。有时它确实会显示,但“品牌”效果并不流畅。
我尝试了几种方法,这是我的最新尝试:
// raise event to invoke method call on main UI page
// event raised here
Task.Run(() =>
{
// makes API call
busyIndicator.IsBusy = false;
);
public void ShowBusy()
{
this.InvokeOnMainThread(() =>
{
busyIndicator.IsBusy = true;
});
}
public static void InvokeOnMainThread(this Control control, Action method)
{
if (!control.Dispatcher.CheckAccess())
{ Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Normal, method);
return;
}
method();
}
Run Code Online (Sandbox Code Playgroud)
标记:
<xctk:BusyIndicator Name="busyIndicator" …Run Code Online (Sandbox Code Playgroud) 我在数据库中有很多类别.
这是类别实体
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity
* @ORM\Table(name="categories")
*/
class Category
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\ManyToOne(targetEntity="Category")
*/
protected $rootCategory;
/**
* @ORM\Column(type="text")
*/
protected $name;
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Set name
*
* @param string $name
*
* @return Category
*/
public function setName($name)
{
$this->name = $name; …Run Code Online (Sandbox Code Playgroud) 为什么这会给我一个DATETIME的结果?
Select DATEADD(yy,116, 0)
Run Code Online (Sandbox Code Playgroud)
输出:
2016-01-01 00:00:00.000
Run Code Online (Sandbox Code Playgroud)
还有这个
Select DATEADD(yy,116 +1, -1)
Run Code Online (Sandbox Code Playgroud)
退还给我一年中的最后一天?
这背后的诀窍是什么?我只是玩它,但不知道它是怎么来的?