Ich versuche, so etwas wie dies in CUDA zu implementieren:Schub Funktors: „zu viele Ressourcen für den Start angefordert“
p = { p if p >= floor
z if p < floor
für jedes Element Wo floor
und z
sind Konstanten am Anfang konfigurieren des Tests.
Ich habe versucht, es wie so zu implementieren, aber ich habe den Fehler "zu viele für den Start angeforderten Ressourcen"
A Funktors:
struct floor_functor : thrust::unary_function <float, float>
{
const float floorLevel, floorVal;
floor_functor(float _floorLevel, float _floorVal) : floorLevel(_floorLevel), floorVal(_floorVal){}
__host__
__device__
float operator()(float& x) const
{
if (x >= floorLevel)
return x;
else
return floorVal;
}
};
durch eine transformieren:
thrust::transform(input->begin(), input->end(), output.begin(), floor_functor(floorLevel, floorVal));
Wenn ich eines der Mitglieder meines Funktors, sagen floorVal
, entfernen und einen Funktor mit nur einer Mitgliedsvariablen verwenden, funktioniert es gut.
Weiß jemand, warum dies sein könnte, und wie ich es beheben könnte?
Zusätzliche Informationen:
Meine Array 786.432 Elemente lang.
Meine GPU ist eine GeForce GTX590
ich mit dem Befehl bin Gebäude:
`nvcc -c -g -arch sm_11 -Xcompiler -fPIC -Xcompiler -Wall -DTHRUST_DEBUG -I <my_include_dir> -o <my_output> <my_source>`
Meine CUDA-Version 4.0:
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2011 NVIDIA Corporation
Built on Thu_May_12_11:09:45_PDT_2011
Cuda compilation tools, release 4.0, V0.2.1221
Und meine maximale Anzahl von Threads pro Block 1024 (gemeldet von deviceQuery):
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 49152 bytes
Total number of registers available per block: 32768
Warp size: 32
Maximum number of threads per block: 1024
Maximum sizes of each dimension of a block: 1024 x 1024 x 64
Maximum sizes of each dimension of a grid: 65535 x 65535 x 65535
UPDATE ::
ich auf eine Lösung für mein Problem gestolpert, aber es nicht verstehen. Wenn ich meinen Funktor von "floor_functor" in etwas anderes umbenenne, funktioniert es! Ich habe keine Idee, warum das der Fall ist, und wäre daran interessiert, jemandes Ideen dazu zu hören.
Auf welcher GPU laufen Sie und welche CUDA-Version verwenden Sie? Es bedeutet wahrscheinlich, dass der Start des Schubkerns zu viele Threads pro Block für die Anzahl der von Ihrem Funktor verwendeten Register anfordert, aber das ist nur eine Vermutung. – talonmies
Wie viele Elemente sind eingegeben? – Anycorn
Zusätzlich zu den Informationen, die Talonmies angefordert hat, mit welcher Befehlszeile hast du deinen Code kompiliert? –