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

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

Post by Anonymous »

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].

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post