小编hth*_*hms的帖子

CUDA常量内存分配如何工作?

我想了解一下如何分配常量内存(使用CUDA 4.2).我知道总可用常量内存是64KB.但是什么时候这个内存实际分配在设备上?此限制是否适用于每个内核,cuda上下文或整个应用程序?

假设.cu文件中有几个内核,每个内核使用少于64K的常量内存.但总的常量内存使用量超过64K.是否可以按顺序调用这些内核?如果使用不同的流同时调用它们会发生什么?

如果有一个大型CUDA动态库,其中包含大量内核,每个内核使用不同数量的常量内存,会发生什么?

如果有两个应用程序需要超过可用常量内存的一半,会发生什么?第一个应用程序运行正常,但第二个应用程序什么时候会失败?在应用程序启动时,在cudaMemcpyToSymbol()调用或内核执行时?

memory cuda constants nvidia gpu-constant-memory

9
推荐指数
1
解决办法
2904
查看次数

使用GestureDetector onScroll滚动延迟

我用来GestureDetector在自定义中实现滚动View.我的实现基于此:平滑滚动,惯性和边缘阻力/回弹

我注意到在滚动开始之前有一个短暂的停顿:我检查了onScroll消息并注意到第一个消息仅在手指移动较大之后到达,这在滚动开始时引起明显的滞后.之后滚动顺利.

它似乎只是在动作事件之间的最小距离之后GestureDetector开始发送onScroll消息,以确保手势不是长按或轻击(顺便说一句,我设置setIsLongpressEnabled(false)).

有没有办法改变这种行为并创建一个平滑的滚动,而不使用低级触摸事件实现自定义滚动手势?

android scroll touch

8
推荐指数
1
解决办法
4650
查看次数

如何查找由“依赖句柄”根对象识别的 C# 内存泄漏?

我正在尝试释放大量对象(WPF 控件、具有大量数据的 Devexpress 网格等),我发现即使在多次 GC.Collect() 和 GC.WaitForPendingFinalizers() 调用之后,其中一些对象仍保留在内存中.

当我转到诊断工具,启用堆分析并创建快照时,我在“路径到根”列表中找到了“相关句柄”根节点。

如何找到对此负责的实际事件处理程序?据我所知,一个未注册的事件处理程序对此负责。我对吗?

我在 Paths to Root 窗口中得到了这样的
EventHandler<EventArgs> <0x1AC128ECF20> [Dependent Handle, RepeatButton <0x1AC128ECD20>]
信息:我试图根据这个分析 .NET 框架内存问题找到更多关于它的信息,但后来我被卡住了。(我从下面的评论中添加了这个,我认为这为问题添加了一些有用的信息)。

什么是依赖句柄?(关于这个问题的文档非常模糊)。

.net c# wpf memory-leaks event-handling

7
推荐指数
0
解决办法
414
查看次数

与Path.addArc的圆形扇形剪裁蒙版?

我需要创建一个具有圆形扇区形状的剪贴蒙版.

我可以使用以下内容绘制一个:

paint.setColor(0x88FF0000);
paint.setStyle(Style.FILL);
canvas.drawArc(oval, 0, 30, true, paint);
Run Code Online (Sandbox Code Playgroud)

我想用它作为剪切路径,所以我尝试过:

Path path = new Path();
path.addArc(oval, 0, 30);
canvas.clipPath(path, Op.REPLACE);
Run Code Online (Sandbox Code Playgroud)

但是addArc没有useCenter参数,所以我得到的不是扇区而是段.

graphics android drawing clipping android-canvas

6
推荐指数
1
解决办法
7940
查看次数

如何在Linux上获取连接显示器到gpu的数量?

我需要确定给定的CUDA设备是否已连接显示器.我知道没有CUDA功能可以做到这一点.

在Windows上,我可以使用NVAPI获取连接显示器的数量以及每个设备的PCI总线/插槽ID.使用后者,我可以找到匹配的CUDA设备(通过调用cudaGetDeviceProperties).

如何在没有NVAPI的Linux上做同样的事情?

从技术上讲,我需要的是Linux替代以下代码:

NvAPI_Initialize();

NvPhysicalGpuHandle gpuHandles[64];
NvU32 numOfGPUs;
NvAPI_EnumPhysicalGPUs(gpuHandles, &numOfGPUs);

for (int i = 0; i < numOfGPUs; i++)
{
    NvU32 connected_displays = 0;
    NvU32 busId = 0;
    NvU32 busSlotId = 0;

    NvAPI_GPU_GetConnectedDisplayIds(gpuHandles[i], NULL, &connected_displays, NULL);
    NvAPI_GPU_GetBusId(gpuHandles[i], &busId);
    NvAPI_GPU_GetBusSlotId(gpuHandles[i], &busSlotId);

    printf("Current device: %d\n", i);
    printf("Number of connected displays: %u\n", connected_displays);
    printf("Bus id: %u\tBus slot id: %u\n", busId, busSlotId);
}

NvAPI_Unload();
Run Code Online (Sandbox Code Playgroud)

linux cuda gpu nvidia nvapi

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

在ImageJ/Fiji中自动释放未使用的内存

我在Windows上使用Fiji/ImageJ并遇到以下问题:当我关闭文件时,不会释放为该文件分配的内存.ImageJ保留分配的内存,并在打开其他文件时重用它.

所以这不是严格意义上的内存泄漏,但仍然非常烦人,尤其是在处理大文件时.图像关闭后是否有手动或(最好)自动方式触发垃圾收集?

编辑:

示例:我使用大文件和Windows任务管理器来检查内存分配.

  1. 干净启动:ImageJ中12123MB为9278K,任务管理器中使用3.56GB/16GB.
  2. 打开大型原始文件:5928MB的12123MB,9.41/16GB的任务管理器
  3. 关闭大文件:12253MB的9253K,任务管理器中的9.43/16GB GB.Fiji-win64.exe仍在任务管理器中使用6419188K内存.
  4. 关闭斐济:任务经理3.28 GB/16GB.

我的问题是我通常会用一些文件和窗口打开斐济.然后我打开一些大文件并最终关闭它们,但ImageJ仍保留我的记忆.然后我开始执行一个内存饥饿的工作,我很快耗尽内存,当Windows开始交换东西时整个系统挂起.

imagej

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

带有模板的 CUDA 内核启动宏

我做了一个宏来简化 CUDA 内核调用:

#define LAUNCH LAUNCH_ASYNC

#define LAUNCH_ASYNC(kernel_name, gridsize, blocksize, ...) \
    LOG("Async kernel launch: " #kernel_name);              \
    kernel_name <<< (gridsize), (blocksize) >>> (__VA_ARGS__);

#define LAUNCH_SYNC(kernel_name, gridsize, blocksize, ...)     \
    LOG("Sync kernel launch: " #kernel_name);                  \
    kernel_name <<< (gridsize), (blocksize) >>> (__VA_ARGS__); \
    cudaDeviceSynchronize();                                   \
    // error check, etc...
Run Code Online (Sandbox Code Playgroud)

用法:

LAUNCH(my_kernel, 32, 32, param1, param2)

LAUNCH(my_kernel<int>, 32, 32, param1, param2)
Run Code Online (Sandbox Code Playgroud)

这很好用;通过第一个定义,我可以启用同步调用和错误检查以进行调试。

但是它不适用于多个模板参数,如下所示:

LAUNCH(my_kernel<int,float>, 32, 32, param1, param3)
Run Code Online (Sandbox Code Playgroud)

我在调用宏的行中收到的错误消息:

error : expected a ">"
Run Code Online (Sandbox Code Playgroud)

是否可以使这个宏与多个模板参数一起工作?

c++ macros templates kernel cuda

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