小编smo*_*mok的帖子

为什么z在CUDA内核中始终为零

我正在使用Cudafy在NVIDIA GPU上进行一些计算.(Quadro K1100M功能3.0,如果重要的话)

我的问题是,当我使用以下内容时

cudaGpu.Launch(new dim3(44,8,num), new dim(8, 8)).MyKernel...
Run Code Online (Sandbox Code Playgroud)

当我在内核中使用它时,为什么来自GThread实例的z索引总是为零?

int z = thread.blockIdx.z * thread.blockDim.z + thread.threadIdx.z;
Run Code Online (Sandbox Code Playgroud)

此外,如果我必须做类似的事情

cudaGpu.Launch(new dim3(44,8,num), new dim(8, 8, num)).MyKernel...
Run Code Online (Sandbox Code Playgroud)

z确实提供了不同的索引,但由于每个块的线程数限制,num不能很大.有关如何解决这个问题的任何消息?

编辑

另一种表达方式.当块大小只有2D时,我可以在我的内核中使用thread.z(对于任何有用的东西)吗?

c# cuda cudafy.net

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

如何使用EF Core在转换后的SQL中获得COUNT DISTINCT

我想让EF核心翻译.Select(x=>x.property).Distinct().Count()成类似

SELECT COUNT(DISTINCT property)
Run Code Online (Sandbox Code Playgroud)

让我们举个例子。假设我有一个数据库表,其中包含PersonID(long),VisitStart(datetime2)和VisitEnd(datetime2)。如果我想获得特定人员访问的不同天数,则可以编写类似

SELECT COUNT(DISTINCT CONVERT(date, VisitStart)) FROM myTable GROUP BY PersonID
Run Code Online (Sandbox Code Playgroud)

但是使用EF核心和这个

MyTable
    .GroupBy(x=>x.PersonID)
    .Select(x=> new 
    {
        Count = x.Select(y=>y.VisitStart.Date).Distinct().Count()
    })
Run Code Online (Sandbox Code Playgroud)

给出正确结果的结果,将转换为此SQL

SELECT [x].[PersonID], [x].[VisitStart], [x].[VisitEnd]
FROM [myTable] as [x]
ORDER BY [x].[PersonID]
Run Code Online (Sandbox Code Playgroud)

没有GROUP BY且没有DISTINCT或COUNT,因此必须在内存中进行分组,这在具有可能需要从数据库中提取数百万条记录的表上操作时不理想。

所以任何人都知道如何获得EF核心将a .Select(...).Distinct().Count()转换为SELECT COUNT(DISTINCT ...)

c# ef-core-2.1

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

标签 统计

c# ×2

cuda ×1

cudafy.net ×1

ef-core-2.1 ×1