有一点我非常感激,那就是能够在 python 中命名数组中的维度。例如,我有一个 3 维的 numpy 数组,我经常需要沿着特定的维度对其进行求和。
所以我可以用 ndarray 来做a:
sum(a, axis=2)
Run Code Online (Sandbox Code Playgroud)
如果我的相关维度是最后一个,但我想让它“位置无关”,即用户可以提供任何数组,只要他指定“此维度是“DI””(例如,对于“感兴趣的维度” )。所以基本上我希望能够写:
sum(a, axis="DI")
Run Code Online (Sandbox Code Playgroud)
接近 NETCDF,但我不想实现整个 netcdf 功能。
我有一个 NVIDIA GT650M,具有以下属性:
( 2) Multiprocessors, (192) CUDA Cores/MP: 384 CUDA Cores
Maximum number of threads per multiprocessor: 2048
Run Code Online (Sandbox Code Playgroud)
我刚刚摆脱了流式多处理器 (SM) 和实际多处理器之间的混淆。SM 和多处理器是不同的东西,对吧?例如,使用可视化分析器,我有一个虚拟内核,当以 1 个线程的 1 个块启动时,它只等待并持续 370 毫秒。我可以用一个 SM 用 4 个 1024 个线程块启动它,它仍然持续 370 毫秒。这是正常的,因为任务使用芯片的 2 个多处理器,每个使用 2048 个并发线程(我一使用 5 个块 x 1024,就需要 740 毫秒,正常)。同样,我可以使用 4 个 SM 并发启动 1024 个线程块的 4 次,它仍然需要 370 毫秒,好吧。
问题的第一部分只是为了确保我们不应该混淆 SM 和多处理器?就像我有时甚至在像这里这样的答案中看到的一样:CUDA - Multiprocessors, Warp size and Maximum Threads Per Block:确切的关系是什么? 因此,人们无法通过多处理器显式控制任务的调度方式,因为(据我所知)没有运行时函数允许它,对吗?那么,如果我的卡有 2 个多处理器,每个多处理器有 2048 个线程,或者另一个有 4 个多处理器,每个有 1024 个线程,给定的程序会以相同的方式执行吗?
其次,我想知道哪种用途更好,拥有更多内核较少的多处理器,还是相反?到目前为止,我的理解让我说,内核较少的更多多处理器(对于每个多处理器给定的最大线程)将更适合具有较少/简单操作的更大规模并行,而每个多处理器有更多内核(现在我正在谈论我几乎不知道的事情)将有更多专用 …