我正在使用QueryPerformanceCounter在我的应用程序中进行一些计时.但是,运行几天后应用程序似乎停止正常运行.如果我只是重启应用程序,它会再次开始工作.这让我相信我的计时码有溢出问题.
// Author: Ryan M. Geiss
// http://www.geisswerks.com/ryan/FAQS/timing.html
class timer
{
public:
timer()
{
QueryPerformanceFrequency(&freq_);
QueryPerformanceCounter(&time_);
}
void tick(double interval)
{
LARGE_INTEGER t;
QueryPerformanceCounter(&t);
if (time_.QuadPart != 0)
{
int ticks_to_wait = static_cast<int>(static_cast<double>(freq_.QuadPart) * interval);
int done = 0;
do
{
QueryPerformanceCounter(&t);
int ticks_passed = static_cast<int>(static_cast<__int64>(t.QuadPart) - static_cast<__int64>(time_.QuadPart));
int ticks_left = ticks_to_wait - ticks_passed;
if (t.QuadPart < time_.QuadPart) // time wrap
done = 1;
if (ticks_passed >= ticks_to_wait)
done = 1;
if (!done)
{
// if > 0.002s left, do …Run Code Online (Sandbox Code Playgroud) 我正在写一个着色器,它偶尔会在2D地图上产生一个亮点.("闪光"只是一个颜色较亮的像素.)我希望闪闪发光的块随机均匀地分布在(无限)平面上,但我希望闪闪发光是基于X和Y坐标的确定性.我尝试从坐标创建种子并Random从该种子创建Java ,但到目前为止,我的尝试导致了可识别的模式.此功能将被频繁调用(数百万次),因此性能至关重要.
我首先尝试模仿我的hashCode()实现,它使用素数乘数来避免冲突.这导致地图上出现明显的伤口,其中一系列点共享相同的种子.
然后,我尝试通过连接坐标来创建种子,如下所示:
long seed = ((long) x << 32) | (long) y;
Random rand = new Random(seed);
Run Code Online (Sandbox Code Playgroud)
这似乎也导致了图案化数据,尽管模式并不那么明显.选定的坐标以线条显示,根本不均匀分布.
我避免使用MD5或其他加密哈希算法,因为我害怕性能影响.
一些编程问题不需要图灵机的全部功能来解决.它们可以用更少的功率解决.我正在寻找功能较弱的编程语言.
是否存在仅限于支持这些功能的高级编程语言:
具有将值推入堆栈并将值从堆栈中弹出的操作的堆栈.
有限状态机(FSM)用于输入值,从状态移动到状态,与堆栈交互以及输出结果.
我意识到我可以使用Java或C或Python(等)并通过编写仅使用堆栈和FSM的程序来约束语言.但是,我正在寻找一种只具备这些功能的编程语言,而不是更多.
换句话说,我不想使用图灵完整的编程语言来解决只需要确定性下推自动机功能的问题.我想使用只具有确定性下推自动机功能的编程语言.
stack deterministic state-machine turing-complete pushdown-automaton
我正在使用 LibGDX 和 Box2D 编写一个 Android 游戏。我计划为其添加回合制多人游戏功能。
现在,如果我在两个客户端上以相同的时间步长以相同的速率步进 Box2D 世界,并使用完全相同的初始参数在两个客户端上开始模拟,当模拟结束时,两个模拟的最终状态是否完全相同相同?换句话说,Box2D 模拟是完全确定的吗?
如果不是,那么这意味着每次模拟结束时,作为主机的一个客户端将不得不告诉另一个丢弃其最终模拟的结果并使用它来代替。
我正在寻找在 GCC 或 Clang 的编译过程中触发非确定性的代码示例。
一个突出的例子是__DATE__宏的使用。
GCC 和 Clang 有大量编译器标志来控制编译器中非确定性操作的结果,例如。-frandom-seed和-fno-guess-branch-probability
有没有受这些标志影响的小例子?
更准确地说:
$ c++ main.cpp -o main && shasum main
aabbccddee
$ c++ main.cpp -o main && shasum main
eeddccbbaa
Run Code Online (Sandbox Code Playgroud)
我正在寻找无宏代码示例,其中多次运行编译器会导致不同的输出,但可以通过例如修复-frandom-seed
编辑:
相关:来自gcc文档:
-fno-guess-branch-probability:
Sometimes gcc will opt to use a randomized model to guess branch probabilities,
when none are available from either profiling feedback (-fprofile-arcs)
or __builtin_expect.
This means that different runs of the compiler on the …Run Code Online (Sandbox Code Playgroud) 该文档指出:
确定性模式可能会对性能产生影响,具体取决于您的模型。
我的问题是,这里的表现是什么意思。处理速度或模型质量(即最小损失)?换句话说,当设置手动种子并以确定性方式执行模型时,这会导致更长的训练时间,直到找到最小的损失,还是该最小损失会比非确定性模型更糟?
为了完整起见,我通过设置所有这些属性来手动使模型具有确定性:
def set_seed(seed):
torch.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
np.random.seed(seed)
random.seed(seed)
os.environ['PYTHONHASHSEED'] = str(seed)
Run Code Online (Sandbox Code Playgroud) 即,该算法是否总是返回相同的结果(对于一维数字列表)?Fisher 的自然中断( Jenks 的O(k n log(n)) 优化)是确定性的吗?
我想知道是否可以保证 unordered_map 的顺序在所有 CPU、线程等中始终相同。
我意识到特定顺序本身可能没有明显的模式(因此,“无序”映射),但是如果我在另一台机器上运行我的进程,或者连续多次运行,或者在不同的线程上运行,插入项目的顺序将始终如果哈希函数和插入顺序保持不变,是否会相同?换句话说,如果我的代码不改变,我的进程的每次执行都会导致映射的元素处于相同的顺序吗?
我已经运行了一些测试,插入后的项目顺序似乎每次都是相同的,但这可能只是侥幸,而且我只有这台机器可以测试。我需要知道顺序是否会受到任何其他因素的影响,例如 CPU/内存架构、操作系统(Windows 8 与 Windows 10)等。
我们有一个自定义的强化学习环境,在其中我们从稳定的基线运行 PPO 代理来解决多动作选择问题。代理按预期进行学习,但当我们评估从训练有素的代理学到的策略时,当我们设置时,代理会获得更差的结果(即奖励降低约 50% deterministic=True)deterministic=False。这项研究的目标是为现实世界的问题找到新的政策,因此最好找到一种确定性的政策,因为这对大多数人来说更容易理解……而且更多的随机行动会带来更好的效果,这似乎违反直觉。表现。
文档只说“确定性(bool)\xe2\x80\x93是否返回确定性动作。\n我理解这意味着动作是从具有一定随机性的学习分布中得出的(即一个特定状态可以导致几种不同的动作)并且意味着这些动作完全基于学习的策略(即一种特定的状态总是导致一种特定的动作)。deterministic=Falsedeterministic=True
问题是当性能比deterministic=Falsewith更好时,它对代理和/或环境有何影响deterministic=True?
policy deterministic reinforcement-learning stable-baselines
鉴于我认为是相同的 Swift UUID,我hashValue在后续运行代码时得到了不同的 s。在单次运行中它是一致的。
例如:
func UUIDTest() {
let uuid = UUID(uuidString: "00000000-0000-0000-0000-000000000001")
let h = uuid.hashValue
print("\(String(describing: uuid)) -> \(h)")
/*
Run #1:
Optional(00000000-0000-0000-0000-000000000001) -> 8072320274727128679
Run #2:
Optional(00000000-0000-0000-0000-000000000001) -> -2566074080105686496
*/
}
Run Code Online (Sandbox Code Playgroud)
文档并未明确说明哈希值是否严格属于 UUID 的函数,或者是否还有其他成分。
对于 Hashable 是否有一些我还没有的理解?
deterministic ×10
c++ ×3
hash ×2
algorithm ×1
android ×1
box2d ×1
clang ×1
coordinates ×1
dictionary ×1
gcc ×1
java ×1
multiplayer ×1
performance ×1
policy ×1
python ×1
pytorch ×1
seed ×1
stack ×1
swift ×1
timing ×1
unordered ×1
uuid ×1
winapi ×1