我试图用interprocess_mutex同managed_windows_shared_memory.在我的项目中,多个进程class A在以下代码中创建实例.
using namespace boost::interprocess;
class A
{
managed_windows_shared_memory* _shm;
interprocess_mutex* _mtx;
}
A::A()
{
_shm = new managed_windows_shared_memory{ open_or_create, "shm", 1024 };
_mtx = _shm->find_or_construct<interprocess_mutex>("mtx")();
}
A::~A()
{
delete _mtx;
delete _shm;
}
Run Code Online (Sandbox Code Playgroud)
我可以看到,它是安全的呼吁delete _shm;在~A(),因为managed_windows_shared_memory只有在使用它的每一个过程破坏了将被销毁managed_windows_shared_memory的对象,如写的文档.
不过,我不知道这是否是安全的呼吁delete _mtx;在~A().在文档中interprocess_mutex,没有提到它是否仍然被破坏,即使其他进程有对象引用它.
我搜索了这个,我猜我的选择是boost::interprocess::shared_ptr在这种情况下使用.我在这儿吗?这是我应该选择的吗?
我对nvidia GPU的任务调度有一些疑问.
(1)如果一个块(CTA)中的线程扭曲已经完成但是还有其他的warp运行,那么这个warp会等待其他的完成吗?换句话说,当所有线程都完成时,块中的所有线程(CTA)都会释放它们的资源,这样可以吗?我认为这一点应该是正确的,因为块中的线程共享共享内存和其他资源,这些资源在CTA大小管理器中分配.
(2)如果一个块(CTA)中的所有线程都挂起了一些长延迟,例如全局内存访问?一个新的CTA线程会占用像CPU这样的方法的资源吗?换句话说,如果一个块(CTA)已被分派到SM(流处理器),它是否会占用资源直到它完成?
如果有人向我推荐一些关于GPU架构的书或文章,我将不胜感激.谢谢!
在我的GPU上,使用Compute Capability 2.0,每个多处理器的最大线程数是1536.为什么它不是2的幂?
以下是我的GPU的一些细节:
Physical Limits for GPU Compute Capability: 2.0
Threads per Warp 32
Max Warps per Multiprocessor 48
Max Thread Blocks per Multiprocessor 8
Max Threads per Multiprocessor 1536
Maximum Thread Block Size 1024
Registers per Multiprocessor 32768
Max Registers per Thread Block 32768
Max Registers per Thread 63
Shared Memory per Multiprocessor (bytes) 16384
Max Shared Memory per Block 16384
Register allocation unit size 64
Register allocation granularity warp
Shared Memory allocation unit size 128
Warp allocation …Run Code Online (Sandbox Code Playgroud)