gpt4 book ai didi

c++ - 为什么连续开始的 Dispatches 需要不同的时间?

转载 作者:行者123 更新时间:2023-11-28 07:40:02 24 4
gpt4 key购买 nike

我有这个程序:

        for (int i = 0; i < STEPS; ++i)
{
context->CSSetShader(computeShader, NULL, 0);

ID3D11UnorderedAccessView *aUAViews[1] = {bufferOut_UAV};
context->CSSetUnorderedAccessViews(0, 1, aUAViews, NULL);

context->Dispatch(32, 32, 1);
in[i] = t.GetTime();

if (i == STEPS / 2)
{
context->End(pEventQuery);
while( context->GetData( pEventQuery, NULL, 0, 0 ) == S_FALSE ) {}
}
}

double out = t.GetTime();

context->End(pEventQuery);
while( context->GetData( pEventQuery, NULL, 0, 0 ) == S_FALSE ) {}

第一个 while 迭代只持续 26 ms,而第二个 46 ms?

以防万一着色器:

RWStructuredBuffer<float> Output : register(u0);

[numthreads(GROUP_SIZE_X, GROUP_SIZE_Y, 1)]
void arrayTest(uint3 DTid : SV_DispatchThreadID)
{
float i = DTid.x * 32 + DTid.y;
Output[i] = 0;
for (int k = 0; k < 100; ++k)
{
Output[i] += sqrt(i + k);
}
}

但我不认为每次开始都需要不同的时间。

有趣 如果我注释掉行“if (i == STEPS/2)”,两半花费几乎相同的时间会怎样。

编辑:据我目前所知,这是因为兑现

最佳答案

最有可能的候选者(在我看来)是操作系统中线程之间的上下文切换。耗时较长的操作更有可能在中间的某个时间被操作系统暂停。

在任何给定时刻,您的程序并不是唯一在进行的事情,有时操作系统会让您暂停,而其他事情会占用一些处理时间。

关于c++ - 为什么连续开始的 Dispatches 需要不同的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16019266/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com