小编Tho*_*sen的帖子

将包含指针的结构复制到CUDA设备

我正在开发一个项目,我需要我的CUDA设备在包含指针的结构上进行计算.

typedef struct StructA {
    int* arr;
} StructA;
Run Code Online (Sandbox Code Playgroud)

当我为结构分配内存然后将其复制到设备时,它只会复制结构而不是指针的内容.现在我通过首先分配指针来解决这个问题,然后将主机结构设置为使用新指针(位于GPU上).以下代码示例使用上面的结构描述了此方法:

#define N 10

int main() {

    int h_arr[N] = {1,2,3,4,5,6,7,8,9,10};
    StructA *h_a = (StructA*)malloc(sizeof(StructA));
    StructA *d_a;
    int *d_arr;

    // 1. Allocate device struct.
    cudaMalloc((void**) &d_a, sizeof(StructA));

    // 2. Allocate device pointer.
    cudaMalloc((void**) &(d_arr), sizeof(int)*N);

    // 3. Copy pointer content from host to device.
    cudaMemcpy(d_arr, h_arr, sizeof(int)*N, cudaMemcpyHostToDevice);

    // 4. Point to device pointer in host struct.
    h_a->arr = d_arr;

    // 5. Copy struct from host to device.
    cudaMemcpy(d_a, h_a, sizeof(StructA), …
Run Code Online (Sandbox Code Playgroud)

struct pointers host cuda device

26
推荐指数
1
解决办法
2万
查看次数

未从 FirstOrDefault 公开的可空引用类型信息

我想在 C# 8.0 中测试新的可为空引用类型功能。

我启动了一个针对 .NET Core 3.0 的新项目,在.csproj文件中启用了可为空的引用类型,并开始编码。我创建了一个简单的列表,它接受 astring[]并返回该string数组中等于 的abc。现在,因为我不确定abc数组中是否真的存在,所以我使用FirstOrDefault()null如果没有找到匹配项,它应该默认为。

using System;
using System.Linq;

public string FindArgument(string[] args)
{
    var arg = args.FirstOrDefault(x => x == "abc");
    return arg;
}
Run Code Online (Sandbox Code Playgroud)

我的方法的返回值string,这应该现在是非空的类型。由于FirstOrDefault()可能返回null,我希望上述方法在返回可能为空 arg变量时产生警告。它不是。

查看FirstOrDefault()Visual Studio 中的签名,很明显原因:该方法返回一个string,而不是string?我期望的可空等价物。

使用下面的方法体确实会产生我预期的警告:

var arg = args.Contains("abc") ? "abc" : …
Run Code Online (Sandbox Code Playgroud)

c# linq c#-8.0 nullable-reference-types .net-core-3.0

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

空类属性是否有效HTML?

是以class下列格式的空属性有效HTML:

<p class="">something</p>
<p class>something</p>
Run Code Online (Sandbox Code Playgroud)

我发现这个问题类似,但具体询问自定义数据属性.

html5

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

抛出TaskCanceledException时,Azure ServiceBus队列不重试消息

我有一个Azure WebJob函数,用于侦听Azure ServiceBus队列上的消息。通常,当我在代码中遇到异常时,根据Azure WebJobs SDK文档,该消息将被放弃:

如果功能成功完成,SDK会在PeekLock模式下接收一条消息,并在消息上调用Complete,如果功能失败,则调用Abandon。如果该函数的运行时间超过了PeekLock超时时间,则该锁定将自动更新。

根据Azure ServiceBus文档,这应该意味着该消息再次变得可用,并将被重试:

如果应用程序由于某种原因无法处理该消息,则可以对收到的消息调用AbandonAsync方法(而不是CompleteAsync)。此方法使Service Bus可以解锁消息并使其可以由同一使用者或另一个竞争使用者再次接收。其次,存在与锁定相关联的超时,并且如果应用程序未能在锁定超时到期之前处理消息(例如,如果应用程序崩溃),则服务总线将消息解锁并使其可以再次接收(基本上是)默认情况下执行AbandonAsync操作)。

上面描述的行为是通常发生的情况,但是我发现了此规则的例外。如果我的代码TaskCanceledException专门抛出了该消息,则该消息不会被丢弃,而应该这样做:

public void ProcessQueueMessage([ServiceBusTrigger("queue")] BrokeredMessage message, TextWriter log)
{
     throw new TaskCanceledException();
}
Run Code Online (Sandbox Code Playgroud)

通过Web作业运行此功能时,我看到错误消息打印成一天,但该消息被使用而没有重试,也没有进入死信队列。如果我将TaskCanceledException上述内容替换为InvalidOperationException,则该消息将被绑定并重试(应根据实际的ServiceBus队列进行了验证)。

我无法找到有关此行为的任何解释。目前,我将换成TaskCanceledException另一个例外来解决此问题。

问题

我正在遇到Azure WebJobs SDK中的错误吗?TaskCanceledException在这方面是否特殊,或者其他类型的异常是否具有类似的行为?


我正在使用以下NuGet软件包:

  • Microsoft.Azure.WebJobs 2.3.0
  • Microsoft.Azure.WebJobs.ServiceBus 2.3.0

c# azure azureservicebus azure-servicebus-queues azure-webjobs

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

type-parameter支持添加的通用接口

我在F#中试图创建一个通用接口,其中类型参数必须支持添加,所以我最终得到这样的东西:

type IMyInterface<'b when 'b : (static member (+) : 'b * 'b -> 'b)> =
    abstract member myFunction : 'b -> 'b
Run Code Online (Sandbox Code Playgroud)

不幸的是,这段代码给了我以下错误:

此代码不够通用.类型变量^ D当^ D:比较和^ D :(静态成员(+):^ D*^ D - > ^ D)无法推广,因为它会逃避其范围.

我发现了关于同样问题的这个问题,但我不确定我理解为什么必须将该功能标记为inline.

此外,既然你不能成为一个抽象的成员inline,我可以在我的具体例子中使用另一种解决方案吗?或者我是否必须找到另一种方法来实现这一目标?

generics f#

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

逃脱 '。' 在 JMESPath 中

我有一个 JSON 对象,我希望在其中使用 JMESPath 检索名称中包含点的属性的值:

{
  "a": {
    "b.c": "value"
  }
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我希望检索value。我怎样才能做到这一点?

jmespath

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