Wie kann ich Float4 -Vektor mit Pycuda richtig an Kernel übergeben?

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Wie kann ich Float4 -Vektor mit Pycuda richtig an Kernel übergeben?

by Anonymous » 08 Aug 2025, 03:08

Ich versuche, ein Float4 als Argument an meinen Cuda -Kernel (nach Wert) zu übergeben, indem ich Pycudas make_float4 () unter Verwendung von Pycuda übergeben kann. Aber es scheint eine Fehlausrichtung zu geben, wenn die Daten an den Kernel übertragen werden. Wenn ich die Ausgabe für einen Eingang (1,2,3,4) lese, bekomme ich stattdessen (3,4,0,0). Dies geschieht auch mit int4 , aber int3 und float3 funktionieren gut.

Code: Select all

# --- Minimal PyCUDA Test ---
import pycuda.driver as drv
import pycuda.compiler
import pycuda.gpuarray as gpa
import numpy as np
import pycuda.autoinit

minimal_kernel_code = """
__global__ void write_constant(
int* output,
const int4 test
) {
output[0] = test.x;
output[1] = test.y;
output[2] = test.z;
output[3] = test.w;
}
"""

module_test = pycuda.compiler.SourceModule(minimal_kernel_code)
write_constant_kernel = module_test.get_function("write_constant")

test_gpu_mem = drv.mem_alloc(4 * np.int32().nbytes)

write_constant_kernel(
test_gpu_mem,
gpa.vec.make_int4(1,2,3,4), # Constant value to write
block=(1, 1, 1),
grid=(1, 1)
)

test_cpu_mem = np.empty(4, dtype=np.int32)
drv.memcpy_dtoh(test_cpu_mem, test_gpu_mem)

print(test_cpu_mem)
Die erwartete Ausgabe wäre [1,2,3,4], aber es ist [3,4,0,0].

Top