- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将二维复数数组传递到 PyCUDA 内核中,但得到了意想不到的结果。
这是我的测试代码:
import numpy as np
import pycuda.driver as cuda
import pycuda.autoinit
from pycuda import gpuarray
from pycuda.compiler import SourceModule
mod = SourceModule("""
#include <pycuda-complex.hpp>
#include <stdio.h>
typedef pycuda::complex<float> cmplx;
__global__ void myFunc(cmplx *A)
{
// A : input, array shape (), of type complex64
int ROWS = 3;
int COLS = 2;
printf("\\nKernel >>");
for(int row = 0; row < ROWS; row++)
{
printf("\\n");
for(int col = 0; col < COLS; col++)
{
printf("[row %d, col %d]: %f + %fi",row, col, A[row,col].real(), A[row,col].imag());
printf("\\t");
}
}
printf("\\n\\n");
}
""")
A = np.zeros((3,2),dtype=complex)
A[0,0] = 1.23 + 3.5j
A[1,0] = 3.4 + 1.0j
A_gpu = gpuarray.to_gpu(A.astype(np.complex64))
print("Host >>")
print(A_gpu)
func = mod.get_function("myFunc")
func(A_gpu,
block=(1,1,1), grid=(1, 1, 1)
)
结果如下:
Host >>
[[1.23+3.5j 0. +0.j ]
[3.4 +1.j 0. +0.j ]
[0. +0.j 0. +0.j ]]
Kernel >>
[row 0, col 0]: 1.230000 + 3.500000i [row 0, col 1]: 0.000000 + 0.000000i
[row 1, col 0]: 1.230000 + 3.500000i [row 1, col 1]: 0.000000 + 0.000000i
[row 2, col 0]: 1.230000 + 3.500000i [row 2, col 1]: 0.000000 + 0.000000i
有人能解释一下为什么内核中的数组看起来不像我传递给它的数组吗?
最佳答案
内核代码中的索引已损坏(有关原因,请参阅 here)。
虽然 A[row,col]
在 C++ 中是技术上有效的语法,但它并不像 Python 中那样意味着多维数组切片。事实上,A[row,col]
的计算结果为 A[row]
,因此 print 语句的输出与您的期望不符的原因应该是显而易见的。
Numpy 数组在内存中连续存储,您必须使用自己的索引方案来访问数组。默认情况下,numpy 使用 row major ordering对于多维数组。这:
mod = SourceModule("""
#include <pycuda-complex.hpp>
#include <stdio.h>
typedef pycuda::complex<float> cmplx;
__global__ void myFunc(cmplx *A)
{
// A : input, array shape (), of type complex64
int ROWS = 3;
int COLS = 2;
printf("\\nKernel >>");
for(int row = 0; row < ROWS; row++)
{
printf("\\n");
for(int col = 0; col < COLS; col++)
{
printf("[row %d, col %d]: %f + %fi",row, col, A[row*COLS+col].real(), A[row*COLS+col].imag());
printf("\\t");
}
}
printf("\\n\\n");
}
""")
将按预期工作:
%run complex_print.py
Host >>
[[ 1.23000002+3.5j 0.00000000+0.j ]
[ 3.40000010+1.j 0.00000000+0.j ]
[ 0.00000000+0.j 0.00000000+0.j ]]
Kernel >>
[row 0, col 0]: 1.230000 + 3.500000i [row 0, col 1]: 0.000000 + 0.000000i
[row 1, col 0]: 3.400000 + 1.000000i [row 1, col 1]: 0.000000 + 0.000000i
[row 2, col 0]: 0.000000 + 0.000000i [row 2, col 1]: 0.000000 + 0.000000i
关于python - 将复数数组传递到 PyCUDA 内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57464075/
我有一个包含两列的文件,第一列包含纯实数,第二列包含 GNUPLOT 可接受的形式的复数,{a,b}(GNUPLOT 等同于 a + bi)。我想用第二列的绝对值绘制第一列,所以我尝试了这个: 使用
我正在使用 pandas,它可以非常有效地按照我需要的方式对数据进行排序/过滤。 此代码运行良好,直到我将最后一列更改为复数;现在我得到一个错误。 return self._cython_agg_ge
我如何让 Django 意识到 countries 的单数形式是 country 而不是 countrie 最佳答案 来自docs ,如果你有一个名为 num_countries 的模板变量,你可以这
我正在从事一个项目,该项目要求我获取输入、执行 DFT(离散傅立叶变换),然后从这些值中获取过零次数。 我编写了一个算法,但它使用复数,我不知道如何操作/执行计算。这是代码: #include #i
我如何在 C 中动态定义复数的三维数组,以便我可以在访问数组时方便的 [i] [j] [k] 符号中访问? 最佳答案 扩展 Bob__ 的 example将数组分配到堆上而不是堆栈上: #includ
我想在我的 Android 项目中使用复数形式。但是,我提供的值可以是浮点值。 例如,当设置 1.5 星时,我希望这个理解,它不是 1 星而是 1.5 星s。 %d star %d star
问题:这是我的虚数正则表达式: [0-9]{0,}\d\.[0-9]{0,}\d[i]|[0-9]{0,}\d[i] 它只取一个纯复数部分的虚数。 当我的解析器遇到例如String im = "2i"
我知道关键,现在我需要搜索 5000 多个用户数据库时产生的所有 结果。任何用户可能没有一个或多个位置,由 id 和 name 字段标识。因此,我需要一个数组中的结果,不仅仅是第一个/最后一个,而是所
Gidday cobbers/尊敬的同事们, 通过实现卡尔曼预测/校正的多目标跟踪,我在其他 SO 线程中看到建议的一般方法是简单地为每个目标提供一个卡尔曼滤波器 vector/数组。 即'多单目标卡
尽管在 C# naming convention for enum and matching property 上阅读了类似但不完全是我想要的内容,但我还是在问这个问题 我发现我倾向于以复数命名枚举,
我正在尝试使用 getQuantityString基于 Android 开发人员指南检索数量字符串(复数)的资源中的方法 Quantity string (plurals) 我得到的错误是 Error
我想用 C++ 处理复数。因此我包括了#include .现在我的问题是:我如何声明一个变量?(那么我们说的格式是什么:1 + i?) 提前致谢:-) 最佳答案 // 1 + 2i std::com
我有一个名为 agency_persons 的表,其中已有一些数据。我使用 php artisan 创建了一个模型: php artisan make:model AgencyPerson 现在,当我
在 C++ 中,复数 double 的一维数组的最大大小是多少(即 std::complex array[dimension] )? 如果我在 main 和 global 中声明数组,最大大小是否有区
我使用 Mustache 来模板化我的 javascript ajax 调用,这是我的数据和模板: {'joined':1} // ajax responde data json. var myTem
我有这么大的问题。我写了一个关于复数的程序。该程序读取和写入复数,将它们相加等。 他说我应该读一下 Why should I overload a C++ operator as a global f
我将在 java 中重复我必须做的事情,以我认为我需要思考的方式来完成这个任务。 (抱歉,我是编程新手)。 头等舱;为复数定义类。我发现这很容易,我的答案如下。 public class Comple
如何在新的 dev django 版本的管理站点上将某些模型名称从“Categorys”更改为“Categories”?在旧版本中(没有管理站点和管理模型)你可以这样做; http://www.the
我最近才发现一种通过 this video 生成毕达哥拉斯三元组的方法解释它,涉及使用高斯(复杂)整数。到目前为止,我已经设法编写了一个函数,该函数返回由每个高斯整数生成的勾股三元组列表,其中虚部小于
我决定尝试一下 complex.h,然后遇到了一个我认为非常奇怪的问题。 int mandelbrot(long double complex c, int lim) { long doubl
我是一名优秀的程序员,十分优秀!