小编Tia*_*ian的帖子

Pytest 可以只实例化一个类对象来测试它的所有方法吗?

我认为这应该是一个非常常见的场景,例如,如果您有一个类和一些方法。如果你想为它们编写单元测试,比如 test_method_1、test_method_2、... test_method_n,我不想为这些测试函数中的每一个实例化类对象,它可能是多余的或低效的。但是,我阅读了 Pytest 的文档,在我看来,例如使用夹具装饰,虽然它似乎只编写了一次类实例化,但实际上每次传递给新的测试函数时都会调用该实例化。有没有办法不这样做,而是我只创建一次类对象,并且所有测试都在这个对象中完成?

python pytest

3
推荐指数
1
解决办法
1828
查看次数

正确进行多个CUDA块同步的方法

我喜欢对多个块进行 CUDA 同步。它并不是对于 __syncthreads() 可以轻松处理的每个块。

我看到关于这个主题的现有讨论,例如cuda 块同步,我喜欢 @johan 提出的简单解决方案, https: //stackoverflow.com/a/67252761/3188690,本质上它使用 64 位计数器跟踪同步块。

但是,我编写了以下代码试图完成类似的工作,但遇到了问题。这里我使用这个术语environment是为了使wkNumberEnvs这个环境中的块能够同步。它有一个柜台。我曾经atomicAdd()计算有多少块已经自己同步,一旦同步块的数量 == wkBlocksPerEnv,我就知道所有块都完成了同步,并且可以自由运行。然而,它有一个奇怪的结果,我不确定为什么。

问题就出在这个while循环上。由于所有块的第一个线程都在执行atomicAdd,因此有一个while循环来检查,直到条件满足。但我发现有些块会陷入无限循环,我不确定为什么最终无法满足条件?如果我在 或 中打印一些消息*** I can print here 1*** I can print here 2则不会出现无限循环,一切都很完美。我没有看到明显的东西。

const int wkBlocksPerEnv = 2;

__device__ int env_sync_block_count[wkNumberEnvs];

__device__ void syncthreads_for_env(){
    // sync threads for each block so all threads in this block finished the previous tasks
    __syncthreads();

    // sync threads for wkBlocksPerEnv blocks for each environment …
Run Code Online (Sandbox Code Playgroud)

synchronization cuda block

0
推荐指数
1
解决办法
1762
查看次数

标签 统计

block ×1

cuda ×1

pytest ×1

python ×1

synchronization ×1