pycuda 一些計算函式

2021-08-21 12:30:51 字數 2980 閱讀 9169

評估gpuarray例項上涉及的表示式可能有些低效,因為為每個中間結果建立了乙個新的臨時表。模組pycuda.elementwise中的功能包含有助於生成核心的工具,這些核心在一次傳遞中評估乙個或多個運算元上的多階段表示式。

classpycuda.elementwise.elementwisekernel(arguments,operation,name =「kernel」,keep = false,options = ,preamble =「」 )

如果該引數是向量,則生成乙個帶有許多標量或向量引數的核心,並對其引數的每個條目 執行標量運算。

arguments被指定為格式化為c引數列表的字串。 operation被指定為c賦值語句,沒有分號。運算中的向量應該由變數i索引。

name指定編譯核心的名稱,keep 和options未經修改地傳遞給pycuda.compiler.sourcemodule

preamble指定在元素核心規範之前包含的一些源**。您可以使用它來包含其他檔案和/或定義操作使用的函式。

__call__(* args,range = none,slice = none )

呼叫生成的標量核心。引數可以是標量或gpuarray例項。

如果範圍給出,它必須是乙個slice物件,並指定索引的範圍我的量,操作被執行。

如果切片中給出,它必須是乙個slice物件,並指定索引的範圍我的量,操作進行時,截斷到容器上。此外,slice可能包含相對於陣列末尾的索引的負索引。

如果給出了stream,它必須是乙個pycuda.driver.stream物件,執行將被序列化。

這是乙個用法示例:

importpycuda.gpuarrayasgpuarrayimportpycuda.driverascudaimportpycuda.autoinitimportnumpyfrompycuda.curandomimportrandascurand

a_gpu = curand((50,))

b_gpu = curand((50,))frompycuda.elementwiseimportelementwisekernel

lin_comb = elementwisekernel(

"float a, float *x, float b, float *y, float *z",

"z[i] = a*x[i] + b*y[i]",

"linear_combination")

c_gpu = gpuarray.empty_like(a_gpu)

lin_comb(5, a_gpu, 6, b_gpu, c_gpu)importnumpy.linalgaslaassertla.norm((c_gpu - (5*a_gpu+6*b_gpu)).get()) < 1e-5

(您可以examples/demo_elementwise.py在pycuda發行版中找到此示例。)

classpycuda.reduction.reductionkernel(dtype_out,neutral,reduce_expr,map_expr = none,arguments = none,name =「reduce_kernel」,keep = false,options = ,preamble =「」,allocator = none )

生成乙個帶有多個標量或向量引數 (至少乙個向量引數)的核心,對vector引數的每個條目執行map_expr,然後對其結果執行reduce_expr。 中性作為初始值。preamble提供了在實際的簡化核心**之前新增預處理程式指令和其他**(如輔助函式)的可能性。

map_expr中的向量應該由變數i索引。reduce_expr 使用形式值「a」和「b」來指示二進位制縮減操作的兩個運算元。如果未指定map_expr,則會自動假定「in [i]」 - 因此只存在乙個輸入引數。

dtype_out指定numpy.dtype執行縮減的位置以及返回結果的位置。中性被指定為float或整數,格式為string。reduce_expr和 map_expr被指定為字串格式化的操作,引數 被指定為格式化為c引數列表的字串。name指定編譯核心的名稱,keep和options未經修改地傳遞給pycuda.compiler.sourcemodule。preamble被指定為一串**。

這是乙個用法示例:

a = gpuarray.arange(400, dtype=numpy.float32)

b = gpuarray.arange(400, dtype=numpy.float32)

krnl = reductionkernel(numpy.float32, neutral="0",

reduce_expr="a+b", map_expr="x[i]*y[i]",

arguments="float *x, float *y")

my_dot_prod = krnl(a, b).get()

QT 中一些數學計算函式

qt的一些範例中有出現 qmax,qmin 等 math函式的身影,但我在官方檔案中卻找不到與 math函式相關的說明,所以我就把函式的source裡面提供的方法整理條列,並且看看還有哪些 math相關的函式可用。在 qglobal.h 裡,可以找到幾種 math函式,條列於下,但一般常用的 mat...

QT 中一些數學計算函式

qt的一些範例中有出現 qmax,qmin 等 math函式的身影,但我在官方檔案中卻找不到與 math函式相關的說明,所以我就把函式的source裡面提供的方法整理條列,並且看看還有哪些 math相關的函式可用。在 qglobal.h 裡,可以找到幾種 math函式,條列於下,但一般常用的 mat...

一些 lotus script 函式

function replace fstr as string,rstr as string,tstr as string as string r5適用 fstr 要處理的字串 rstr 要替換的字串 tstr 字串替換目標 while instr fstr,rstr 0 strtemp strle...