Psychtoolbox SYNCHRONIZATION FAILURE问题

参考:http://psychtoolbox.org/docs/SyncTrouble

 

写这篇文章的原因是自己遇见了这个问题,并且换了两台电脑都不行,有点烦了,决心把它弄清楚是怎么回事。因为我的主要是windows,所以这篇文章针对的也就是windows用户了。

 

报错内容一般都是:SYNCHRONIZATION FAILURE

 

首先我们需要理解Psychtoolbox是通过一帧一帧的刷新屏幕的方式来精准控制时间的(虽然这个控制肯定存在或多或少的误差,比如一般的是刷新频率是60帧,但是可能是60.002帧左右或少一点,关系不是太大),然后早期的CRT屏幕使用的是用电子束扫描屏幕的方式

https://img-blog.csdnimg.cn/20190228155105961.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3podV93ZW5kYW8=,size_16,color_FFFFFF,t_70

(图片来自https://blog.csdn.net/zhu_wendao/article/details/88028923

而需要刷新到屏幕上的内容存在显存里,这里就有一个一次刷新结束后到光束回到最上层,在这个时候Psychtoolbox会将需要呈现的下一张画面放进指定的显存地址中。为了达到画面不会等待写入过程中出现闪烁,所以使用双缓冲的方式,通过一前一后两个缓冲区的方式,需要的时候交换两者指针就可以实现“瞬间填充”避免了传输过程的延迟,所以匹配这个刷新率是很重要的,在正常工作的系统上,这种双缓冲交换在不到一微秒的时间内发生,与VBL开始同步,精度优于一微秒。新的显示屏虽然使用的不是这原理了,但是这一机制还是保留的。如果不同步就可能在刷新过程中出现内存内容被替换,导致画面撕裂(上面是上一帧的画面下面一半是下一帧的画面)。我们的垂直同步就是指,画面每一次刷新都会发送一次垂直同步信号(命名是因为老式屏幕的刷新方式),相当于红绿灯说可以交换内存了。

 

一般报这个错的原因都是,系统会提供一个刷新率和刷新间隔的数据,但是PTB也会区验证真实的刷新频率和刷新时间,如果验证超过三次(记得是三次)不能得到和系统提供的差不多的数据,就会报这个错。

 

根据官方的文档:(大部分是机翻,轻喷)

  1. 首先需要检查显卡的设置:
  1. “将内存交换同步到垂直回扫”选项设置为“应用程序控制”或“应用程序控制,默认为打开”。大概的类似的设置,原因应该也很明白,根据上面的原理部分;
  2. 确保“三重缓冲”设置已关闭,或者如果您可以选择某些“多重缓冲”设置,则将其设置为“双缓冲”或“等待1个视频刷新”或“交换每次刷新”。现在为了追求速度,大部分显卡有多个后缓冲区,这样会影响我们的精度,所以这里的设置使得保证我们的精度;
  3. 如果有“缓冲区交换模式”或“Bufferswap策略”选项,则应将其设置为“自动选择”或“页面翻转”或“交换缓冲区”。所谓的“复制缓冲区”或“Blitting”选项会导致性能降低和时序不准确;
  4. 在双/多显示器设置上,MS-Windows允许您为一个监视器分配“主监视器”或“主显示器”的角色。重要的是,用于刺激呈现的显示设备是“主要显示”,否则可能会出错。当然这一点在Psychtoolbox的代码中一般也会写出来(也就是screenNumber = max(screens););
  5. 多个显示器的话,请选择“扩展“的方式;
  6. 在双显示或多显示模式下的所有操作系统中,如果要在多个显示器上显示刺激,例如,对于双显示器上的双目立体显示,将两个显示器配置为完全相同的颜色深度,分辨率和刷新率是很重要的。
  7. 如果有某些选项,您可以选择“同步锁定模式”或“仅限同步锁定模式”,请选择或启用该选项。如果您进行双显示器刺激,未能配置此类双显示设置将导致大量计时问题或在其中一个显示器上撕裂伪影。它也可能导致时间安排失败。
  1. 驱动/硬件的问题

这个问题最简单的办法就是下最新的驱动试一试,可能是驱动版本过老导致的问题。

通常的嫌疑人是:病毒扫描程序,访问网络或硬盘的应用程序,iTunes等应用程序,系统软件更新......系统中的坏驱动程序或硬件干扰一般系统时序:这很难诊断。

至少在MS-Windows上,您可以从互联网上下载免费工具“dpclat.exe”(使用Google查找)。如果您运行它,它将告诉您系统时间是否存在潜在问题,并提供有关如何解决它们的提示。

当然也可以直接使用如下命令区跳过这个检测,

Screen(‘Preference’,’SkipSyncTests’, 1);这个命令会使得最后一次测得的间隔时间作为这个间隔时间(所以最大可能会有3s

 

 

最后就是软件干扰的问题了。卸载电脑上的杀毒之类的软件。

 

如果这些都不行,大概率你的是windows系统,我就是不折腾了直接换Linux系统上

发布了19 篇原创文章 · 获赞 2 · 访问量 5164

猜你喜欢

转载自blog.csdn.net/gunjiu4462/article/details/101020558
今日推荐